程序間通訊《六》

2021-04-17 14:24:52 字數 1012 閱讀 6691

posix 有名訊號燈。

posix有名訊號燈 和 基於記憶體的訊號燈乙個很明顯的區別是初始化不一樣

posix 有名訊號燈的初始化如下:

sem_t 

*sem_open(

const

char

*name, 

intoflag);

sem_t 

*sem_open(

const

char

*name, 

intoflag, mode_t mode, unsigned 

intvalue);

返回: 成功返回新的sem, 失敗返回sem_failed, 並置響應errno;

與其對應的關閉訊號燈api

intsem_close(sem_t 

*sem);

返回: 成功返回0, 失敗為-1

; 當乙個程序終止時,核心對其還開啟著的有名訊號燈自動執行這樣的訊號燈操作。不管是否正常終止,或異常退出。

關閉了訊號燈, 但是並沒有從系統中刪除掉。

intsem_unlink(

const

char

*name);

返回: 成功返回0, 失敗 返回-1

; 其他的操作諸如: sem_wait( ), sem_post( )等, 都如同posix 基於記憶體的無名訊號燈。

因為開啟的訊號燈是基於檔案系統的,所以,posix 有名訊號燈天生具備多程序訪問能力。不需要額外對映到共享記憶體區域。

另外,在fork( ) 之前,開啟訊號燈。例程如下:

mutex 

=sem_open(name, ipc_creat 

|ipc_excl, 

0666, 1

);pid 

=fork( );

if(pid 

<

0)  

return-1

;這樣的**也是正確的。 posix.1 這樣描述: "在父程序中開啟的任何訊號燈,仍在子程序中開啟"

(六) 程序間通訊

程序間通訊 ipc 程序間通訊的原因 資料傳輸 資源共享 通知事件 程序控制 程序間通訊方式 1.管道 pipe 和命名管道 fifo 最古老的ipc,但目前很少使用 2.訊號 signal 3.訊息佇列 重點 4.共享記憶體 5.訊號量 6.套接字 socket a.管道通訊 單向的 先進先出的 ...

實驗六 程序間通訊(下)

一 實驗名稱 實驗六 程序間通訊 下 二 實驗日期 2014 4 3 三 實驗目的 l 通過實驗理解共享記憶體通訊 l 通過實驗理解linux訊號量 l 了解linux訊號量與訊息緩衝通訊 記憶體共享通訊之間的差異 l 布置作業1 四 實驗的步驟和方法 第六次小課程序間通訊 下 第一部分本週大課內容...

Linux C程序間通訊(預習內容六)

共享記憶體 是被多個程序共享的一部分物理記憶體。共享記憶體是程序間共享資料的一種最快的方法,乙個程序向共享記憶體區域寫入了資料,共享這個記憶體區域的所有程序就可以立刻看到其中的內容。共享記憶體實現分為兩個步驟 一 建立共享記憶體,使用shmget函式。二 對映共享記憶體,將這段建立的共享記憶體對映到...