我正在努力学习考试,而我却无法找到一个简单的分叉程序。
我有这段代码并且必须向其添加代码为了让父进程通过PIPE向子进程发送值n
。孩子应该加倍值,不要打印任何东西并将其返回给父母。
然后父母应该在屏幕上打印它。
int main() {
int n=1;
if(fork() == 0) {
}
printf(“%d\n”, n);
return 1;
}
我真的不知道PIPE如何工作以及如何使用它们。任何人都可以帮助我吗?
答案 0 :(得分:1)
pid_t cp;
int fi[2],st;
int n;
if(pipe(fi)==-1) {perror("pipe error");exit(0);}
if((cp=fork())==-1) {perror("fork"); exit(0);}
else if(cp==0)
{
sleep(2);
close(fi[1]);
read(fi[0],&n,2);
n*=2;
close(fi[0]);
exit(n);
}
else
{
close(fi[0]);
write(fi[1],n,2);
close(fi[1]);
waitpid(cp,&st,0);
printf("%d",st);
exit(0);
}}
管道的工作非常简单。 PIPE包含两个末端,1个用于读取,另一个用于写入。你必须在阅读或写作时关闭适当的结尾。之后你将它用作带有read()和write()函数的常规文件。
原谅我的格式化,我在手机上打字。