当前位置: 技术问答>linux和unix
请教socketpair函数的问题
来源: 互联网 发布时间:2016-07-09
本文导语: 请问下: 用socketpair生成两个sock[0]和sock[1]用于父进程和子进程的通信,当父进程使用其中一个socket时,为什么要调用close,关闭子进程的sock[1],代码如下: int r = socketpair( AF_UNIX, SOCK_STREAM, 0, fd...
请问下:
用socketpair生成两个sock[0]和sock[1]用于父进程和子进程的通信,当父进程使用其中一个socket时,为什么要调用close,关闭子进程的sock[1],代码如下:
int r = socketpair( AF_UNIX, SOCK_STREAM, 0, fd );
if ( fork() ) {
/* Parent process: echo client */
int val = 0;
close( fd[1] );
while ( 1 ) {
sleep( 1 );
++val;
printf( "Sending data: %dn", val );
write( fd[0], &val, sizeof(val) );
read( fd[0], &val, sizeof(val) );
printf( "Data received: %dn", val );
}
}
else {
/* Child process: echo server */
int val;
close( fd[0] );
while ( 1 ) {
read( fd[1], &val, sizeof(val) );
++val;
write( fd[1], &val, sizeof(val) );
}
}
}
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/sunnyboychina/archive/2007/11/14/1884076.aspx
用socketpair生成两个sock[0]和sock[1]用于父进程和子进程的通信,当父进程使用其中一个socket时,为什么要调用close,关闭子进程的sock[1],代码如下:
int r = socketpair( AF_UNIX, SOCK_STREAM, 0, fd );
if ( fork() ) {
/* Parent process: echo client */
int val = 0;
close( fd[1] );
while ( 1 ) {
sleep( 1 );
++val;
printf( "Sending data: %dn", val );
write( fd[0], &val, sizeof(val) );
read( fd[0], &val, sizeof(val) );
printf( "Data received: %dn", val );
}
}
else {
/* Child process: echo server */
int val;
close( fd[0] );
while ( 1 ) {
read( fd[1], &val, sizeof(val) );
++val;
write( fd[1], &val, sizeof(val) );
}
}
}
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/sunnyboychina/archive/2007/11/14/1884076.aspx
|
调用socketpair创建的两个socket都是打开的,fork后子进程会继承这两个打开的socket。为了实现父子进程通过socket pair(类似于管道)通信,必须保证父子进程分别open某一个socket。
|
可以这么理解:父子进程一个负责向socket写数据,一个从中读取数据,当写的时候当然不能读了,同理,当读的时候就不能写了。和操作系统中的临界资源差不多。