1.程序通訊的目的
(1) 資料傳輸: 乙個程序需要將它的資料傳輸給另乙個程序
(2) 資源共享: 多個程序之間共享同樣的資源
(3) 通知事件: 乙個程序需要向另乙個或一組程序傳送訊息, 通知它們發生了什麼事情
2.管道
管道是一種程序之間通訊的一種方式, 我們把從乙個程序連線到另乙個程序的資料流叫做管道
3.匿名管道
(1) 匿名管道的建立
int pipe(int fd[2]);
fd是乙個檔案描述符陣列, fd[0] 代表讀端, fd[1] 代表寫端
返回值:成功過時返回0, 失敗時返回錯誤**
4.**演示#include
#include
#include
#include
#include
#include
#include
#include
int main()
pid_t id = fork();
if(id == -1)
if(id == 0)
close(fd[1]);
char buf[100];
int len = read(fd[0], buf, strlen(buf));
if(len == -1)
printf("%s\n", buf);
return
0;}
5.站在檔案描述符角度理解
6.匿名管道的特點
(1) 單向
(2) 有血緣關係的程序才能通訊
(3) 同步互斥機制(管道沒有資料了就不讀了, 管道滿了就不能寫了)
(4) 程序退出管道釋放,管道的生命週期隨程序
(5) 管道提供面向位元組流的服務
7.幾個名詞概念
(1) 位元組流: 由上層決定, 一次讀多少不確定
(2) 資料不一致: 乙個程序讀, 另乙個程序寫
(3) 臨界區: 兩個程序訪問臨界資源的那段**叫做臨界區
(4) 互斥: 在任何乙個時間點臨界區訪問臨界資源時只允許乙個程序訪問
(5) 訪問資源的原子性: 程序在操作某些資源時要麼不做, 要麼做完,中間不會被打擾
(6) 同步: 以相對比較安全的順序訪問資源,這種安全性叫同步(為了防止飢餓現象)
(7) 管道自帶互斥和同步, 當管道裡無資料時, 父程序會等子程序退出
8.管道滿的時候
(1) 所有管道寫端對應的檔案描述符被關閉時, 則read返回0
(2) 如果所有檔案描述符讀端對應檔案描述符被關閉時, 則write 操作會產生乙個sigpipe, 進而可能導致write程序退出
(3) 當要寫的資料不大於pipe_buf時(4096), linux將保證寫入的原子性
(4) 當寫的資料大於pipe_buf時, linux將不再保證寫入的原子性
程序間通訊 匿名管道
最近實現乙個遠端超級終端的功能,通訊模式是這樣的 客戶端 通過網路傳送cmd命令到 伺服器端 通過程序間通訊 管道 將此cmd命令發給 cmd.exe程式,cmd.exe執行此cmd命令 接下來 cmd.exe 程式將執行結果返回 伺服器端 傳送此次結果到 客戶端,客戶端對結果進行顯示 其中伺服器端...
程序間通訊 匿名管道
使用匿名管道做程序通訊,需要用父程序建立乙個子程序,該子程序的標準輸入輸出控制代碼由父程序指定。無論父程序還是子程序,都可以收發資料,這裡僅演示父程序發資料,子程序列印資料。父程序迴圈從控制台讀資料,並傳送給子程序,子程序用對話方塊列印資料,約定子程序收到 quit 後退出。define crt s...
程序間通訊 匿名管道通訊
將關於匿名管道通訊過程中遇到的問題以及心得總結一下 使用場合 匿名管道通訊對執行緒間通訊和父子程序之間的通訊非常有用 一下 分三部分 1.建立匿名管道 2.建立子程序 1 使用getstdhandle函式獲取標準輸出裝置的控制代碼 2 使用setstdhandle函式將標準輸出到寫匿名管道 3 使用...