程序間通訊

2021-10-07 05:25:45 字數 1474 閱讀 8464

程序間通訊 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...