1. 程式人生 > >IPC -- 管道和FIFO

IPC -- 管道和FIFO

1.第一種IPC:管道【未命名管道】

    過程:

    主要呼叫int pipe(int fd[2])函式來建立一個管道,其中fd[0]代表讀端,fd[1]代表寫端,我們可以呼叫pipe之後,fork子程序,然後按照需求來關閉相應的讀端和寫端,這樣父子程序就可以進行通訊。

    缺點:

    fd存在記憶體裡面,程式退出就不見了,並且管道只能用在有關係的程序之間,任意兩個程序不能通過管道來相互通訊。

2.第二種IPC:FIFO【命名管道】

    過程:

    主要呼叫mkfifo(const char* path, mode_t mode)來建立一個管道,並且用open來開啟一個管道,為什麼可以使用open來開啟:因為這個FIFO是存在檔案系統裡面的,並且FIFO可以使用shell命令mkfifo來建立。

    因為這個FIFO存在於檔案系統裡面,所以任意的程序都可以像檔案一樣開啟它,所以任意程序就可以通過這個FIFO相互通訊,但是如果有多個寫端但只有一個讀端的話,那麼需要注意原子操作。