使用socketpair⽤来创建双向通信的管道

原创 2017年06月02日 23:54:32


#include<stdio.h>
#include<sys/types.h>
#include<sys/socket.h>
#include<stdlib.h>
#include<string.h>
#include<unistd.h>

int main()
{
	pid_t pid;
	int fd[2];
	socketpair(AF_UNIX,SOCK_STREAM,0,fd);

	pid  = fork();
	if(pid < 0)
	{
		perror("fork");
		exit(1);
	}
	else if(pid == 0) //child
	{
		close(fd[0]);
		char *msg1 = "i am child";
		char buf1[512];
		while(1)
		{
			write(fd[1],msg1,strlen(msg1));
			ssize_t s = read(fd[1],buf1,sizeof(buf1) -1);
			buf1[s] = 0;  //因为这里不是从键盘中读入字符串,所以这里不需要s-1.
			printf("child say:%s\n",buf1);
		}

	}
	else //father
	{
		close(fd[1]);
		char *msg2 = "i am father";
		char buf2[512];
		while(1)
		{
			write(fd[0],msg2,strlen(msg2));
			ssize_t s = read(fd[0],buf2,sizeof(buf2) -1);
			buf2[s] = 0;  //因为这里不是从键盘中读入字符串,所以这里不需要s-1.
			printf("father say:%s\n",buf2);
		}

	}

	return 0;
}


截图:

从图中我们能看到父进程输出子进程的话,子进程输出父进程的话,可以证明这个管道是双向的

Linux上实现双向进程间通信管道(socketpair)

Linux 提供了 popen 和 pclose 函数,用于创建和关闭管道与另外一个进程进行通信。其接口如下: FILE *popen(const char *command, const ...
  • kobejayandy
  • kobejayandy
  • 2014年01月28日 22:51
  • 13680

socketpair创建双向通信的管道(全双工通信)

socketpair创建双向通信的管道(全双工通信)
  • Li_Ning_
  • Li_Ning_
  • 2016年08月06日 22:03
  • 1453

socketpair创建双向通信的管道

这次要给大家分享的是关于socketpair相关知识,我们知道pipe是用来创建管道实现通信的,而单个管道只能单向通信,一端用于读而另一端用于写,如果要实现双向通信(两端都可以读,都可以写),必须创建...
  • ValDC_Morning
  • ValDC_Morning
  • 2017年07月06日 19:35
  • 118

进程间通信:管道和socketpair的区别

最近在总结之前做过的FTP服务器小项目时,突然想到服务进程和nobody进程之间的通信方式为什么不能采用其他方式时。查了点资料,总结就是socketpair和管道形式非常的类似,唯一的不同就是sock...
  • PirLCK
  • PirLCK
  • 2016年09月13日 15:44
  • 1092

进程通信:管道(pipe)和 unix域套接字(socketpair)区别

管道pipe是半双工的,pipe两次才能实现全双工,使得代码复杂。socketpair直接就可以实现全双工 socketpair对两个文件描述符中的任何一个都可读和可写,而pipe是一个读,一个...
  • p656456564545
  • p656456564545
  • 2016年01月13日 22:27
  • 1483

Linux----进程间通信-管道与两个命名管道实现进程双向通信

在Linux系统中,有时候需要多个进程之间相互协作,共同完成某项任务,进程之间或线程之间有时候需要传递信息,有时候需要同步协调彼此工作,则就会出现进程间通信(interprocess communi...
  • qq_36782456
  • qq_36782456
  • 2017年05月29日 19:45
  • 1096

socketpair双向通信

android很多地方会涉及到进程间的通信,比如输入系统,那么进程间通信会涉及哪些内容呢? 进程:负责读取和分发事件 应用程序:负责处理输入事件 上面这两个进程会涉及哪些双向通信呢: 进程会发送输入事...
  • itdo_just
  • itdo_just
  • 2017年08月23日 12:47
  • 108

Linux网络编程 -- socketpair的使用

socketpair的使用Linux实现了一个源自BSD的socketpair调用,可以实现在同一个文件描述符中进行读写的功能。 该系统调用能创建一对已连接的UNIX族socket。 在Linux...
  • y396397735
  • y396397735
  • 2016年02月18日 10:49
  • 2755

关于管道通信和多线程应用 调试总结...

关于管道通信和多线程应用 调试总结... 最近我做了一个Named Pipe 同学示例程序,在调试的过程中 遇到若干问题,现在简单总结一下 : 首先简单介绍一下,给予MFC 单文档应用程序,两...
  • miy_autumn
  • miy_autumn
  • 2016年05月31日 11:58
  • 517

socketpair(双向通信)--高级IO

一、五种IO模型1、 阻塞I/O(eg:钓鱼者(王一)只钓鱼,不和任何人说话,也不干任何其他的事)2、非阻塞I/O (eg:钓鱼者(王二)一边钓鱼,一边问王一到底钓了多少鱼,但是王一并没有回答他,但他...
  • mm_hh
  • mm_hh
  • 2017年06月21日 17:55
  • 88
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:使用socketpair⽤来创建双向通信的管道
举报原因:
原因补充:

(最多只允许输入30个字)