我正在尝试学习考试,但我无法弄清楚一个简单的 fork 程序。
我有这段代码,必须向它添加代码,以便父进程通过 PIPE 将值发送给子进程n
。孩子应该加倍价值,不打印任何东西并将其返回给父母。
然后父母应该在屏幕上打印它。
int main() {
int n=1;
if(fork() == 0) {
}
printf(“%d\n”, n);
return 1;
}
我真的不知道 PIPE 是如何工作的以及如何使用它们。谁能帮我?
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 包含两个端点,一个用于读取,另一个用于写入。您必须在阅读或写作时关闭相应的端。之后,您将其用作具有 read() 和 write() 函数的常规文件。
请原谅我的格式,我在手机上打字。