Linux 程序間通訊和同步(1) 管道

2021-08-15 15:38:48 字數 918 閱讀 3646

半雙工管道:

單向通訊 ,shell 中 管道用 | 表示

$ ls -l|grep *.c  //把 ls -l 的輸出當做 "grep *.c" 的輸入
程序建立管道, 每次建立兩個檔案描述符來操作管道,成功返回 0 ,失敗返回 -1

int pipe(int filedes[2]);
侷限性:管道是由核心管理的乙個緩衝區,它的一端連線乙個程序的輸出,另一端連線乙個程序的輸入。管道的緩衝區不需要很大,它被設計為環形的資料結構,當兩個程序都終止後,管道的生命週期也會被結束。

管道是乙個固定大小的緩衝區,在linux中,該緩衝區的大小為一頁,即4kb,使它的大小不會像普通檔案那樣不加檢驗的增長。在linux中,核心使用struct pipe_inode_info結構體來描述乙個管道,這個結構體定義在pipe_fs_i.h中。

原子性:

當要寫入的資料量不大於pipe_buf時,linux將保證寫入的原子性。

當要寫入的資料量大於pipe_buf時,linux將不再保證寫入的原子性。

--------------------------------------------分割線--------------

命名管道

1.建立 fifo

shell 下建立

$ mkfifo /ipc/namedfifo
c語言

#include#includeint mkfifo(const char *pathname, mode_t mode);

程序間通訊 和 執行緒間同步

前經常搞混,所以記錄下來。程序間通訊主要是指多個程序間的資料互動。而執行緒間同步主要指維護多個執行緒之間資料準確 一致性。一.程序間通訊主要有以下幾種方式 管道 pipe 管道是一種半雙工的通訊方式,資料只能單向流動,而且只能在具有親緣關係的程序間使用。程序的親緣關係通常是指父子程序關係。有名管道 ...

Linux程序間通訊1

1.linux下程序間通訊方式有有那些?1 管道 pipe 管道是一種半雙工的通訊方式,資料只能單向流動,而且只能在具有親緣關係的程序間使用。程序的親緣關係通常是指父子程序關係。2 有名管道 named pipe 有名管道也是半雙工的通訊方式,但是它允許無親緣關係程序間的通訊。3 訊號量 semop...

Linux 程序間通訊1

一 程序間通訊概述 程序間通訊 在使用者空間實現程序通訊是不可能的,通過linux核心通訊 1.資料傳輸 乙個程序需要將它的資料傳送給另乙個程序 2.資源共享 多個程序之間共享同樣的資源 3.通知事件 乙個程序需要向另乙個或一組程序傳送訊息,通知它們發生了某種事件 4.程序控制 有些程序希望完全控制...