我试着用两个进程通过管道进行通信。我等待孩子在管道中写一个字符,然后,家长会从管道中读取字符并显示在屏幕上。问题是我成功地在管道中编写了角色(我做了一个测试,以便立即从管道中读取,我看到它在管道中),但是当父级从管道中读取时,管道中什么也没有。我真不明白为什么,一切看起来都很好。
int PID, canal[2];
if(-1 == (PID = fork()))
{
perror("Error");
return 0;
}
if(-1 == pipe(canal))
{
perror("Error");
return 0;
}
if(PID == 0)
{
close(canal[0]);
printf("Child\n");
char buffer = 'C';
if( 0 == write(canal[1], &buffer, sizeof(char)))
printf("Didn't write anything\n");
close(canal[1]);
}
else
{
char readBuffer;
wait(NULL);
printf("Parent\n");
close(canal[1]);
if(read(canal[0], &readBuffer, sizeof(char)))
{
printf("I read: ");
printf("%c\n", readBuffer);
}
close(canal[0]);
}
最佳答案
问题是在调用fork之后调用pipe。所以父管道和子管道会得到不同的副本。在呼叫fork之前将呼叫转移到pipe。