【发布时间】:2015-03-26 11:18:40
【问题描述】:
我在以下事情上遇到了一些困难:
我正在尝试将管道发送到函数内的子节点,然后让子节点写入其中。
以下代码部分会更好地解释它:
int p[2];
int i;
pipe(p);
close(p[1]);
if(fork1() == 0){
close(p[0]);
runcmd(parsecmd(buf),p);
}
wait(0);
}
while(read(p[0],&i,sizeof(int)) != 0){
printf(1," id: %d\n",i );}
runcmd 将有以下代码:
...
void runcmd(struct cmd *cmd,int pp[]){
int j = getpid();
write(pp[1],&j,sizeof(int));
close(pp[1]);
...
遗憾的是,预期的结果应该是 - 父级将打印 id(getpid 是一个返回当前正在运行的进程 id 的函数),但事实并非如此,它在调用时什么也不打印。我做错什么了?
【问题讨论】:
-
我不认为
wait(0);是允许的。我没有在手册页中找到可以将 NULL 指针传递给wait() -
wait(0) 是允许的,因为它是 xv6 而不是普通的 linux...
标签: c pipe fork read-write xv6