Child 进程从不在 fork 后执行
Child process never executes after fork
我必须编写一个 C 程序,给 parent 一个字符串,parent 编辑它,放入管道,然后 child 验证它并发送它背部。由于某种原因,只有 parent 执行。我想让 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 != '[=11=]')
{
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'部分错误很少,导致执行很快,没有副作用,然后退出。
- 'while (ch != 0)' 依赖于未初始化的 'ch' 变量。在我的构建 (cc -g) 中,ch 被初始化为零,导致 while 循环的执行为零。
- 没有测试可以检查 fopen (config.txt) 是否真的有效。如果不存在,代码可能会崩溃。
- 在写入p[1]的时候(write(p[1]),输入部分(p[0])已经关闭。很可能导致SIGPIPE。
旁注:不清楚该程序试图做什么。
编辑 2019-10-25:
可能的其他问题:
- 如果未初始化的 ch(在子部分)以非零值开始,代码可能会在 'read' 语句中陷入永远等待模式,因为没有任何内容写入管道。
我必须编写一个 C 程序,给 parent 一个字符串,parent 编辑它,放入管道,然后 child 验证它并发送它背部。由于某种原因,只有 parent 执行。我想让 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 != '[=11=]')
{
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'部分错误很少,导致执行很快,没有副作用,然后退出。
- 'while (ch != 0)' 依赖于未初始化的 'ch' 变量。在我的构建 (cc -g) 中,ch 被初始化为零,导致 while 循环的执行为零。
- 没有测试可以检查 fopen (config.txt) 是否真的有效。如果不存在,代码可能会崩溃。
- 在写入p[1]的时候(write(p[1]),输入部分(p[0])已经关闭。很可能导致SIGPIPE。
旁注:不清楚该程序试图做什么。
编辑 2019-10-25:
可能的其他问题:
- 如果未初始化的 ch(在子部分)以非零值开始,代码可能会在 'read' 语句中陷入永远等待模式,因为没有任何内容写入管道。