我正在讀取來自管道的未知數量的消息。但是,讀取被阻止。我試過下面的代碼將讀取設置爲非阻塞。但是,這會導致讀取錯誤和進程無法讀取。從管道讀取阻塞
// Set pipe to non-blocking
sleep(5);
fcntl(fd[index][0], F_SETFL, O_NONBLOCK);
如何在不掛起程序的情況下成功讀取和打印所有消息? 以下是導致問題的代碼:
// Read every message
while((n = read(fd[index][0], &mymsg, sizeof(int))) == sizeof(int))
printf("process%d has received a message from process%d\n", index, mymsg);
閱讀有關select,poll和epoll的文檔。 –
你會得到什麼錯誤?無阻塞的套接字在沒有任何內容需要讀取時總會返回「讀取錯誤」。 –
@ZanLynx這是正確的。當有足夠的流程啓動時。幾個進程將退出並出現讀取錯誤。 – sj755