【发布时间】:2017-09-24 18:25:54
【问题描述】:
这个论坛有很多关于管道读写的问题,但我无法解决我的问题。 下面的代码 sn-p,做了以下事情:
- 通过命令行参数文件名通过pipe_p传递给子进程
- 子进程打开指定文件,并将其内容写入 pipe_c 供父进程读取并显示在屏幕上。
一切正常,但父进程无法从管道读取数据(因为它没有打印任何内容)。 我观察到数据被子进程成功写入,因为我能够通过管道在子进程块中打印内容,但不能在父进程中。
注意:第 4 步不起作用
请大家帮帮我。
代码:
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <string.h>
int main(int argc, char **argv){
int pipe_p[2], pipe_c[2];
int childpid, c, k = 0;
char buffer[1000] = {0};
FILE *file;
pipe(pipe_p);
pipe(pipe_c);
childpid = fork();
if(childpid){
//parent process block
//STEP 1 -------
close(pipe_p[0]); //closing reading side of pipe
write(pipe_p[1], argv[1], strlen(argv[1]));
close(pipe_p[1]);
//--------------
wait(NULL);
//--------------
//printf("%s\n", "Its working");
//STEP 4 -------
close(pipe_c[1]);
read(pipe_c[0], buffer, sizeof(buffer));
close(pipe_c[0]);
printf("%s\n", buffer);
//--------------
}
else{
//child process block
//sleep(1);
//STEP 2 -------
close(pipe_p[1]);
read(pipe_p[0], buffer, sizeof(buffer));
close(pipe_p[0]);
//printf("%s\n", buffer);
//--------------
//STEP 3 -------
file = fopen(buffer, "r");
while((c = getc(file)) != EOF){
buffer[k++] = c;
}
buffer[k] = 0;
//printf("%s", buffer);
close(pipe_c[0]);
write(pipe_c[1], buffer, strlen(buffer));
close(pipe_c[1]);
//--------------
}
return 0;
}
【问题讨论】: