程序間通訊(管道 共享記憶體 訊息佇列 訊號量)

2021-10-03 13:25:18 字數 1940 閱讀 2183

匿名管道

什麼是匿名管道?

如何建立匿名管道

成功:返回0 。失敗:返回-1

pipefd[0]:從管道讀取資料

pipefd[1]:向管道寫入資料

**舉例:

#include

#include

intmain()

pid_t pid =

fork()

;if(pid <0)

else

if(pid ==0)

else

;read

(pipefd[0]

, buf,20)

;printf

("parent process read:%s\n"

, buf);}

return0;

}

匿名管道的讀寫規則(命名管道也是相同)(詳細了解匿名管道讀寫規則)

管道的原子性問題(詳細了解管道的原子性問題)

命名管道

什麼是命名管道?

如何建立命名管道

mkfifo filename(管道檔名)

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

pathname:檔案路徑名

mode:檔案許可權

成功:返回 0 。失敗:返回 -1

**舉例:

int

main()

}return0;

}

命名管道檔案的開啟規則(此處是受open介面的第二個引數影響,o_rdonly、o_wronly時阻塞,o_rdwr時成功開啟)

命名管道讀寫規則

//fifo_write.c

intmain()

}int fd =

open

(file,o_wronly)

;//設定當前程序管道檔案已只寫方式開啟

if(fd <0)

printf

("open success\n");

while(1

);scanf

("%s"

,buf)

;int ret1 =

write

(fd,buf,

strlen

(buf));

if(ret1 <0)

}return0;

}

fifo_read.c (從管道讀取資料):

//fifo_read.c

intmain()

}int fd =

open

(file,o_rdonly)

;//設定當前程序管道檔案已只寫方式開啟

if(fd <0)

printf

("open success\n");

while(1

);int ret =

read

(fd,buf,

1023);

if(ret ==0)

else

if(ret <0)

printf

("buf:[%s]\n"

,buf);}

return0;

}

什麼是共享記憶體?

共享記憶體特性

實現原理

通過實現原理體會對共享記憶體的基本操作

通過共享記憶體實現讀端程序與寫端程序通訊什麼是訊息佇列?

訊息佇列特性

實現原理什麼是訊號量?

如何實現程序間的同步與互斥

程序間通訊的方式 訊號 管道 訊息佇列 共享記憶體

常見的通訊方式 管道pipe 管道是一種半雙工的通訊方式,資料只能單向流動,而且只能在具有親緣關係的程序間使用。程序的親緣關係通常是指父子程序關係。命名管道fifo 有名管道也是半雙工的通訊方式,但是它允許無親緣關係程序間的通訊。訊息佇列messagequeue 訊息佇列是由訊息的鍊錶,存放在核心中...

程序間通訊 管道

include int pipe int fd 2 返回值 若成功,返回0,若出錯,返回 1經由引數fd返回兩個檔案描述符 fd 0 為讀而開啟,fd 1 為寫而開啟。fd 1 的輸出是fd 0 的輸入。else if pid 0 子程序 else else if pid 0 父程序 printf ...

程序間通訊 管道

原文 程序間通訊 管道 管道簡介 常說的管道都是匿名半雙工管道,匿名半雙工管道在系統中是沒有實名的,並不可以在檔案系統中以任何方式看到該管道。它只是程序的一種資源,會隨著程序的結束而被系統清除。管道通訊是在unix系統中應用比較頻繁的一種方式,例如使用grep查詢 ls grep ipc 顧名思義,...