unix系統中,可以用於程序間的通訊的機制

2021-07-10 00:15:09 字數 1022 閱讀 1735

首先,個人主要寫的是伺服器**,主要使用的是,主機間用socket、或者訊息佇列,同一主機之間用訊息佇列,控制通訊使用socket,反正主要還是用的這倆居多,不過有的時候還是會使用記憶體共享,其他的機制,恕我無知,我真的沒怎麼用過。

socket主要是非阻塞式,訊息佇列主要用的是開源的zeromq(我使用的c/c++),共享記憶體和記憶體對映主要用於同一主機間訊息量很多的場景,但需要注意使用鎖。

管道(pipe):管道可用於具有親緣關係程序間的通訊,允許乙個程序和另乙個與它有共同祖先的程序之間進行通訊。

命名管道(named pipe):命名管道克服了管道沒有名字的限制,因此,除具有管道所具有的功能外,它還允許無親緣關係程序間的通訊。命名管道在檔案系統中有對應的檔名。命名管道通過命令mkfifo或系統呼叫mkfifo來建立。

訊號(signal):訊號是比較複雜的通訊方式,用於通知接受程序有某種事件發生,除了用於程序間通訊外,程序還可以傳送訊號給程序本身;linux除了支援unix早期訊號語義函式sigal外,還支援語義符合posix.1標準的訊號函式sigaction(實際上,該函式是基於bsd的,bsd為了實現可靠訊號機制,又能夠統一對外介面,用sigaction函式重新實現了signal函式)。

訊息(message)佇列:訊息佇列是訊息的鏈結表,包括posix訊息佇列system v訊息佇列。有足夠許可權的程序可以向佇列中新增訊息,被賦予讀許可權的程序則可以讀走佇列中的訊息。訊息佇列克服了訊號承載資訊量少,管道只能承載無格式位元組流以及緩衝區大小受限等缺

共享記憶體:使得多個程序可以訪問同一塊記憶體空間,是最快的可用ipc形式。是針對其他通訊機制執行效率較低而設計的。往往與其它通訊機制,如訊號量結合使用,來達到程序間的同步及互斥。

訊號量(semaphore):主要作為程序間以及同一程序不同執行緒之間的同步手段。

套介面(socket):更為一般的程序間通訊機制,可用於不同機器之間的程序間通訊。起初是由unix系統的bsd分支開發出來的,但現在一般可以移植到其它類unix系統上:linux和system v的變種都支援套接字。

互斥鎖可以用於不同程序的執行緒同步嗎?

前些天在 csdn論壇上看到乙個帖子,詢問互斥鎖 pthread mutex t 是否可以用來同步不同程序的執行緒。當時我的回答是不可以。其實,更準確的答案是,不一定。首先,互斥鎖預設的情況下,只能用於程序內部的執行緒的同步。這也是互斥鎖最常見,最標準的用法。其次,互斥鎖也確實提供了對不用程序的執行...

Unix程序間的通訊

1.管道可以用作父子程序之間的通訊,pipe函式,將fd 0 開啟用於讀取資料,fd 1 開啟用於寫入資料。通常,對於單方向通訊,讀端會關閉寫fd,即fd 1 寫端會關閉讀fd,即fd 0 int main read fd 0 buf,30 sleep 2 write stdout fileno,b...

RatingBar 可以用於客戶打星評分的控制項

什麼是ratingbar呢?其實就是類似於一種進度條,它顯示出 星星 來代替以前的一條行框的進度條 可以用於客戶評分,當客戶勾選時可以顯示 在activity中定義乙個onratingbarchangelistener,當然,在布局檔案中要寫好基礎的 android numstarts 5 這裡是要...