当前位置: 首页 > news >正文

linux有名管道

有名管道(Named Pipe,也称为 FIFO) 也是在内核中实现的。与无名管道(Anonymous Pipe)类似,有名管道是一种用于进程间通信(IPC)的机制,但有名管道具有以下特点:


1. 有名管道在内核中的实现

  • 有名管道在内核中作为一个特殊的文件类型存在。

  • 它通过文件系统的一个路径名(如 /tmp/my_fifo)来标识,因此可以被不相关的进程访问。

  • 内核负责管理有名管道的创建、打开、读写和关闭等操作。


2. 有名管道的特点

  • 有名称:有名管道在文件系统中有一个路径名,因此可以被多个不相关的进程访问。

  • 持久性:有名管道在文件系统中存在,直到被显式删除(例如使用 unlink() 系统调用)。

  • 双向通信:有名管道通常是半双工的(数据只能单向流动),但在某些系统(如 Linux)中可以通过打开两次实现双向通信。


3. 有名管道的使用

有名管道的使用通常包括以下步骤:

(1)创建有名管道

使用 mkfifo 命令或 mkfifo() 系统调用创建有名管道:

mkfifo /tmp/my_fifo
或者在 C 程序中:
#include <sys/types.h>
#include <sys/stat.h>
int mkfifo(const char *pathname, mode_t mode);
(2)打开有名管道

使用 open() 系统调用打开有名管道:

int fd = open("/tmp/my_fifo", O_RDONLY);  // 以只读方式打开
int fd = open("/tmp/my_fifo", O_WRONLY);  // 以只写方式打开
 
(3)读写有名管道

使用 read() 和 write() 系统调用进行通信:

char buf[128];
read(fd, buf, sizeof(buf));  // 从管道读取数据
write(fd, "Hello", 6);       // 向管道写入数据
(4)关闭和删除有名管道

使用 close() 关闭文件描述符,使用 unlink() 删除有名管道:

close(fd);
unlink("/tmp/my_fifo");
 

4. 有名管道与无名管道的区别

特性有名管道(FIFO)无名管道(Anonymous Pipe)
名称有文件名(在文件系统中可见)无文件名
进程关系可用于任意进程间通信通常用于父子进程或兄弟进程间通信
持久性持久存在,直到显式删除随进程结束而销毁
创建方式使用 mkfifo() 或 mkfifo 命令使用 pipe() 系统调用
通信方向通常是半双工半双工

5. 有名管道在内核中的实现细节

  • 有名管道在内核中通过 虚拟文件系统(如 pipefs 实现。

  • 内核会为每个有名管道维护一个缓冲区,用于存储进程间传递的数据。

  • 当进程尝试从空管道读取数据时,内核会阻塞该进程,直到有数据写入。

  • 当进程尝试向已满管道写入数据时,内核会阻塞该进程,直到有空间可用。


6. 总结

有名管道是内核实现的一种进程间通信机制,通过文件系统路径名标识,允许不相关的进程进行通信。它的实现依赖于内核的虚拟文件系统和缓冲区管理机制。

相关文章:

  • GPT-Sovits:语音克隆训练-遇坑解决
  • 【插件】前端生成word 文件
  • 引用是什么?在不同语言中的应用?尤其是Java中的应用?
  • Q - learning 算法是什么
  • Comsol 二维Voronoi泰森多边形结构振动传输特性
  • C语言进阶——6-C语言文件操作
  • 【算法精练】背包问题(01背包问题)
  • Git使用[同一电脑多个账户ssh-key的管理]
  • C++17 中的 std::uncaught_exceptions:异常处理的新利器
  • MVCC(多版本并发控制)机制讲解
  • 单细胞转录组画小提琴VlnPlot只显示需要类型细胞
  • llama.cpp将sensor格式的大模型转化为gguf格式
  • 「新」AI Coding(Agent) 的一点总结和看法
  • VisionTransformer(ViT)与CNN卷积神经网络的对比
  • 【Linux】多线程 -> 线程互斥与死锁
  • java.2.19
  • [STM32 - 野火] - - - 固件库学习笔记 - - - 十六.在SRAM中调试代码
  • GITHUB的若干操作
  • C# 背景 透明 抗锯齿 (效果完美)
  • 蓝桥杯备赛1-2合法日期
  • 俄方代表团抵达土耳其,俄乌直接谈判有望于当地时间上午重启
  • 中日东三省问题的源起——《1905年东三省事宜谈判笔记》解题
  • 宜昌谱写新叙事:长江大保护与高质量发展如何相互成就
  • 奥迪车加油时频繁“跳枪”维修两年未解决,4S店拒退换:可延长质保
  • 马上评|让查重回归促进学术规范的本意
  • 袁思达已任中国科学院办公厅主任