程序間通訊 ipc(interprocess communication)
程序間通訊的四種方式
管道 - 簡單
訊號 - 系統開銷小
共享對映區 - 有無血緣關係都可以
本地套接字 - 穩定
一般情況下,提到的管道都是匿名管道,匿名管道在磁碟上沒有對應的磁碟檔案。
管道的本質:
管道的特點
管道的原理
管道的侷限性
例項1:建立管道
#include
#include
#include
#include
#include
#include
intmain
(int argc,
const
char
* ar**)
printf
("讀端檔案描述符pipe[0]=%d\n"
,fd[0]
);printf
("寫端檔案描述符pipe[1]=%d\n"
,fd[1]
);close
(fd[0]
);close
(fd[1]);}
執行結果
結果分析:程序pcb的檔案描述符表中,0、1、2都已被占用(標準輸入、標準輸出、標準錯誤),所以只能從3開始。
如果父子程序間使用管道進行通訊,應該把pid_t pid=fork();放在管道建立之後。
思考:
練習:
#include
#include
#include
#include
#include
#include
intmain
(int argc,
const
char
* ar**)
pid_t pid=
fork()
;//建立子程序。建立時,子程序的檔案描述符表從父程序拷貝
if(pid==-1
)if(pid>0)
//父程序向管道中寫==對應ps aux
else
if(pid==0)
//子程序從管道中讀==對應grep "bush"
printf
("讀端檔案描述符pipe[0]=%d\n"
,fd[0]
);printf
("寫端檔案描述符pipe[1]=%d\n"
,fd[1]
);close
(fd[0]
);close
(fd[1]);}
執行結果
拓展:如果在上述條件下,父程序也需要讀,子程序也需要寫(即乙個過程是父程序寫,子程序讀;另一過程是子程序寫,父程序讀),則需要再建立乙個管道,共兩根管道。
未完待續……
php程序間通訊 yoc PHP程序間通訊
php是用c編寫的,因此它對系統底層api的操作與c很像,同大多數語言一樣,php程序間通訊的方式有以下幾種 訊息佇列,管道,共享記憶體,socket和訊號。本文是對這幾種通訊方式對整理 管道通訊pipe 管道用於承載簡稱之間的通訊資料。為了方便理解,可以將管道比作檔案,程序a將資料寫到管道p中,然...
程序間通訊
實現程序間資料共享除了常用的記憶體檔案對映外,對於一些非檔案的資料共享可以直接使用wm copydata。如果需要在程序a傳遞資料到程序b,簡單的實現如下 在程序a中 cstring strdatatosend t hello 需要傳遞的資料 hwnd hwndreceived 程序b的接收資料視窗...
程序間通訊
最近做專案遇到奇怪的問題,我在主線程中建立乙個工作執行緒。在工作執行緒中用sendmessage向主線程傳送訊息,通知主線程操作office 物件。getactiveobject時提示 hr 0x8001010d 因為應用程式正在傳送乙個輸入同步呼叫,所以無法執行傳出的呼叫。我把sendmessag...