2013-10-22 38 views
2

當調用ipcs -a時,key列和id列有什麼區別?共享內存:密鑰和ID有什麼區別?

下面是ipcs命令的示例輸出:

ipcs -a 

------ Shared Memory Segments -------- 
key  shmid  owner  perms  bytes  nattch  status  
0x00000000 0   ybaumes 600  393216  2   dest   
0x00000000 65537  ybaumes 700  8124648 2   dest   
0x00000000 3932163 ybaumes 700  169376  2   dest   
0x00000000 3604485 ybaumes 600  393216  2   dest   

回答

4

首先,共享內存中的'id'列是指共享內存區域的特定處理程序。如果沒有獲得共享內存區域,它將返回一個負值。所以基本上,'id'是由系統生成的,用戶沒有任何控制權。

雖然ipcs命令中的'key'列指的是參考進程間通信資源(如共享內存,消息隊列和信號量)給出的值。 '一個鍵只是一個key_t類型的整數'。而且,關鍵參數是與信號標識關聯的訪問值。它可以是簡單的整數,例如。 34562,它可以在使用關聯的get函數創建這些資源時傳遞。 需要密鑰的地方接受一個特殊參數IPC_PRIVATE。在這種情況下,系統將生成一個唯一的密鑰並保證沒有其他進程擁有相同的密鑰。

如果在需要密鑰的地方通過IPC_PRIVATE請求資源,該進程將接收該資源的唯一密鑰。由於該資源被識別爲外部人未知的唯一密鑰,所以其他進程將無法共享該資源,並且因此請求進程被保證它唯一擁有並訪問該資源。

這個概念在消息隊列中使用時會更清楚,消息隊列中會生成消息並使用特定的鍵值發送消息。只有在接收端匹配給定的密鑰時,才能在接收端收到相同的消息。因爲,還有返回值給出消息ID,它是根據相應的鍵值計算出來的,主要相關性是爲了檢查資源的唯一性。

0

參見shmget的文檔(2)。關鍵是創建時IPC_PRIVATE或0。 shmid是爲特定shm段返回的值,以便其他進程或系統調用可以引用該段。

相關問題