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

索伦

我有一个程序,其中将多个子进程写入管道,然后尝试从每个管道读取写入每个进程的所有消息,然后将它们打印到屏幕上。使用以下代码(特别是使用read系统调用的while循环将消息存储到buffer中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);    
    }
}

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

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); 
    }
}

这是我写给管道的代码:

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
}
乔·C

也许您没有关闭水管?如果写端未关闭,读将继续挂起

尝试添加

close(pfds[j][1]);

在将消息写入管道后

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用读取系统调用时,While 循环不会退出

来自分类Dev

我无法退出while循环

来自分类Dev

shell 无法正常退出 while 循环。

来自分类Dev

是什么导致我的应用程序无法启动?

来自分类Dev

While循环在我的程序中无法正常工作

来自分类Dev

是什么导致退出应用程序时不调用close事件

来自分类Dev

Python入门-为什么我的while循环无法正常工作?

来自分类Dev

是什么原因导致我的VM的操作系统挂起“切换到Clocksource精致时钟”?

来自分类Dev

是什么导致我的搜寻无限循环?

来自分类Dev

是什么导致deserializeUser()无法调用?

来自分类Dev

是什么导致deserializeUser()无法调用?

来自分类Dev

从方法调用返回while循环时,会导致Scanner引发NoSuchElementException的原因是什么?

来自分类Dev

是什么导致我的程序仅读取3行输入中的2行

来自分类Dev

为什么我的简单程序永远不会退出while循环?

来自分类Dev

为什么我的简单程序永远不会退出while循环?

来自分类Dev

我系统的/ bin中的`[`程序是什么?

来自分类Dev

检查在while循环中调用的程序的退出代码

来自分类Dev

为什么我不能通过系统调用退出 shellcode?

来自分类Dev

为什么我的循环无法正常运行?

来自分类Dev

为什么我的循环无法正常运行?

来自分类Dev

是什么导致新的终端程序外壳初始化时无法加载我的.profile文件?

来自分类Dev

是什么导致我的wpf应用程序无法找到已经使用的资源

来自分类Dev

我的简单Dash应用程序应用程序有什么问题,导致我的绘图无法正常工作?

来自分类Dev

此do-while循环无法正常工作,我不明白为什么

来自分类Dev

我无法退出程序

来自分类Dev

是什么原因导致对asyncio.new_event_loop()的简单调用挂起?

来自分类Dev

为什么我的while(read)与管道循环永远不会结束?

来自分类Dev

是什么导致我的 HTML 文件无法加载我的 CSS?

来自分类Dev

无法退出while循环,(C ++)?

Related 相关文章

  1. 1

    使用读取系统调用时,While 循环不会退出

  2. 2

    我无法退出while循环

  3. 3

    shell 无法正常退出 while 循环。

  4. 4

    是什么导致我的应用程序无法启动?

  5. 5

    While循环在我的程序中无法正常工作

  6. 6

    是什么导致退出应用程序时不调用close事件

  7. 7

    Python入门-为什么我的while循环无法正常工作?

  8. 8

    是什么原因导致我的VM的操作系统挂起“切换到Clocksource精致时钟”?

  9. 9

    是什么导致我的搜寻无限循环?

  10. 10

    是什么导致deserializeUser()无法调用?

  11. 11

    是什么导致deserializeUser()无法调用?

  12. 12

    从方法调用返回while循环时,会导致Scanner引发NoSuchElementException的原因是什么?

  13. 13

    是什么导致我的程序仅读取3行输入中的2行

  14. 14

    为什么我的简单程序永远不会退出while循环?

  15. 15

    为什么我的简单程序永远不会退出while循环?

  16. 16

    我系统的/ bin中的`[`程序是什么?

  17. 17

    检查在while循环中调用的程序的退出代码

  18. 18

    为什么我不能通过系统调用退出 shellcode?

  19. 19

    为什么我的循环无法正常运行?

  20. 20

    为什么我的循环无法正常运行?

  21. 21

    是什么导致新的终端程序外壳初始化时无法加载我的.profile文件?

  22. 22

    是什么导致我的wpf应用程序无法找到已经使用的资源

  23. 23

    我的简单Dash应用程序应用程序有什么问题,导致我的绘图无法正常工作?

  24. 24

    此do-while循环无法正常工作,我不明白为什么

  25. 25

    我无法退出程序

  26. 26

    是什么原因导致对asyncio.new_event_loop()的简单调用挂起?

  27. 27

    为什么我的while(read)与管道循环永远不会结束?

  28. 28

    是什么导致我的 HTML 文件无法加载我的 CSS?

  29. 29

    无法退出while循环,(C ++)?

热门标签

归档