進程間通信--FIFO

在linux進程間通信中,管道(pipe)是非常有用的,而且我們使用的地方也非常多,但是不可否認的是管道有一個致命的缺點就是隻能用於有相關關係的進程之間的通信,比如:父子進程。爲了很好的解決這個問題。因此我們引入了——FIFO(first in first out)顧名思義:先入先出。相對於pipe來說,FIFO一般被稱爲命名管道,因爲他們和文件系統相關聯,可以實現任意兩個進程之間的通信。
相對於pipe單工通信的特點來說,FIFO可以實現全雙工的通信,這樣的優點就是多個進程都可以實現對同一個FIFO的讀和寫,當然了這些進程之間都要相互協作,就像1一個團隊,不合作怎麼能夠做出好的東西呢?同時也要注意1,寫入的數據不能大於PIPE_BUF字節,不然會有衝突的。
在我們這個系統裏,使用了mkfifo命令來創建FIFO。我們看看FIFO函數的調用。

int mkfifo(const char* path, mode_t mode);

參數path指定了創建FIFO的路徑名,path一定不能存在,而參數mode指定了FIFO的權限,該參數將和進程umask一起起作用,若操作成功,則返回0,否則返回-1,同時將失敗的原因保存在外部變量errno中。
在創建好FIFO之後,使用open(系統接口)函數來打開該FIFO。
接下來寫一個server和一個client進程,他們之間使用FIFO來進程。

server.c

server.c

client.c

client.c

這樣我們就可以實現client和server之間的通信了。

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