进程通信:管道

132 阅读1分钟

进程通信方式-IPC

image.png

管道概述

  • 分类:

    • 匿名管道
      • 有文件实体
      • 匿名管道只能在具有公共祖先的进程(父进程与子进程,或者两个兄弟进程,具有亲缘关系)之间使用。
    • 有名管道:
      • 有文件实体, 但不存储数据
      • 可以在有关系,或无关的进程之间使用
  • 本质:内核内存中维护的缓冲器

  • 通信方式:半双工通信

  • 数据结构:循环队列

系统调用

  • 创建匿名管道:int pipe(int pipefd[2])
  • 查看管道缓冲大小函数:long fpathconf(int fd, int name)
  • 创建有名管道:int mkfifo(const char *pathname, mode_t mode)



int pipe(int pipefd[2])

功能

创建一个匿名管道,用来进程间通信。

头文件

#include <unistd.h>

参数

  • int pipefd[2] :这个数组是一个传出参数。

    • pipefd[0] 对应的是管道的读端

    • pipefd[1] 对应的是管道的写端

返回值

  • 成功 0
  • 失败 -1



int mkfifo(const char *pathname, mode_t mode)

功能

创建有名管道:fifo文件

头文件

#include <sys/types.h>
#include <sys/stat.h>

参数

  • pathname: 管道名称的路径
  • mode: 文件的权限 和 open 的 mode 是一样的,是一个八进制的数

返回值

  • 成功返回0
  • 失败返回-1,并设置错误号