当前位置 : IT培训网 > 常见问题 > 五分钟带你认识socketpair函数

五分钟带你认识socketpair函数

时间:2019-03-13 14:20:23  来源:编程网  作者:IT培训网  已有:名学员访问该课程
socketpair函数是什么?socketpair函数有哪些用法?先来看看socketpair函数的原型如下:int socketpair(int domain,int type,int protocol,int sv[])

socketpair函数是什么?socketpair函数有哪些用法?先来看看socketpair函数的原型如下:int socketpair(int domain,int type,int protocol,int sv[])

五分钟带你认识socketpair函数_www.itpxw.cn

第一个参数表示协议族,必须为AF_LOCAL;

第二个参数表示类型,既可以是SOCK_STREAM,又可以是SOCK_DGRAM,当参数指定为SOCK_STREAM时,得到的结果称为流管道,它与一般管道的区别是留管道是全双工的,即两个描述符即可读有可写;

第三个参数只能为0;

第四个参数用于保存创建的套接字对;

socketpair函数建立一对匿名的已连接的套接字,建立的两个套接字描述符会放在sv[0]和sv[1]中。既可以从sv[0]写入sv[1]读出,又可以从sv[1]读入sv[0]写出,如果没有写入就读出则会生阻塞。

用途:用来创建全双工通道,不过只局限于父子进程之间。

下面IT培训网通过一段代码来看看这个函数的用法:

#include <stdio.h>

#include <errno.h>

#include <string.h>

#include <unistd.h>

#include <sys/types.h>

#include <sys/socket.h>

int main()

{

int sv[2]={0,0};

int sock=socketpair(AF_LOCAL,SOCK_STREAM,0,sv);

if(sock<0)

{

perror("socketpair");

exit(0);

}

pid_t id=fork();

char buf[1024];

if(id<0)

{

perror("fork");

exit(0);

}

else if(id==0)

{

close(sv[0]); //子进程关闭读端

while(1)

{

memset(buf,‘\0‘,sizeof(buf));

strcpy(buf,"i am your child");

write(sv[1],buf,strlen(buf));//子进程写入

memset(buf,‘\0‘,sizeof(buf));

ssize_t _s=read(sv[1],buf,sizeof(buf)-1);//子进程读取父进程的内容

buf[_s]=‘\0‘;

printf("father-->child:%s\n",buf);

sleep(1);

}

close(sv[1]);//子进程关闭读端

}

else

{//父进程

close(sv[1]);

while(1)

{

memset(buf,‘\0‘,sizeof(buf));

ssize_t _s=read(sv[0],buf,sizeof(buf)-1);

buf[_s]=‘\0‘;

printf("child-->father:%s\n",buf);

memset(buf,‘\0‘,sizeof(buf));

strcpy(buf,"i am your father");

write(sv[0],buf,strlen(buf));

sleep(1);

}

close(sv[0]);

}

return 0;

}

我们看看运行结果:

父子进程通过socketpair函数创建的全双工管道实现了进程间的通信,彼此都能收发信息,但要注意:父子进程在通信的时候,必须关闭一个描述符号,是因为一个在写的时候另一个只能读。

顶一下
(0)
0%
踩一下
(0)
0%

IT培训0元试听 每期开班座位有限.0元试听抢座开始! IT培训0元试听

  • 姓名 : *
  • 电话 : *
  • QQ : *
  • 留言 :
  • 验证码 : 看不清?点击更换请输入正确的验证码

在线咨询在线咨询

温馨提示 : 请保持手机畅通,咨询老师为您
提供专属一对一报名服务。

------分隔线----------------------------
------分隔线----------------------------

推荐内容

相关热点