关于fork()

bazookier 2008-04-13 06:56:57
关于管道的例程:

#include <stdio.h>

int main()
{
int childB,childC;
int pipefds[2];
char * args1[]={"/bin/wc",NULL};
char * args2[]={"/usr/bin/ls","-1",NULL};

pipe(pipefds);

if(!(childB=fork()))
{
close(pipefds[1]);
close(0);
dup2(pipefds[0],0);
close(pipefds[0]);

execve("/usb/bin/wc",args1,NULL);

//<--------这里是否要return?
}

close(pipefds[0]);

if(!(childC=fork()))
{

close(1);
dup2(pipefds[1],1);
close(pipefds[1]);

execve("/bin/ls",args2,NULL);

//<--------这里是否要return?
}

close(pipefds[1]);
wait4(childB,NULL,0,NULL);

return 0;
}

以上代码为一个进程创建一个管道供两个新进程使用。但是其出处原来是没有retur语句的。这样的话会不会造成processB又创建了属于processB的子进程processC呢?究竟要不要在这里使用return呢?
...全文
74 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
bazookier 2008-04-16
  • 打赏
  • 举报
回复
基本概念没搞清楚,现丑了。
bluefox214 2008-04-15
  • 打赏
  • 举报
回复
就当execve是goto好了..
linuxguy 2008-04-14
  • 打赏
  • 举报
回复
没有必要, 一般execve失败了,才会执行后面的代码!一般后面代码是检查execve是否成功!
blackbillow 2008-04-13
  • 打赏
  • 举报
回复
不用,execve后会用一个新的进程取代当前进程,后面的语句都不会再执行。

4,441

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 内核源代码研究区
社区管理员
  • 内核源代码研究区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧