程序間通訊

2021-08-17 05:07:12 字數 1437 閱讀 1199

程序間通訊,顧名思義,就是實現兩個及兩個以上的程序進行通訊。程序間通訊實現的要求是讓兩個毫不相干的程序看到同乙份資源,這個公共資源是由作業系統提供的。

1. 程序間通訊的目的

(1)資料傳輸,乙個程序將它的資料發給另乙個程序。

(2)資源共享,各個程序間共享資源。

(3)通知事件,乙個程序要向另乙個程序通知發生了的事件。

(4)程序控制。

2. 程序間通訊實現機制

(1)管道

作業系統將管道看作一種檔案,分為匿名管道和命名管道。

(2)system v ipc

訊息佇列,共享記憶體,訊號量。

3. 管道實現程序間通訊

(1)匿名管道

匿名管道主要實現具有親緣關係的程序,比如以父程序為模板建立子程序。

我們知道,要實現程序間的通訊,必須讓兩個程序看到公共的資源,而匿名管道就是這一塊資源。在匿名管道機制中,我們需要由父程序fork出子程序。在建立子程序時,因為子程序是父程序的拷貝,子程序和父程序擁有共同的程式**,但是資料是私有的。這樣的話,父程序建立的匿名管道也會被子程序看到,這時,兩個程序就看到了同乙份資源。

(2)匿名管道的建立

引數pipefd: 檔案描述符陣列,其中fd[0] 表示讀端,fd[1] 表示寫端。

返回值: 成功返回0,失敗返回錯誤**。

(3) 匿名管道的實現

#include #include #include #include int main( void )

// read from stdin

while ( fgets(buf, 100, stdin) )

memset(buf, 0x00, sizeof(buf));

// read from pipe

if ( (len=read(fds[0], buf, 100)) == -1 )

// write to stdout

if ( write(1, buf, len) != len )

}}

(4)命名管道

命名管道實現兩個毫不相干的程序之間的通訊。

建立命名管道

1)命令 # mkfifo filename;

2)函式 int  mkfifo( const  char *filename,mode_t  mode );

(5)  管道的特點

1) 管道只能實現單向通訊。

2) 管道在通訊時基於位元組流。

3) 管道的生命週期隨程序。

4) 管道自帶同步與互斥機制。

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...