您的位置:首页 > 其它

两个fork的简单问题

2010-01-14 18:54 183 查看
1、
pid_t pid;
int listenfd,connfd;

listenfd = socket(...);

bind(...);
listen(...);

while(1)
{
connfd = accept(....);
if((pid = fork()) == 0)
{
//派生出来的自进程,为什么要关闭listenfd?关闭了岂不是父进程也无法再用
close(listenfd);
doit(connfd);
close(connfd);
exit(0)

}
close(connfd);
}

2、
fork重复执行,fork上面的代码会不会重复执行?如果会,那出错怎么办?还是说fork是复制了本进程,然后继续向下执行?

q1、是因为UNIX下的文件都有一个引用计数。引用计数它是当前打开着的引用。该文件或套接口的描述字的个数。accept返回后与connfd关联的文件表项计数为1,fork返回后,两个描述字就在父子进程之间共享,因此这两个套接字相关联的引用计数值从2减为1。该套接口真正清理和释放资源要等到其引用为0时进行。(UNIX网络编程 P97)

q2、fork后是从当前位置向下执行的。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐