如何解决管道的解释
我有两个与管道相关的代码,我想分享我对代码的理解。我从这个管子开始,所以我想把它弄好。 第一个代码是:
main (){
int fd[2];
char c;
fork();
pipe(fd);
read(fd[0],&c,1);
wait(NULL);
}
我认为在这种情况下,主进程创建了一个子进程,然后创建了一个管道。父母等待着孩子的死亡。孩子试图从管道中读取一个字符,但由于管道是空的,孩子被卡住了。因此,两个进程都被阻塞。 对吗?
第二个代码是:
main (){
int n = getpid() ;
char s[80] ;
fork() ; /∗ 1 ∗/
if (getpid() == n) fork() ; /∗ 2 ∗/
fork(); /* 3 */
if (getppid() != n) fork() ; /∗ 4 ∗/
if (getppid() == n) {
sprintf( s,"%d\n",getpid() ) ;
write( 1,s,strlen(s) ) ;
}
}
在这一秒中,我认为主进程创建了两个子进程和另外两个可能的子进程。首先创建一个子进程,然后查看进程标识号是否对应于 n,在这种情况下创建另一个子进程。然后创建另一个新子进程,最后检查父进程 ID 号是否与进程 ID 号匹配。如果为假,则创建最后一个子进程,如果为真,则将进程标识号打印在屏幕上,最后父进程写入 s 参数。
我的解释好吗?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。