小编Sør*_*ren的帖子

是什么导致我的程序挂起而没有正常退出?(管道,读取系统调用,while循环)

我有一个程序,我从几个子进程写入管道,然后尝试从每个管道读取写入每个进程的所有消息,并将它们打印到屏幕上.使用以下代码(具体来说,while循环使用read系统调用将消息存储到缓冲区中buf),我的程序将挂起而不退出,也不会打印发送到不同进程的所有消息.

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 %s\n",i,buf);    
    }
}
Run Code Online (Sandbox Code Playgroud)

但是,使用以下代码,程序正确退出,但不会打印所有消息(因为它们不是全部读取):

for (i = 0; i < MAXP; i++) {
    if(id == i) {
        nbytes = read(pfds[i][0], buf, sizeof(buf));
        printf("process%d has received a message from %s\n",i,buf); 
    }
}
Run Code Online (Sandbox Code Playgroud)

这是我写入管道的代码:

write(pfds[j][1],msg,9);  // write the message to j pipe
Run Code Online (Sandbox Code Playgroud)

并且消息是:

sprintf(msg, "process%d", i); // create the message - 9 bytes …
Run Code Online (Sandbox Code Playgroud)

c process system-calls low-level-io

3
推荐指数
1
解决办法
1982
查看次数

标签 统计

c ×1

low-level-io ×1

process ×1

system-calls ×1