匿名管道
什麼是匿名管道?
如何建立匿名管道
成功:返回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 顧名思義,...