命名管道

命名管道基本概念:

    匿名管道沒有名字,因此只有血緣關係的進程間纔可以通信,命名管道的提出就是爲了克服這個限制。命名管道是一個設備文件,因此,即使進程間無血緣關係,只要可以訪問該路徑,就能夠通過FIFO通信。FIFO總是按照先進先出的原則工作,第一個被寫入的數據將首先從管道中讀出來。

命名管道的創建與讀寫:

    Linux下有兩種方式創建命名管道:一是在shell下交互建立一個命名管道,而是在程序中使用系統函數建立命名管道。shell方式下可以使用mknod和mkfifo命令。

    命名管道和匿名管道的使用方法基本一樣,只是命名管道在使用前必須先調用open()將其打開。因爲命名管道是存在於硬盤上的文件,而匿名管道是在內存中的特殊文件。

    mknod是比較老的函數,而使用mkfifo更加簡單和規範,所以儘量使用mkfifo創建管道。

    調用open()打開命名管道的進程可能會被阻塞,但如果以同時讀寫的方式打開則一定不會被塞,

但如果以只讀或者只寫的方式打開可能會被阻塞。

write端程序:

wKioL1eG7uDy5W6CAADMTw27n8A244.png-wh_50

wKiom1eG7uCib_xTAAC9cqJ7ip8857.png-wh_50

read端程序:

wKioL1eG8OiBVVGcAADJkx38uUY521.png-wh_50

wKioL1eG8RGSrzAeAACo0uM9MSQ153.png-wh_50

運行結果:

wKioL1eG8iuSWHTBAAHF19wxydk488.png-wh_50




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章