【linux系统编程学习笔记】第三节:进程通信方式之匿名管道与有名管道(pipe、mkfifo、access)

Linux进程通信:匿名管道与有名管道详解
本文介绍了Linux系统编程中的进程通信方式,重点讲解了无名管道(匿名管道)和有名管道(FIFO)的概念、API及应用场景。无名管道适用于亲缘进程的一对一通信,有名管道则允许任意进程间进行通信。文中详细解析了`pipe()`、`mkfifo()`和`access()`等关键函数的使用,并讨论了它们的特性,如半双工、全双工、原子性等。

其实开心好简单 最紧要好玩

进程通信方式之管道

进程通信方式之管道

进程间通信方式

管道——无名管道/匿名管道

无名管道相关API

int pipe(int pipefd[2]);//创建无名管道pipe 

管道——有名管道

有名管道API

int mkfifo(const char *pathname, mode_t mode);//创建有名管道文件

 int access(const char *pathname, int mode);//检查指定文件权限或是否存在



进程间通信方式

  1. 管道
    • 无名管道 pipe:适用于亲缘关系进程间的、一对一的通信
    • 有名管道 fifo :适用于任何进程间的一对一、多对一的通信
    • 套接字 socket:适用于跨网络的进程间通信
  2. 信号:异步通信方式
  3. system-V IPC对象
    1. 共享内存:效率最高的通信方式
    2. 消息队列:相当于带标签的增强版管道
    3. 信号量
      1. 信号量组:参数复杂,功能强大到臃肿
      2. POSIX有名信号量:适用于多进程,参数简单,接口明晰,老少咸宜
      3. POSIX无名信号量:适用于多线程,参数简单,接口明晰,童叟无欺

 

管道——无名管道/匿名管道

无名管道属性:

  1. 它只能作用于亲缘进程(匿名管道的创建他使用pipe创建,诞生出两个操作管道读写端的文件描述符,只有创建子进程的时候才会被继承过去,无法通过别的方式打开同一个管道)
  2. 半双工通信(在读的时候不能写入,在写入的时候不能读取)
  3. 操作无原子性
  4. 无法用lseek定位操作位置

无名管道相关API

int pipe(int pipefd[2]);//创建无名管道pipe 

#include <unistd.h>  

int pipe(int pipefd[2]);

函数功能:

  • 随机创建一个匿名管道,并且返回管道的两个通信文件描述符给传入的数组

函数参数:

  • Pipefd:这是一个两个int型元素的数组,管道创建成功后会将读端文件描述符放到第0个元素中,将写端文件描述符放到第1个元素中

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值