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