理解C程序

理解C程序,c,C,嗨,我有以下程序,我了解管道的工作原理和分叉等。。但我有一个问题。为什么此程序不打印baz\n 结果是: 酒吧 福 Execl不会返回到原始程序。它将当前进程替换为旧进程无法继续运行的新进程。执行execl/bin/echo、/bin/echo、bar、buf、0;永远不要回来执行printf。这就是为什么你只能得到巴富的结果 如果您查看手册页: 请看描述下的第一段。您的程序没有编写baz,因为它首先运行execl函数,该函数关闭了fork的创建过程。换句话说,您必须将printf放在exec函

嗨,我有以下程序,我了解管道的工作原理和分叉等。。但我有一个问题。为什么此程序不打印baz\n 结果是: 酒吧 福


Execl不会返回到原始程序。它将当前进程替换为旧进程无法继续运行的新进程。执行execl/bin/echo、/bin/echo、bar、buf、0;永远不要回来执行printf。这就是为什么你只能得到巴富的结果

如果您查看手册页:


请看描述下的第一段。

您的程序没有编写baz,因为它首先运行execl函数,该函数关闭了fork的创建过程。换句话说,您必须将printf放在exec函数之前:

else{
    read(fd[0],buf,31);
    printf("baz\n");
    execl("/bin/echo","/bin/echo","bar",buf,0);
}

祝你好运

好的,我明白了,谢谢你,就像@Gangai说的,你可以把两者互换。谢谢你,其实我不想写baz,我只是想知道为什么,现在我想写了。谢谢你的支持answers@spleeftroner如果Gangai Johann的答案解决了你的问题,你应该把它标记为正确。我这么做只是因为我不到9分钟,所以我不能选择它作为正确答案;man execl会帮你理解的。
else{
    read(fd[0],buf,31);
    printf("baz\n");
    execl("/bin/echo","/bin/echo","bar",buf,0);
}