两个fork的简单问题

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后是从当前位置向下执行的。


 

posted @ 2010-01-14 18:54  飘啊飘  阅读(366)  评论(0编辑  收藏  举报