利用管道實現程序間通訊

2021-06-07 14:59:27 字數 1324 閱讀 4129

管道(pipe)是程序用來通訊的共享記憶體區域。乙個程序往管道中寫入資訊,而其它的程序可以從管道中讀出資訊。如其名,管道是程序間資料交流的通道。郵路(mailslots)的功能與管道類似,也是程序間通訊(interprocess communications,ipc)的媒介,只不過其具體實現方式與管道有些差別。乙個基於win32的應用程式可以在郵路中儲存訊息,這些訊息通常通過網路發往乙個指定的計算機或某網域名稱(域是共享乙個組名的一組工作站或伺服器。)下的所有計算機。你也可以使用命名管道代替郵路來進行程序間通訊。命名管道最適合用來兩個程序間的訊息傳遞,郵路則更適合乙個程序向多個程序廣播訊息。郵路具有乙個重要的特點,它使用資料報廣播訊息。廣播(broadcast)是網路傳輸中使用的術語,它意味著接收方收到資料後不傳送確認訊息通知傳送方。而管道(這裡的管道指命名管道,有關命名管道以下詳解。)則不同,它更類似於打**,你只對乙個當事人說話,但是你卻非常清楚你的話都被對方聽到。郵路和管道一樣,也是乙個虛擬檔案,它儲存在記憶體中,但是你卻必須使用普通的win32檔案函式訪問它,比如createfile、readfile、writefile等。郵路中儲存的資料可以是任何形式的,唯一的要求是不得超過64k。與磁碟檔案不同的是,郵路是乙個臨時的物件,當某個郵路所有的控制代碼都關閉的時候,該郵路及其中的資料就被刪除。

管道的型別有兩種:匿名管道和命名管道。匿名管道是不命名的,它最初用於在本地系統中父程序與它啟動的子程序之間的通訊。命名管道更高階,它由乙個名字來標識,以使客戶端和服務端應用程式可以通過它進行彼此通訊。而且,win32命名管道甚至可以在不同系統的程序間使用,這使它成為許多客戶/伺服器應用程式的理想之選。

就像水管連線兩個地方並輸送水一樣,軟體的管道連線兩個程序並輸送資料。乙個乙個管道一旦被建立,它就可以象檔案一樣被訪問,並且可以使用許多與檔案操作同樣的函式。可以使用createfile函式獲取乙個已開啟的管道的控制代碼,或者由另乙個程序提供乙個控制代碼。使用writefile函式向管道寫入資料,之後這些資料可以被另外的程序用readfile函式讀取。管道是系統物件,因此管道的控制代碼在不需要時必須使用closehandle函式關閉。

匿名管道只能單向傳送資料,而命名管道可以雙向傳送。管道可以以位元流形式傳送任意數量的資料。命名管道還可以將資料集合到稱為訊息的資料塊中。命名管道甚至具有通過網路連線多程序的能力。但遺憾的是windows9x不支援建立命名管道,它只能在windowsnt系列(如windows nt,windows 2000,windows xp)的作業系統上建立。

示例**:

程序1:

/讀取內容

char buf1[100];

dword dwread;

if(!readfile(hpipe,buf1,100,&dwread,null))

else

}

利用管道實現多程序間通訊

管道是linux系統最常見的程序間通訊方式之一,它在兩個程序之間實現乙個資料流通的通道,資料以一種資料流的方式在程序間流動。它把乙個程式的輸出直接連到另乙個程式的輸入。管道可以分為以下兩種,利用這兩種管道可以實現程序間的通訊,但是對於程序間的關係會有所限制 解決和 方法如下,資料以字元為例,通訊的內...

利用管道實現程序間的單向通訊

管道是程序間通訊的最原始方式,今天我們利用管道的程序間通訊,來實現簡單的程序間單向通訊 首先我們需要了解命名管道的一些特性命名管道的使用與建立 然後建立乙個fifo c的檔案來實現輸入資料和傳送資料 這是乙個命名管道的實現,往命名管道中寫入資料,並且傳送給另乙個程序 1.建立乙個命名管道 int m...

利用管道實現程序間同步

程序間同步是指程序的執行有先後順序,如a程序等待b程序執行完某個動作a程序才能繼續往下執行。程序間通訊的方法都可以用來同步,只是操作是否方便的乙個問題。複習了unix高階程式設計,覺得posix的訊號量是使用起來最方便的。可是無奈程式寫完放到板子裡面跑時,列印提示sem open function ...