高级I/O-----socketpair
2016-05-29 18:36
465 查看
socketpair
socketpair:相比较之前提到的管道,socketpair是一个全双工的通信方式,它的一端即可以读也可以写,对于它我是这样理解的:
假设现在我们是在本地使用socketpair的,客户端为fd[0],服务器端为fd[1],当服务器向客户端写数据时,从fd[1]的写端写入数据,而从fd[1]的读端读取数据,反之从客户端上的操作也是如此。
下面是实现的一个socketpair版本地进程间通信
domian为操作的方式,因为我们是本地所以用AF_LOCAL。
type为传输方式,我们采用tcp的流式服务,SOCK_STREAM。
protocol为控制,我们选择默认填0,
sv为要创建多少个文件描述符,注意(这个文件描述符是网络文件描述符,可以说他是虚拟的)。
socketpair实现了全双工的通信方式。
本文出自 “痕迹” 博客,请务必保留此出处http://wpfbcr.blog.51cto.com/10696766/1784271
socketpair:相比较之前提到的管道,socketpair是一个全双工的通信方式,它的一端即可以读也可以写,对于它我是这样理解的:
假设现在我们是在本地使用socketpair的,客户端为fd[0],服务器端为fd[1],当服务器向客户端写数据时,从fd[1]的写端写入数据,而从fd[1]的读端读取数据,反之从客户端上的操作也是如此。
下面是实现的一个socketpair版本地进程间通信
#include <sys/types.h> /* See NOTES */ #include <sys/socket.h> int socketpair(int domain, int type, int protocol, int sv[2]);
domian为操作的方式,因为我们是本地所以用AF_LOCAL。
type为传输方式,我们采用tcp的流式服务,SOCK_STREAM。
protocol为控制,我们选择默认填0,
sv为要创建多少个文件描述符,注意(这个文件描述符是网络文件描述符,可以说他是虚拟的)。
1 #include<stdio.h> 2 #include<sys/types.h> 3 #include<sys/socket.h> 4 #include<unistd.h> 5 #include<string.h> 6 int main() 7 { 8 int fd[2]; 9 if(socketpair(AF_LOCAL,SOCK_STREAM,0,fd)<0) 10 { 11 perror("socketpair"); 12 } 13 char buf[1024]; 14 pid_t id=fork(); 15 if(id<0){ 16 perror("fork"); 17 }else if(id==0){ 18 close(fd[0]); 19 while(1) 20 { 21 sleep(1); 22 memset(buf,'\0',sizeof(buf)-1); 23 strcpy(buf,"child hello world"); 24 write(fd[1],buf,strlen(buf)+1); 25 ssize_t size=read(fd[1],buf,sizeof(buf)-1); 26 if(size>0) 27 { 28 buf[size]='\0'; 29 printf("parents say::%s\n",buf); 30 } 31 } 32 close(fd[1]); 33 } 34 else{ 35 close(fd[1]); 36 while(1) 37 { 38 sleep(2); 39 ssize_t size=read(fd[0],buf,sizeof(buf)-1); 40 if(size>0) 41 { 42 buf[size]='\0'; 43 printf("child say::%s\n",buf); 44 } 45 memset(buf,'\0',sizeof(buf)); 46 strcpy(buf,"parent hello world"); 47 write(fd[0],buf,strlen(buf)+1); 48 } 49 close(fd[0]); 50 51 } 52 53 return 0; 54 }
socketpair实现了全双工的通信方式。
本文出自 “痕迹” 博客,请务必保留此出处http://wpfbcr.blog.51cto.com/10696766/1784271
相关文章推荐
- 高级I/O----sockerpair
- poj-3735-Training little cats-矩阵快速幂
- Syntax error,parameterized types are only available if source level is 5.0
- FZU-2216 The Longest Straight (二分枚举)
- view plain
- 解决TIME_WAIT状态常见的解决办法
- Codeforces Round #320 (Div. 2) [Bayan Thanks-Round]A Raising Bacteria
- HDU 5293 Tree chain problem 树形dp+dfs序+树状数组+LCA
- Convolutional Neural Networks at Constrained Time Cost
- haartraining实践总结
- 重建freescale 4.6.2 multilib toolchain
- LightOJ 1236 Pairs Forming LCM(lcm(i, j) = n的对数)
- HDU1848 Fibonacci again and again(SG函数)
- LightOJ 1282 Leading and Trailing(n^k的高三位和低三位)
- 【一天一道LeetCode】#70. Climbing Stairs
- 【一天一道LeetCode】#70. Climbing Stairs
- [svc]磁盘接口与RAID
- Textbooks, Testing, Training: How We Discourage Thinking 笔记
- RAID各级别的特性及软实现
- Install OpenCV-3.1.0 fails on Ubuntu 16.04 (‘memcpy’ was not declared in this scope)