簡述Linux進程間通訊之管道pipe(上)

  本文主要簡述管道的相關概念、原理、特質、侷限性以及分析管道的通訊步驟及原理.函數

1、概念

  管道是一種最基本的IPC機制,做用於有血緣關係的進程之間,經過使用pipe函數在內核中開闢一段緩衝區來實現兩個進程之間的通訊.繼承

2、原理

  管道實爲內核使用環形隊列機制,藉助內核緩衝區(4K)實現,是一個典型的生產者-消費者模型.生命週期

3、特質

  1.管道其本質是一個僞文件(實爲內存緩衝區),所以具備IO的特性,其生命週期隨進程.隊列

  2.管道由兩個文件描述符引用,一個表示讀端,一個表示寫端.進程

  3.管道規定數據從寫端流入,從讀端流出.ip

  4.管道的屬於字節流傳輸,須要內存

4、侷限性

  1.數據不能本身讀,本身寫.pip

  2.數據一旦被讀走,便不會在管道中存在,不可反覆讀取.原理

  3.管道採用半雙工通訊方式,所以,數據只能在一個方向上流動.引用

  4.只有在有公共祖先的進程間使用管道.

5、通訊步驟及原理

  1.父進程使用pipe函數建立一個管道.

  當父進程使用pipe函數時,至關於此時打開了兩個文件,fd[0](只讀方式)和fd[1](只寫方式),fd[0]和fd[1]都在文件的描述符表中.

  2.父進程經過fork函數建立出子進程.

  當父進程fork出子進程時,子進程會繼承父進程的文件描述符表,所以子進程也能看到

  3.父進程關閉讀端fd[0],子進程關閉寫端fd[1].

  4.以文件方式進行通訊.

  至於具體的代碼,請關注下篇文章.

相關文章
相關標籤/搜索