IPC實現機制(一)---pipe(匿名管道)
一.IPC簡介:
(1)概念:
每個程式各⾃有不同的⽤戶地址空間,任何⼀個程式的全域性變數在另⼀個程式中都看不到,所以程式之間要交換資料必須通過核心,在核心中開闢⼀塊緩衝區,程式1把資料從⽤戶空間拷到核心緩 衝區,程式2再從核心緩衝區把資料讀⾛,核心提供的這種機制稱為程式間通訊
(IPC,InterProcess Communication)
(2)常用的程式間通訊方式:
- 傳統的程式間通訊方式
無名管道(pipe)、有名管道(fifo)和訊號(signal) - System v IPC物件
共享記憶體(share memory)、訊息佇列(message queue)和訊號量
C.BSD - 套接字(socket)
本篇文章只講解pipe(匿名管道)
(3)不同程式間的通訊本質:
程式之間可以看到一份公共資源;而提供這份資源的形式或者提供者不同,造成了通訊方式不同,而 pipe就是提供這份公共資源的形式的一種。
二.pipe講解
(1)管道的建立:
管道是最基本的IPC機制;管道的建立由pipe()函式實現:
(2)管道具體實現程式間通訊過程
- 父程式建立管道,得到兩個⽂件描述符指向管道的兩端
- 父程式fork出子程式,⼦程式繼承父程式的檔案描述符表,也有兩個⽂件描述符指向同⼀管道。
父程式關閉fd[0],子程式關閉fd[1],即⽗程式關閉管道讀端,⼦程式關閉管道寫端(因為管道只支援單向通訊)。⽗程式可以往管道⾥寫,⼦程式可以從管道⾥讀,管道是⽤環形佇列實現的,資料從寫端流⼊從讀端流出,這樣就實現了程式間通訊。
(3)程式碼實現pipe程式間通訊
(4)使用管道時四種特殊情況(設都是阻塞I/O操作,沒有設定O_NONBLOCK標誌):情況一:寫端描述符f[1]關閉;讀端一直讀;
- 情況二:寫端描述符f[1]不關閉,但寫端不寫;讀端一直讀;
- 情況三:讀端描述符f[0]關閉;寫端一直寫;
- 情況四:讀端描述符f[0]不關閉,但讀端不讀;寫端一直寫;
總結:
如果一個管道的寫端一直在寫,而讀端的引⽤計數是否⼤於0決定管道是否會堵塞,引用計數大於0,只寫不讀再次呼叫write會導致管道堵塞;
如果一個管道的讀端一直在讀,而寫端的引⽤計數是否⼤於0決定管道是否會堵塞,引用計數大於0,只讀不寫再次呼叫read會導致管道堵塞;
而當他們的引用計數等於0時,只寫不讀會導致寫端的程式收到一個SIGPIPE訊號,導致程式終止,只寫不讀會導致read返回0,就像讀到⽂件末尾⼀樣。
(4)管道特點
-1.管道只允許具有血緣關係的程式間通訊,如父子程式間的通訊。
-2.管道只允許單向通訊。
-3.管道內部保證同步機制,從而保證訪問資料的一致性。
-4.面向位元組流
-5.管道隨程式,程式在管道在,程式消失管道對應的埠也關閉,兩個程式都消失管道也消失。
(4)求管道的容量大小:
寫段一直寫,而讀段不讀,且讀段開啟;
相關文章
- IPC(一)---------匿名管道
- linux系統程式設計之管道(一):匿名管道(pipe)Linux程式設計
- 【IPC程式間通訊之二】管道PipeC程式
- 匿名管道通訊實現
- 管道pipe
- Linux中的pipe(管道)與named pipe(FIFO 命名管道)Linux
- Linux下IPC機制實現相關函式Linux函式
- Android程式間通訊–訊息機制及IPC機制實現薦Android
- Android的IPC機制(二)——AIDL實現原理簡析AndroidAI
- Android IPC 機制分析Android
- IPC和管道簡介(轉)
- 對於Pipe管道之愛 - jessfraz
- Android中的IPC機制Android
- Android的IPC機制BinderAndroid
- Android的IPC機制(一)——AIDL的使用AndroidAI
- 學習筆記(2)IPC機制筆記
- Redis學習之管道機制Redis
- linux程式間通訊--管道(PIPE & FIFO)Linux
- 事件匯流排有個 pipe 管道方法事件
- Swoole 原始碼分析——基礎模組之 Pipe 管道原始碼
- 02.Android之IPC機制問題Android
- Binder通訊機制與IPC通訊.md
- ASP.NET Core 中的管道機制ASP.NET
- Linux的管道機制和重定向Linux
- 實現一個“計劃任務”機制
- Android IPC機制(三):淺談Binder的使用Android
- Android的IPC機制(三)——Binder連線池Android
- Android的IPC機制(六)—— BroadcastReceiver的使用AndroidAST
- 有名管道的實現
- 匿名網路追蹤溯源機制及方法
- 深入探究Immutable.js的實現機制(一)JS
- 詳解 Android 中的 IPC 機制:基礎篇Android
- Android的IPC機制(五)—— ContentProvider的使用AndroidIDE
- Linux系統程式設計之匿名管道Linux程式設計
- 無名管道和有名管道的概念與實現
- Windows程式通訊之一看就懂的匿名管道通訊Windows
- NX實現機制淺析
- 事務機制如何實現