C++管道pipe()的使用

头文件

#include <unistd.h>

函数声明

int pipe(int filedes[2]);

返回值

成功打开管道,返回0,失败返回-1并设置errno

参数

2个元素的int类型的数组,filedes[0]读端、filedes[1]写端。

注:只能在血缘关系之间通信

#include <unistd.h>
#include <stdio.h>
#include <errno.h>
#include <string.h>
#include <stdlib.h>
int main(int argc,char* argv[])
{
	pid_t pid;
	
	int fd[2];//定义管道的读、写端文件描述符
	int ret;
	
	char* str = "hello pipe\n";//指定写数据
	char buf[1024];//定义接收缓冲区
	
	ret = pipe(fd);//调用pipe()函数就已将管道打开
	
	if(ret == -1)
	{
		perror("pipe error");
		exit(1);
	}
	
	pid = fork();
	
	if(pid > 0)//父进程
	{
		close(fd[0]);
		write(fd[1],str,strlen(str));//写到管道中
		close(fd[1]);
	}
	else if(pid == 0)//子进程
	{
		close(fd[1]);
		ret = read(fd[0],buf,sizeof(buf));//从管道中的读,返回读到的字节数
		write(STDOUT_FILENO,buf,ret);//写到标准输出
		close(fd[0]);
	}
	
	return 0;
}

版权声明:本文为kjie96原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。