IPC 额外知识

本文深入探讨Linux IPC(进程间通信)的概念,包括进程相关的IPC、内核相关的IPC、文件系统相关的IPC的区别,以及管道(匿名管道与有名管道)的使用与特性,详细解析了它们的工作原理及应用场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、IPC的持久性

1)进程相关的:IPC中数据一直存在到最后一个关联进程关闭时

pipe、fifo

2)内核相关的IPCIPC中数据一直存在,除非内核重启或删除

消息队列,共享内存等

3)文件系统相关的IPCIPC中数据一直存在,除非显式删除

文件

2、管道

匿名管道(pipe):只能用于同一个祖先的进程组

有名管道(fifo):不相关的进程也可以使用

3、匿名管道

int pipe(int filedes[2]);

fildes[0]    用于从管道中读取数据

fildes[1]    用于将数据写入管道

不需要open,直接read/write 等系统调用

系统自动删除,进程不需要考虑

示例

View Code

4、有名管道

int mkfifo(const char *pathname, mode_t mode);

pathname等参数和open类似

需要openopen必须只能是只读或只写。

open阻塞模式:阻塞到有进程以相对应方式打开相同的fifo

open非阻塞式:只读打开立刻返回;只写时,如果没有对应的进程已经只读打开相同的fifo,返回错误。

open之后才能read/write,操作与文件类似。

FIFO必须显式删除(调用unlink),但fifo中保存的数据是进程相关的

示例

View Code

5、写管道时,常数PIPE_BUF(一般为4096)规定了内核中管道缓存器的大小,如果写小于或等于PIPE_BUF大小的数据进入不会被打断,但大于PIPE_BUF的数据可能会被其他进程打断

关闭所有的写端,read返回0

关闭所有的读端,write会产生SIGPIPE信号

不能lseek,否则返回ESPIPE错误

参考

1】 http://linchunai1212.blog.163.com/blog/static/35112143201111361543958/

2】 http://www.linuxidc.com/Linux/2010-09/28317.htm

3】 http://www.dzsc.com/data/html/2009-9-10/78618.html

4】 http://blog.youkuaiyun.com/MONKEY_D_MENG/article/details/5570468

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值