【发布时间】:2011-06-30 16:16:19
【问题描述】:
我希望能够分叉一个进程并让子进程和父进程使用管道进行双向链接。我创建了 2 个管道并让父级从第一个管道的末尾读取并写入第二个管道的开头,反之亦然,但我遇到了一些问题。
这里是代码的简短版本(省略了错误检查)
void PlayGame(int in, int out, int first, int id){
FILE *inStream = fdopen(in, "r");
FILE *outStream = fdopen(out, "w");
if (first) fputc( id, outStream);
while(1){
int c = fgetc(inStream);
printf("process %d has read %d\n", id, c);
fputc( id, outStream);
}
}
int main (void){
int fd[2];
int fd1[2];
pipe(fd);
pipe(fd1);
pid_t pid = fork();
if (pid == 0){
PlayGame(fd[0], fd1[1], 0, 1);
exit(0);
}
PlayGame(fd1[0], fd[1], 1, 2);
exit(0);
}
我想要实现的是父级将一个字符写入管道,而子级等待它接收到一个字符,然后写入其响应并再次等待父级。我在这里做错了什么?
父母和孩子都在第一次调用时卡住了
int c = fgetc(inStream);
【问题讨论】: