int socketpair(int d, int type, int protocol, int sv[2]);
参数介绍:
socketpair()函数建立一对匿名的已经连接的套接字,其特性由协议族d、类型type、协议protocol决定,建立的两个套接字描述符会放在sv[0]和sv[1]中。
第1个参数d,表示协议族,只能为AF_LOCAL或者AF_UNIX;
第2个参数type,表示类型,只能为0。
第3个参数protocol,表示协议,可以是SOCK_STREAM或者SOCK_DGRAM。用SOCK_STREAM建立的套接字 对是管道流,与一般的管道相区别的是,套接字对建立的通道是双向的,即每一端都可以进行读写。 参数sv,用于保存建立的套接字对。
socketpair创建了一对无名的套接字描述符,描述符存储于一个二元数组fd[2],可以从fd[0]写入fd[1]读出,也可以从fd[1]写入fd[0]读出,如果没有写入就读出则会发生阻塞。用途:用来创建全双工通道,而避免了创建两个管道的麻烦,不过只局限于父子进程之间
例子:
#include <stdio.h>
#include <unistd.h>
#include <sys/socket.h>
main()
{
int fd[2];
char buf[20]={};
char re[20]={};
socketpair(AF_LOCAL,SOCK_DGRAM,0,fd);//创建无名套接字描述符号
printf("%d\n",getpid());
write(fd[1],"hellow",12); 写入
read(fd[0],re,20); 读出
printf("::%s\n",re);
close(fd[0]);
close(fd[1]);
}
注意:父子进程在通信时候,必须关闭一个描述符号,是因为一个再写的时候另外一个只能读
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请
点击举报。