是什么导致我的程序挂起而没有正常退出? (管道,读取系统调用,wh
发布时间:2020-12-15 04:15:32 所属栏目:Java 来源:网络整理
导读:我有一个程序,我从几个子进程写入管道,然后尝试从每个管道读取写入每个进程的所有消息,并将它们打印到屏幕上.使用以下代码(具体来说,使用read系统调用将消息存储到缓冲区buf中的while循环),我的程序将挂起而不退出,也不会打印发送到不同进程的所有消息. for
我有一个程序,我从几个子进程写入管道,然后尝试从每个管道读取写入每个进程的所有消息,并将它们打印到屏幕上.使用以下代码(具体来说,使用read系统调用将消息存储到缓冲区buf中的while循环),我的程序将挂起而不退出,也不会打印发送到不同进程的所有消息.
for (i = 0; i < MAXP; i++) { if(id == i) { while(read(pfds[i][0],buf,sizeof(buf)) > 0) printf("process%d has received a message from %sn",i,buf); } } 但是,使用以下代码,程序正确退出,但不会打印所有消息(因为它们不是全部读取): for (i = 0; i < MAXP; i++) { if(id == i) { nbytes = read(pfds[i][0],sizeof(buf)); printf("process%d has received a message from %sn",buf); } } 这是我写入管道的代码: write(pfds[j][1],msg,9); // write the message to j pipe 并且消息是: sprintf(msg,"process%d",i); // create the message - 9 bytes (inc. null term) // the message is "process0" or "process1" ... through "process8" 这是一个9字节的char数组: char msg[9]; 解 for (j = 0; j < MAXP; j++) { close(pfds[j][1]); // close write to j from i } 解决方法
也许b / c你没有关闭管道?如果写入结束未关闭,则读取将继续挂起
尝试添加 close(pfds[j][1]); 将msgs写入管道后 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |