码迷,mamicode.com
首页 > 其他好文 > 详细

IPC通信_无名管道(PIPE)

时间:2020-02-02 23:45:57      阅读:91      评论:0      收藏:0      [点我收藏+]

标签:fcntl   历史   返回   span   font   创建   描述符   else   bsp   

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

无名管道通过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)

标签:fcntl   历史   返回   span   font   创建   描述符   else   bsp   

原文地址:https://www.cnblogs.com/ho966/p/12254071.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!