使用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;
}


截图:

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

相关文章推荐

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

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

命名管道用于进程间双向通信

  • 2017年05月10日 11:49
  • 4.68MB
  • 下载

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

Linux 提供了 popen 和 pclose 函数,用于创建和关闭管道与另外一个进程进行通信。其接口如下:[cpp] view plain copy print?FILE *popen(const...

【Unix/Linux编程实践】用管道实现双向通信—以bc计算器为例

前言几乎每个版本的Unix都包含bc计算器。事实上,大多数版本的bc只分析输入,然后在内部启动了dc计算器程序,并通过管道与其通信。dc是一个基于栈的计算器,它接收逆波兰表达式,执行运算后将结果送到标...

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

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

STM32——USB详细使用说明 附件HID的双向通信(一)

说明:使用的是STM32F103ZET6 硬件原理图 在开始枚举设备的一些初始化 void bsp_USBInit(void) {     GPIO_InitTypeDef  GPIO_...

JavaSE第一百一十讲:使用线程实现服务器端与客户端的双向通信

在上一讲中我们讲到了服务器端与客户端的双向通信的例子,显然这种双向通信不是非常好,因为服务端与客户端建立连接之后,服务端一定要等待客户端的输入然后自己再返回一个输出,这在实际的开发过程显然是没有任何意...

不使用ipc 实现 Activity与Service双向通信

//直接上代码 Service : public class UploadPictureService extends Service{ public static final St...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:使用socketpair⽤来创建双向通信的管道
举报原因:
原因补充:

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