管道分为无名管道(只能在具有公共祖先的两个进程中使用----父子进程)和有名管道(可用于不同进程)
管道特点:
- 半双工,数据在同一时刻只能在同一方向流动
- 数据只能从一端写入一端读出(先入先出)
- 管道不是普通的文件,不属于某个文件系统,其只存在于内存中。
无名管道
通过pipe函数创建无名管道
参数:
pipefd : 为 int 型数组的首地址,其存放了管道的文件描述符 pipefd[0]、pipefd[1]。
当创建一个管道它会创建两个文件描述符fd[0]和fd[1]
- fd[0]用于读管道
- fd[1]用于写管道
一般的IO函数都可以用来操作管道(lseek()除外----因为管道先进先出特点 )
成功 返回0
失败 返回-1
单个进程管道
#include<stdio.h>
#include<unistd.h>
int main()
{
int fd[2];
int ret=-1;
char buf[1