linux命名管道通信优缺点,Linux進程間通信——管道(pipe)與命名管道(FIFO)

1.進程間通信

問題:每個進程各自有不同的用戶地址空間,任何一個進程的全局變量在另一個近程中都看不到。

解決方案:進程之間要交換數據必須通過內核,因此在內核中開辟一塊緩沖區,進程1把數據從用戶空間拷到內核緩沖區,進程2再從內核緩沖區把數據讀走。

8daf8df6507c91b084606c3aad43ae7f.png

內核提供的這種機制稱為進程間通信(IPC ,Inter Process Communication).

本質:讓不同的進程看到一份公共的資源,這份資源由內核提供。

2.管道(pipe)管道是一種最基本的IPC機制,具有以下特征:

1. 只能進行單向通信;

2. 只適合於有血緣關系之間的進程通信;

3. 通信時,寫端寫一條,讀端讀一條,自帶同步機制;

4. 通信時是面向字節流的服務;

5. 當與之相關的進程退出時,管道也隨之關閉。這說明管道的生命周期隨進程。

2.1 管道的創建

由pipe函數創建#include

int pipe(int filedes[2]);

該函數創建的管道的兩端處於一個進程中間,在實際應用中沒有太大意義,因此,一個進程在由pipe()創建管道后,一般再fork一個子進程,然后通過管道實現父子進程間的通信(因此也不難推出,只要兩個進程中存在親緣關系,這里的親緣關系指的是具有共同的祖先,都可以采用管道方式來進行通信)。

2.2 管道間的通信

1.父進程調用pipe開辟管道,得到兩個文件描述符指向管道的兩段;

3329b0ec3edd368fe3356db13c1cf687.png

2.父進程調用fork創建子進程,那么子進程也有兩個文件描述符指向同一管道;

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值