linux命令关闭套接字fd,Unix域套接字问题

下面的代码是我从Linux网络编程的Unix域套接字一章中看到的

注释是我对代码的理解,问号的部分是我不懂的地方,请大家执教

int unix_fd[2];

pid_t chld_pid;

socketpair(AF_UNIX,SOCK_STREAM,0,unix_fd);  //创建一个unix域套接字对

chld_pid=fork();

switch(chld_pid)

{

case -1:

perror("fork child error");

exit(1);

case 0:                      //子进程的操作

close(0);                 //关闭标准输入

close(1);                 //关闭标准输出

dup(unix_fd[1]);          //???有什么作用呢(我知道这是文件描述符的复制,问题是用在这里做什么?)

dup(unix_fd[1]);          //???有什么作用呢

close(unix_fd[0]);        //关闭从父进程中继承的unix套接对的一端fd[0]

close(unix_fd[0]);        //???怎么又关闭一次呢

echo_service();           //做一些服务

exit(0);

default:                     //父进程的操作

close(unix_fd[1]);        //父进程的unix套接对的一端fd[1]

break;

}

|

int   unix_fd[2];

pid_t   chld_pid;

socketpair(AF_UNIX,SOCK_STREAM,0,unix_fd);//创建一个unix域套接字对

chld_pid=fork();

switch(chld_pid)

{

case   -1:

perror("fork   child   error");

exit(1);

case   0:                             //子进程的操作

close(0);                       //关闭标准输入

close(1);                       //关闭标准输出

dup(unix_fd[1]);                //???有什么作用呢(我知道这是文件描述符的复制,问题是用在这里做什么?)

dup(unix_fd[1]);                // --- dup 会复制到最小的描述符号,也就是前面的已经关闭的0,1

//     这时标准输入/输出对应的都是套接字了。

close(unix_fd[0]);              //关闭从父进程中继承的unix套接对的一端fd[0]

close(unix_fd[0]);              //???怎么又关闭一次呢  --- 好像应该是close(unix_fd[1]),已经dup了,

echo_service();                 //做一些服务

exit(0);

default:                              //父进程的操作

close(unix_fd[1]);              //父进程的unix套接对的一端fd[1]

break;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值