fgetc阻塞:从管道读取的问题

时间:2011-02-20 09:02:58

标签: c ipc pipe fork

我希望能够分叉一个进程并让子进程和父进程使用管道进行双向链接。我创建了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);

1 个答案:

答案 0 :(得分:5)