sinat_29621543
自自然卷
采纳率35.7%
2016-01-18 01:44 阅读 1.6k

网络编程fork()相关问题

    下面这段程序为什么fork两个进程分别执行close(ss)和close(sc)
    pid = fork();                       /*分叉进程*/
    if( pid == 0 ){                     /*子进程中*/
        process_conn_server(sc);        /*处理连接*/
        close(ss);                      /*在子进程中关闭服务器的侦听*/
    }else{
        close(sc);                      /*在父进程中关闭客户端的连接*/
    }
  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享

4条回答 默认 最新

  • 91program 91program 2016-01-18 03:53

    这个你需要了解 fork 的功能:
    fork调用的一个奇妙之处就是它仅仅被调用一次,却能够返回两次,它可能有三种不同的返回值:
    1)在父进程中,fork返回新创建子进程的进程ID;
    2)在子进程中,fork返回0;
    3)如果出现错误,fork返回一个负值;

    返回零,说明是在子进程中,所以在子进程中关闭服务器的侦听;

    点赞 评论 复制链接分享
  • ouchao0727 xiao哦草 2016-01-18 03:56

    fork函数实际上使用一次返回两次的,分别是父进程和子进程各返回一次,子进程返回0,父进程返回子进程的pid,如果返回小于0就出错,两个进程独立运行

    点赞 评论 复制链接分享
  • yamizZ Yummy? 2016-01-18 07:37

    楼上说的是对的,当你用fork()函数后,实际有两个进程在运行,一个子进程,一个父进程。fork()这个函数返回两个pid,pid=0为子进程,pid>0为父进程。这是由函数本身的功能决定的。

    点赞 评论 复制链接分享
  • oyljerry oyljerry 2016-01-20 00:06

    主要是fork后 客户端过来定位socket请求被子进程建立一个新连接 然后进行处理 这样父进程就可以关闭当前客户端连接 而子进程继续处理 然后再关闭新的连接

    点赞 评论 复制链接分享

相关推荐