多进程并发编程----进程间传递文件描述符基础~socketpair函数简介
来源:互联网 发布:烛魔枪一段数据 编辑:程序博客网 时间:2024/04/26 14:43
socketpair函数概要如下:
#include <sys/types.h>
#include <sys/socket.h>
int socketpair(int domain, int type, int protocol, int sv[2]);
sys/types.h文件需要用来定义一些C宏常量。sys/socket.h文件必须包含进来定义socketpair函数原型。
socketpair函数需要四个参数。他们是:
套接口的域
套接口类型
使用的协议
指向存储文件描述符的指针
类型参数声明了我们希望创建哪种类型的套接口。socketpair函数的选择如下:
SOCK_STREAM
SOCK_DGRAM
对于socketpair函数,protocol参数必须提供为0。
参数sv[2]是接收代表两个套接口的整数数组。每一个文件描述符代表一个套接口,并且与另一个并没有区别。
如果函数成功,将会返回0值。否则将会返回-1表明创建失败,并且errno来表明特定的错误号。
运行结果:
#include <sys/types.h>
#include <sys/socket.h>
int socketpair(int domain, int type, int protocol, int sv[2]);
sys/types.h文件需要用来定义一些C宏常量。sys/socket.h文件必须包含进来定义socketpair函数原型。
socketpair函数需要四个参数。他们是:
套接口的域
套接口类型
使用的协议
指向存储文件描述符的指针
类型参数声明了我们希望创建哪种类型的套接口。socketpair函数的选择如下:
SOCK_STREAM
SOCK_DGRAM
对于socketpair函数,protocol参数必须提供为0。
参数sv[2]是接收代表两个套接口的整数数组。每一个文件描述符代表一个套接口,并且与另一个并没有区别。
如果函数成功,将会返回0值。否则将会返回-1表明创建失败,并且errno来表明特定的错误号。
关于流程。fork()函数创建出两个进程,fork()之后这两个进程都会执行主程序中的代码,这个一定要注意!尤其是bind的时候,如果bind两次的话,那就会出错了。一般会在子进程里调用一个带死循环的函数,这样就好了。
使用socketpair函数从子进程传递数据到父进程的例子,当然父子进程可以双向通信的。
#include<unistd.h>#include<stdio.h>#include<stdlib.h>#include<assert.h>#include<string.h>#include<sys/types.h>#include<sys/socket.h>int main(){int ret,pid,state,num;int sockfd[2];char buf[32];ret=socketpair(AF_UNIX,SOCK_STREAM,0,sockfd);assert(ret==0);pid=fork();if(pid==0){//child process send fd to parentclose(sockfd[0]);char *msg="socketpair test 1";num=write(sockfd[1],msg,strlen(msg)+1);printf("num=%d\n",num);exit(0);}//parent process recv fd from childret=waitpid(pid,&state,0);if(ret==pid){printf("child is exited\n");close(sockfd[1]);read(sockfd[0],buf,sizeof(buf));printf("buf:[%s]\n",buf);}return 0;}
运行结果:
num=18
child is exited
buf:[socketpair test 1]
1 0
- 多进程并发编程----进程间传递文件描述符基础~socketpair函数简介
- 多进程并发编程----进程间传递文件描述符基础~发送接收附属数据函数介绍
- socketpair 进程间传递描述符
- 多进程并发编程----进程间传递文件描述符基础~发送接收附属数据结构体介绍
- 多进程并发编程----进程间传递文件描述符案例
- 不相关进程间传递文件描述符
- 进程间传递文件描述符fd
- 进程间传递文件描述符
- 进程间传递文件描述符
- 进程间传递文件描述符
- 进程间传递描述符
- 进程间描述符传递
- 进程间传递描述符
- 在父子进程间用管道传递文件描述符
- python进程间传递文件描述符扩展库
- unix域套接字进程间传递文件描述符
- android进程间传递文件描述符原理
- 进程间传递文件描述符--sendmsg,recvmsg
- Altium Designer中各层的含义
- 最长回文子序列:字符串反转+动态规划,最长公共子序列LCS算法
- Java 往hashSet集合中存入自定义对象
- 图同构(graph isomorphism)和图同态(graph homomorphism)
- Windows平台下GCC编程之从键盘输入10名学生的C语言成绩存入一维数组内,编写程序计算10名学生的最高分、平均分和及格人数
- 多进程并发编程----进程间传递文件描述符基础~socketpair函数简介
- spring mvc @ModelAttribute注解使用
- UIImageVIew属性值animationImages
- 嵌入式 如何手动释放Linux内存的方法
- NestedScrollView中嵌套RecycleView
- js实现继承的5种方式
- 思考
- core模块的初始化
- android apk打包流程