程序間通訊 FIFI 命名管道

2021-07-04 03:00:05 字數 793 閱讀 9343



與無名管道不同,fifo可用於無關係的程序之間

1.管道讀寫端操作,如果讀寫端有一方讀或寫沒開啟,則另一端阻塞直到開啟(非阻塞情況下會成功開啟)

2.如果管道buf滿了沒有剩餘空間,則寫端會阻塞直到管道有pipe_buf的空間(如果管道是以非阻塞開啟的,則空間滿了繼續寫那麼出錯返回)

3.讀段會一直阻塞直到寫端向讀端寫入資料(非阻塞情況下出錯返回)

4.多個讀段去讀,如果讀的bufpipe_buf則讀取操作是非原子的,讀取出來的資料是混亂的

直至最後乙個訪問管道的程序結束,記憶體裡的管道資料會被刪除,但是管道還在

int main()

b_pid[b_num] = fork();

if(b_pid[b_num] < 0)

if(0 == b_pid[b_num])

b_num++;

b_pid[b_num] = fork();

if(b_pid[b_num] < 0)

if(0 == b_pid[b_num])

b_num++;

b_pid[b_num] = fork();

if(b_pid[b_num] < 0)

if(0 == b_pid[b_num])

b_num++;

while(1)

return 0;

}int ipc_pipe_fun1()

return 0;

}int ipc_pipe_fun2()

return 0;

}

程序間通訊 命名管道

程序間通訊的本質是不同的程序看到了同乙份公共的資源。而管道的 乙個不 足之處是沒有名字,因此,只能 用於具有親緣關係的程序間通訊,在命名管道 named pipe或fifo 提出後,該限制得到了克服。fifo不同於管道之處在於它提供 乙個路徑名與之關聯,以fifo的 檔案形式儲存於 檔案系統中。命名...

程序間通訊 命名管道

命名管道,和匿名管道,有了自己的名字,有了名字就可以操作。所以他不在侷限於有血緣關係的兩個程序之間,適用於任意的兩個程序。實際上和匿名管道一樣是一塊核心中的快取,和匿名管道不一樣的是,他在檔案系統中多了檔案,而匿名管道的檔案只存在與記憶體中,但是命名管道的檔案雖然存在,有在核心資料結構中有自己的環境...

程序間通訊 命名管道

命名管道 命名管道是乙個存在於檔案系統的乙個特殊檔案,命名管道和匿名管道區別 建立命名管道 從命令列建立 mkfifo filename 在程式中建立 函式原型 int mkfifo const char filename,mode t mode 返回值 成功返回 如果檔案已經存在返回 errno為...