Linux 之 pipe管道
前言
Linux下有很多IPC机制,pipe管道就是其中的一种。
正文
管道的概念
pipe被称为无名管道,用于亲缘进程间的通信。pipe管道实质为一个内核维护的环形队列,缓冲区大小为4K。工作方式为半双工通信。调用 pipe函数可以创建一个管道。
函数原型:
#include <unistd.h>
int pipe(int fd[2]);
管道有读写两端,fd[0]为读端,fd[1] 为写端。对于一个进程来说,要么对管道进行读操作,要么对其进行写操作,不可以自己写,自己读,所以当一个进程对管道进行写操作之前先关闭其读端,反之亦然。
父写子读
#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
#include<string.h>
int main()
{
int fd[2];
if(pipe(fd) == -1)
{
perror("管道打开失败:");
exit(-1);
}
pid_t id = fork();
if(id == -1)
{
perror("进程创建失败:");
exit(-1);
}
else if(id == 0) //子进程
{
close(fd[1]);
char buf[100];
memset(buf,0,sizeof(buf));
int re = read(fd[0],buf,sizeof(buf));
if(re == 0