命名管道基本概念:
匿名管道沒有名字,因此只有血緣關係的進程間纔可以通信,命名管道的提出就是爲了克服這個限制。命名管道是一個設備文件,因此,即使進程間無血緣關係,只要可以訪問該路徑,就能夠通過FIFO通信。FIFO總是按照先進先出的原則工作,第一個被寫入的數據將首先從管道中讀出來。
命名管道的創建與讀寫:
Linux下有兩種方式創建命名管道:一是在shell下交互建立一個命名管道,而是在程序中使用系統函數建立命名管道。shell方式下可以使用mknod和mkfifo命令。
命名管道和匿名管道的使用方法基本一樣,只是命名管道在使用前必須先調用open()將其打開。因爲命名管道是存在於硬盤上的文件,而匿名管道是在內存中的特殊文件。
mknod是比較老的函數,而使用mkfifo更加簡單和規範,所以儘量使用mkfifo創建管道。
調用open()打開命名管道的進程可能會被阻塞,但如果以同時讀寫的方式打開則一定不會被塞,
但如果以只讀或者只寫的方式打開可能會被阻塞。
write端程序:
read端程序:
運行結果: