1.概念
每個程序各自有不同的程序位址空間,任何乙個程序的全域性變數在另乙個程序中都不能訪問,所以程序之間要交換資料必須通過核心。在核心中開闢一塊緩衝區,p1程序把資料從使用者空間考到核心緩衝區,p2程序再從核心緩衝區把資料讀走。這種機制就叫做程序間的通訊。
2.通訊的方法:訊號(signal) 管道(pipe) 套接字(socket)和system v ipc機制。
2.1訊號
它是linux系統程序之間相互通訊或者操作的一種機制。訊號可以在任何時候發給某乙個程序,而無需知道該程序的狀態。如果該程序當前未處於執行狀態,則該訊號就有核心儲存起來,直達該程序恢復執行並傳遞訊息給它為止,如果在乙個訊號被程序設定為阻塞,則該訊號的傳遞被延遲,直到其阻塞被取消時才被傳遞給程序。
2.2管道(pipe)
管道允許在程序之間按先進先出的方式傳送資料,是程序間通訊的一種常見的方式。
管道分為pipe(無名管道)和fifo(命名管道)兩種。除了建立,開啟,刪除的方式不用外,這兩種管道幾乎都是一樣的。他們都是通過核心緩衝區實現資料傳輸。
pipe:
用於相關程序通訊,程序只能訪問自己或者祖先建立的管道,而不能任意訪問已經存在的管道-----因為沒有名字。它通過pipe()系統呼叫來建立並開啟,當最後乙個使用他的程序關閉對它的引用時,pipe將自動撤銷。
fifo:它與無名管道工作機制很類似,都是採用對開啟的檔案進行讀寫的方式。命名管道的名字對應於乙個磁碟索引節點,有了這個檔名,任何程序有相應的許可權都可以對它進行訪問。使用open()函式通過檔名可以開啟已經建立的命名管道,而無名管道不能有open()開啟。當乙個命名管道不在被任何程序開啟時,它並沒有消失,還可以在次被開啟,就像開啟乙個磁碟檔案一樣。可以用刪除普通檔案的方法將其刪除,實際刪除的是磁碟上對應的節點資訊。
高階管道操作:在linux c程式設計中除了應用常用的pipe系統呼叫建立管道外,還可以使用c函式庫中管道函式popen()和pclose()來實現。
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...