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函式。二 對映共享記憶體,將這段建立的共享記憶體對映到...