以下代码通过管道读取来自其他进程的消息。所有进程都能正确打印出所有的消息,但是它们将永远不会经过while循环。尝试在Eclipse中进行调试,读完所有消息后,它将停止在while循环中。进程挂起读取
索引是分配给每个进程的编号。第一个进程的索引== 0. 消息本身就是发送消息的进程的索引。
while((n = read(fd[index][0], &mymsg, sizeof(int))) == sizeof(int))
printf("process%d has received a message from process%d\n", index, mymsg);
任何想法为什么会发生这种情况?
下面是每个过程是如何写入另一个:
// Write to other process
if(write(fd[index2][1], &index, sizeof(int)) != sizeof(int))
sys_error(2);
这样做五次。 fd是每个进程的读写结束表。
目前尚不清楚为什么这不是你期望的行为。代码应该在什么情况下通过while循环? –
@DavidSchwartz如果它读入没有字节或返回错误。 – sj755
你有什么特别的理由可以期待这些事情发生吗?如果不是,那么为什么它应该退出while循环? (文件描述符是否非阻塞?) –