IPC通信_无名管道(PIPE)

Posted ho966

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了IPC通信_无名管道(PIPE)相关的知识,希望对你有一定的参考价值。

无名管道只能在具有公共祖先的两个进程间使用,且建议半双工使用(因为历史上就是半双工,虽然有些系统支持全双工管道)

无名管道通过pipe函数创建

 

#include <unistd.h>
int pipe(int fd[2]);

 

其中:参数fd返回两个文件描述符,fd[0]只用来读,是输出,fd[1]只用来写,是输入。

举例:

#include <fcntl.h>  
#include <unistd.h>
#include <stdio.h> 
#include <stdlib.h>
// linux支持双通道?
int main()
{
	int fd[2];
	int pid = 0;
	int n = 0;
	char buf[128] = {0};
	if(pipe(fd) < 0)
	{
		printf("pipe failed\n");
		return -1;
	}
	if(pid = fork() == 0)
	{// 子进程
		printf("child print\n");
		close(fd[0]);
		write(fd[1],"hello,this is child\n",40);
	}
	else
	{// 父进程
		printf("father print\n");
		close(fd[1]);
		n = read(fd[0],buf,sizeof(buf));
		if(n > 0)
		{
			printf("father print:%s\n",buf);
		}
	}
	sleep(2);
	exit(0);	
}

  

以上是关于IPC通信_无名管道(PIPE)的主要内容,如果未能解决你的问题,请参考以下文章

IPC(进程间的通讯方式)

无名管道通讯编程

Linux学习_IPC进程间通信

Android IPC

Linux进程间的通信方式

001:进程间通信类型