【发布时间】:2017-04-02 04:18:06
【问题描述】:
我对这个家庭作业有疑问。我正在学习 Linux C,所以我是初学者。
现在练习很简单:我必须创建一个子进程。现在父进程需要读取一个文本文件(例如 a.txt)并通过管道发送。子进程从管道读取并将管道的内容打印到终端。但是我不明白子进程不读取管道是因为它认为管道是空的。
我发布了到目前为止我所做的代码:
#include "myinclude.h" //a separate file which contains all needed headers to run the program.
#define MERET 80
int main(int argc,char *argv[]){
int pfd[2];
int status;
char buffer[MERET];
pid_t pid;
FILE *fp1,*fp2;
if(argc != 2){
printf("Nincs eleg argumentum");
}
if(pipe(pfd) < 0){
syserr("pipe");
}
if((pid = fork()) < 0){
syserr("fork");
}
if(pid == 0){
close(pfd[1]);
if ((fp1 = fdopen (pfd[0],"r")) <0){
syserr("fdopen");
}
printf("mukodsz");
while(fgets(buffer,MERET,fp1) != NULL){//something here is not good
printf("%s",buffer);
fprintf(stdout,"Siker");
}
close(pfd[0]);
exit(0);
}
close(pfd[0]);
if ((fp1 = fdopen (pfd[1],"w")) == NULL){
syserr("fdopen");
}
if((fp2 = fopen(argv[1],"r")) < 0){
syserr("fopen");
}
while(fgets(buffer,MERET,fp2) != NULL){
fprintf(fp1,"%s",buffer);
//fprintf(stdout,"Siker\n");
}
close(pfd[1]);
wait(&status);
//fprintf(stdout,"Siker");
exit(0);
}
在我的语言中,“siker”意味着成功。我用它来调试程序,但是子进程的while循环没有打印任何东西。
【问题讨论】: