以下代碼通過管道讀取來自其他進程的消息。所有進程都能正確打印出所有的消息,但是它們將永遠不會經過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循環? (文件描述符是否非阻塞?) –