2010-05-11 221 views
3

在* inux編程中創建共享內存的函數將其作爲參數之一。Linux共享內存

此關鍵字的含義是什麼?我如何使用它?

編輯:

未共享存儲器ID

回答

4

這只是一個系統V IPC(進程間通信)鍵,以便不同的過程可以創建或附連到共享存儲器的同一塊。密鑰通常使用ftok()創建,它將完全指定的文件名和項目ID轉換爲可用的密鑰。

由於應用程序通常可以在其所有不同的進程中使用相同的文件名(文件名通常是與您的應用程序關聯的配置文件),因此每個不同的進程獲取相同的密鑰(或者,如果使用項目ID指定多個共享內存段,同一組鍵)。

例如,我們曾經所使用由我們的lex/yacc的代碼處理的配置文件,所以我們只使用的路徑名和一個項目ID爲每個不同的共享存儲器塊(那裏根據目的是三個或四個應用程序正在討論的過程)。這實際上提出了很多的意義,因爲它是解析和評估的數據從已存儲在所述共享存儲器塊該配置文件

由於在系統上沒有其他應用程序應該使用我們的配置文件製作的關鍵,沒有衝突。關鍵本身不限於共享內存,它也可以用於信號量和其他IPC機制。

+0

是的,關鍵是通常使用'ftok'創建(請參閱http://netbsd.gw.com/cgi-bin/man-cgi?ftok+3+NetBSD-current),並使用'shmget' 。 使用此鍵,'shmget'可以創建共享段,或者獲得與鍵標識的現有段,這取決於你傳遞標誌(見http://netbsd.gw.com/cgi-bin/man-cgi ?shmget的+ 2 + NetBSD當前)。 – tonio 2010-05-11 13:07:35

0

posix共享內存函數(shm_open和friends)有一個更友好的用戶界面,它們可以接受唯一的文件名,這些文件名必須被應用程序用來打開同一個共享內存塊。

話雖如此,在Linux下的/ dev/shm中打開一個文件通常也是可行的,然後使用MAP_SHARED進行映射,這實現了大致相同的效果。