Linux程序間通訊

2021-08-13 04:18:53 字數 1181 閱讀 3253

一、共享記憶體 

1、 共享記憶體是被多個程序共享的一部分物理記憶體.共享記憶體是程序間共享資料的一種最快的方法,乙個程序向共享記憶體區域寫入了資料,共享這個記憶體區域的所有程序就可以                  立刻 看到其中的內容

2.、共享記憶體實現分為兩個步驟:

一、建立共享記憶體,使用shmget函式

二、對映共享記憶體,將這段建立的共享記憶體對映到具體的程序空間去,使用shmat函式

3、當乙個程序不再需要共享記憶體時,需要把它從程序位址空間中脫離。

int shmdt ( char *shmaddr )

二、訊息佇列

1、訊息佇列就是乙個訊息的鍊錶.可以把訊息看作乙個記錄,具有特定的格式.程序可以向中按照一定的規則新增新訊息;另一些程序則可以從訊息佇列中讀走訊息

2、目前主要有兩種型別的訊息佇列:

posix訊息佇列以及系統v訊息佇列,系統v訊息佇列目前被大量使用

3、訊息佇列的核心持續性要求每個訊息佇列都在系統範圍內對應唯一的鍵值,所以,要獲得乙個訊息佇列的描述字,必須提供該訊息佇列的鍵值

4、key_t ftok (char*pathname, char proj)

功能:   返回檔名對應的鍵值。

pathname:  檔名

proj:     專案名(不為0即可)   

5、int msgsnd(int msqid,struct          msgbuf*msgp,int msgsz,int msg***)

功能:向訊息佇列中傳送一條訊息

6、msqid:    已開啟的訊息佇列id

msgp:     存放訊息的結構

msgsz:   訊息資料長度

msg***:   傳送標誌,有意義的msg***標誌為ipc_nowait,指明在訊息佇列沒有足夠空間容納要傳送的訊息時,msgsnd是否等待

三、訊號燈

訊號量(又名:訊號燈)與其他程序間通訊方式不大相同,主要用途是保護臨界資源.

程序可以根據它判定是否能夠訪問某些共享資源。除了用於訪問控制外,還可用於程序同步

二值訊號燈:訊號燈的值只能取0或1,類似於互斥鎖。 但兩者有不同:

訊號燈強調共享資源,只要共享資源可用,其他程序同樣可以修改訊號燈的值;

互斥鎖更強調程序,占用資源的程序使用完資源後,必須由程序本身來解鎖。

計數訊號燈:訊號燈的值可以取任意非負值

Linux程序間通訊

程序間通訊 ipc interprocess communication 基本機制 訊號 管道及命名管道 訊息佇列 共享主存 訊號量 套接字。訊號 全稱軟中斷訊號,是在軟體層次上對中斷機制的一種模擬,它也是程序間通訊機制中唯一的非同步通訊機制。linux訊號處理函式可分為訊號安裝函式 訊號傳送函式和...

Linux程序間通訊

謝謝nonoob糾錯 我們在linux訊號基礎中已經說明,訊號可以看作一種粗糙的程序間通訊 ipc,interprocess communication 的方式,用以向程序封閉的記憶體空間傳遞資訊。為了讓程序間傳遞更多的資訊量,我們需要其他的程序間通訊方式。這些程序間通訊方式可以分為兩種 1.管道與...

Linux程序間通訊

謝謝nonoob糾錯 我們在linux訊號基礎中已經說明,訊號可以看作一種粗糙的程序間通訊 ipc,interprocess communication 的方式,用以向程序封閉的記憶體空間傳遞資訊。為了讓程序間傳遞更多的資訊量,我們需要其他的程序間通訊方式。這些程序間通訊方式可以分為兩種 1.管道與...