我必须做一个C程序,给父程序一个字符串,父程序编辑它,放入一个管道,然后子程序验证它并将其发送回去。出于某种原因,只有父级执行。我想让家长发短信,然后等待孩子被处决,然后读答案。但是代码完全忽略了孩子。
以下是片段:

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

最佳答案

上面代码的“子”部分很少出错,导致它快速执行,没有副作用,然后退出。
“while(ch!=0)依赖于未初始化的“ch”变量。在我的生成(cc-g)中,ch被初始化为零,导致while循环的执行为零。
没有测试来检查fopen(config.txt)是否实际工作。如果它不存在,代码可能崩溃。
在写入p[1]时(写入(p[1]),输入部分(p[0])已经关闭。最有可能导致SIGPIPE。
旁白:目前还不清楚该计划的目的。
编辑2019-10-25:
可能的附加问题:
如果未初始化的ch(在子部分中)以非零值开头,则代码可能会在“read”语句上陷入wait forever模式,因为没有任何内容写入管道。

10-07 19:08
查看更多