目录

文章目录

  • 目录
  • Linux 的管道指令
  • C 语言的匿名管道
  • 命名管道
  • 匿名管道和命名管道的区别
  • 参考文档

Linux 的管道指令

如果你熟悉 Linux,那么你对管道应该不会感到陌生,我们经常会使用 “|” 来使用管道。但是管道的真正定义是什么呢?

  • 管道是一个进程连接数据流到另一个进程的通道,它通常用作把一个进程的输出通过管道连接到另一个进程的输入

例如:ls -l | grep string

C 语言的匿名管道

C 语言的匿名管道 pipe() 定义在头文件 unistd.h 中。

int pipe(filedes[2]);
  • filedes[2]:用于接收 pipe 返回的两个文件描述符:filedes[0] 为读管道、filedes[1] 诶写管道。
  • 返回值:成功返回 0,失败返回 -1,并设置了 errno。

匿名管道实质上是一个先进先出(FIFO)的队列:filedes[0] 是队头(front),filedes[1] 则作为队尾(rear)。pipe() 创建的管道,本质是一个内核缓冲区,该缓冲区的大小一般为一页,即 4K 字节。

命名管道

通过匿名管道来在进程之间传递数据存在一个缺陷,就是这些进程都由一个共同的父进程启动,这不便于我们在不相关的两个进程之前交换数据,所以 C 语言进入了 “命名管道”,用于解决不相关进程间的通信问题;

命名管道也被称为 “FIFO 文件”,它是一种特殊类型的文件,在文件系统中以文件名的形式存在,它的行为与匿名管道类似。因为在 Linux 中一切皆文件,所以命名管道的使用与文件的操作方式基本一致,可以在命令行中使用。

可以使用以下两个函数之一来创建一个命名管道:

  1. 头文件 sys/types.h、sys/stat.h 中定义的:
int mkfifo(const char *filename, mode_t mode);
int mknod(const char *filename, mode_t mode | S_IFIFO, (dev_t)0);

这两个函数都能创建一个 FIFO 文件,注意,是真的创建了一个真实存在于文件系统中的文件,filename 指定了文件名,而 mode 则指定了文件的读写权限。

  1. 可以直接在 Shell 中使用命令 mkfifo、mknod 来创建一个 FIFO 文件:
$ mkfifo fifo_file
$ mknod fifo_file p

匿名管道和命名管道的区别

使用匿名管道,通信的进程之间需要一个父子关系,通信的两个进程一定是由一个共同的祖先进程启动,匿名管道没数据交叉的问题;

使用命名管道的两个进程可不存在 “血缘” 关系,但为了保证数据的安全,我们很多时候要采用阻塞的 FIFO,让写操作变成原子操作;

参考文档

https://www.zfl9.com/c-ipc-pipe.html

C 语言编程 — 管道(Pipe)相关推荐

  1. Linux系统编程:pipe匿名管道的使用,实现linux命令下管道命令

    pipe函数介绍 函数原型int pipe(int pipefd[2]) 来创建匿名管道; 传出2个fd 文件描述符,pipefd[0]表示匿名管道的读端,pipefd[1]表示匿名管道的写端.有这个 ...

  2. Linux系统编程-管道入门

    晚上好,继续记录我的学习心得. 当你厌倦了自己的目标时,怎样继续保持专注? 误区: 成功人士说的都是自己如何"满怀热情"去努力实现他们的目标.不管是在商业.体育还是艺术界,我们听到 ...

  3. linux c语言编程(转)

    linux操作系统下 c语言编程入门 整理编写:007xiong 原文:Hoyt等 (一)目录介绍 1)Linux程序设计入门--基础知识 2)Linux程序设计入门--进程介绍 3)Linux程序设 ...

  4. linux操作系统下 c语言编程入门

    linux操作系统下 c语言编程入门 (一)目录介绍 1)Linux程序设计入门--基础知识 2)Linux程序设计入门--进程介绍 3)Linux程序设计入门--文件操作 4)Linux程序设计入门 ...

  5. [转] linux操作系统下c语言编程入门

    (一)目录介绍 1)Linux程序设计入门--基础知识  2)Linux程序设计入门--进程介绍  3)Linux程序设计入门--文件操作  4)Linux程序设计入门--时间概念  5)Linux程 ...

  6. linux操作系统下c语言编程入门

    linux操作系统下c语言编程入门  整理编写:007xiong  原文:Hoyt等 (一)目录介绍 1)Linux程序设计入门--基础知识  2)Linux程序设计入门--进程介绍  3)Linux ...

  7. 【转贴】linux操作系统下c语言编程入门

    [转贴]linux操作系统下c语言编程入门 发信人: Lerry (驴是的念来过倒·杏红等头墙上爬), 信区: Linux 标 题: linux操作系统下c语言编程入门 发信站: 哈工大紫丁香 (Fr ...

  8. Linux下C语言编程

    第1章 Linux下C语言编程简介 本章将简要介绍一下什么是Linux,C语言的特点,程序开发的预备知识,Linux下C语言开发的环境,程序设计的特点和原则以及编码风格等.通过本章的学习,可以对在Li ...

  9. 初识Linux下C语言编程

    本章将简要介绍一下什么是Linux,C语言的特点,程序开发的预备知识,Linux下C语言开发的环境,程序设计的特点和原则以及编码风格等.通过本章的学习,可以对在Linux下使用C语言编程有一个基本的了 ...

最新文章

  1. 差点败北!B站疯传3W次,堪称最强Java面试题,顺利拿下阿里P7的35K*16 薪 Offer...
  2. DriverManager 驱动管理器类简介 JDBC简介(三)
  3. 基础练习 字符串对比
  4. 科大星云诗社动态20210529
  5. 大规模推荐Deep Retrieval
  6. Cpp 对象模型探索 / 深浅拷贝
  7. VTK:可视化之BlobbyLogo
  8. 使用ADO.NET访问数据库
  9. python提取列表中文本_python提取图像的名字*.jpg到txt文本的方法
  10. Linux下的网络协议分析工具-tcpdump快速入门手册
  11. CentOS _ RHEL 防止Kernel升级
  12. Qt 方式问题_vortex_新浪博客
  13. 分享一款Web压力测试工具Pylot
  14. java 做窗体_java怎么做窗体
  15. 计算机应用基础周记,2800字计算机应用基础实习报告范文.doc
  16. 我为什么要弃医从(码)农
  17. 微信渠道带参数二维码应用场景怎么添加?
  18. Word基础(三十二)脚注与尾注
  19. MyBatis中insert用法
  20. 解读 Oracle 12c 自适应执行计划一例

热门文章

  1. 字母出现位置c语言,【c语言】实现strrchr(查找该字符串最后一次出现的位置)
  2. 淘汰原因_大部分人被淘汰的原因都是因为安于现状
  3. Mac 设置文件默认打开方式
  4. python问题:IndentationError:expected an indented block错误解决
  5. 清华、北邮等高校研究人员实现具有 160 个目标的基于 SSVEP 的免校准 BCI 系统...
  6. 实时全局光照!SVOGI in CryENGINE
  7. 2021人工智能年度评选结果揭晓!AI落地最佳参考在此奉上
  8. 浙江大学首次跻身全球50强,上海交大论文发表量全球第四 | QS最新世界大学排名...
  9. AlphaGo之父对话《连线》,曾被导师劝阻研究强化学习,如今获得ACM计算奖
  10. 所有的编程语言知识,都包含在这100张思维导图里了丨GitHub 13.1k星