【发布时间】:2017-05-30 01:48:42
【问题描述】:
在我的程序中,子进程应该从键盘接收一些值,然后发送给父进程。父进程应计算总和并返回给子进程。我的程序如下所示:
3 4 5 -1 孩子(4753):发送 3 给父母 父母(4751):收到 3 父母(4751):送回 3 父母(4751):收到 4 父母(4751): 发回 7 父(4751):收到 5 个孩子(4753):收到 3 父母(4751):发回 12 父母(4753):收到 4 父母(4753): 发回 7 个父级(4753):收到 5 个父级(4753):发回 12 个
从结果来看,最后一步是 Parent 发回 12 但孩子无法收到 12 并显示总和。 因此,任何人都有一些想法为什么结果不是我的预期以及如何修改我的代码?
提前致谢。
【问题讨论】:
-
代码没有使用
main()函数的参数,所以main()签名应该是:int main( void ) -
发布的代码没有完全编译,它缺少
wait()函数的标题语句。 IE。#include <sys/types.h> #include <sys/wait.h>,编译时,始终启用所有警告,修复这些警告。 (对于gcc,至少使用:-Wall -Wextra -pedantic我也使用:-Wconversion -std=gnu99) -
在调用任何
scanf()系列函数时,始终检查返回值(而不是参数值)以确保操作成功。 -
这一行:
while(buf[i]!= -1)还应该检查输入缓冲区没有溢出(这将是未定义的行为,可能导致段错误事件)建议:while( i< 1024 && buf[i]!= -1) -
在
while(buf[i] -1)循环内,这一行:pid = getpid();覆盖了来自对fork()的调用的信息,并且随后通过while()循环将使用不正确的信息。
标签: c multithreading pipe fork