gpt4 book ai didi

fork 后子进程永远不会执行

转载 作者:太空宇宙 更新时间:2023-11-04 06:45:26 25 4
gpt4 key购买 nike

我必须编写一个 C 程序,向父级提供一个字符串,父级对其进行编辑,将其放入管道中,然后子级对其进行验证并将其发回。由于某种原因,只有父级执行。我想让 parent 发送文本,然后等待 child 执行,然后阅读答案。但是代码完全忽略了 child 。

这是片段:

char response[10];
pid_t pid = fork();
int p[2];
pipe(p);
if(pid!=0)
{
char username[255];
CutString(8,command,username); // a function of mine i verified
write(p[1],username,sizeof(username));
close(p[1]);
wait(NULL);
read(p[0],response,8);//the answer is always 8 bytes
close(p[0]);
}
else //never gets here
{
char buffer[255];
size_t bufferIndex=0;
char ch;
while (ch != '\0')
{
read(p[0],&ch,1);
buffer[bufferIndex++]=ch;
}
close(p[0]);
f=fopen("config.txt","r");
write(p[1],SearchInFile(f,buffer),8);
close(p[1]);
}

最佳答案

上面代码的'child'部分几乎没有错误,导致它执行迅速,没有副作用,然后退出。

  1. “while (ch != 0)”依赖于未初始化的“ch”变量。在我的构建 (cc -g) 中,ch 被初始化为零,导致 while 循环的执行为零。
  2. 没有测试来检查 fopen (config.txt) 是否真的有效。如果不存在,代码可能会崩溃。
  3. 在写入 p[1] (write(p[1]) 时,输入部分 (p[0]) 已经关闭。很可能导致 SIGPIPE。

旁注:不清楚该程序试图做什么。

编辑 2019-10-25:

可能的附加问题:

  1. 如果未初始化的 ch(在子部分中)以非零值开头,代码可能会在“读取”语句中陷入永远等待模式,因为没有任何内容写入管道。

关于fork 后子进程永远不会执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58545751/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com