【发布时间】:2019-10-24 16:43:28
【问题描述】:
我必须制作一个 C 程序,给父级一个字符串,父级编辑它,放入管道,然后子级验证它并将其发送回。出于某种原因,只有父级执行。我希望父母发送文本,然后等待孩子执行,然后阅读答案。但是代码完全忽略了孩子。
这是sn-p:
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]);
}
【问题讨论】:
-
分叉前不应该先打开管道吗?
-
//never gets here-- 我很难相信。如果fork()成功,则if的两个分支都会被执行。这不是问题。 -
这也是令我惊讶的地方。由于某些原因,它只是没有。我在每一行都做了一个 printf ,但没有显示任何内容。
-
如果
fork()有效,则有两个进程。pipe()会有多少电话?会有多少个管道... -
您可以在 gdb 下运行,设置“follow-fork-mode child”,然后逐步执行代码。这将允许您单步调试/调试子部件