我有两个进程,一个是父亲,另一个是儿子,儿子需要访问一个文本文件,读取它并通过管道发送给父亲,这样他就可以打印出来了。我不知道文件的大小,所以我想最好的方法是当时发送一行文件,但我不知道如何让父亲知道什么时候继续读取管道,什么时候到停止。
以下是我在想的样本:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h>
#include <time.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <pwd.h>
#include <grp.h>
#include <dirent.h>
void main(int argc,char *argv[]){
int pipes[2];
pipe(pipes);
pid_t son;
son = fork();
if(son ==0){
FILE *file;
char buff[1020];
if ((file = fopen("path","r")) == NULL) printf("Error %s\n",strerror(errno));
close(pipes[0]);
while (fgets(buff,1020,file) != NULL){
write(pipes[1],buff,strlen(buff) +1);
}}
else{
char *bufftemp = malloc(sizeof(char)*1024);
close(pipes[1]);
while (read(pipes[0],bufftemp,1024) != 0 ){
printf("FATHER %s",bufftemp );
}
free(bufftemp);
printf("\n");
}
exit(0);
}
如果我从儿子那里打印buff,它会打印每一行,但是父亲似乎每次都没有阅读,只是读取第一行就是这样。