1樓:那孩子
程序通過呼叫shmget(shared memory get,獲取共享記憶體)來分配一個共享記憶體塊。
該函式的第一個引數是一個用來標識共享記憶體塊的鍵值。彼此無關的程序可以通過指定同一個鍵以獲取對同一個共享記憶體塊的訪問。不幸的是,其它程式也可能挑選了同樣的特定值作為自己分配共享記憶體的鍵值,從而產生衝突。
用特殊常量ipc_private作為鍵值可以保證系統建立一個全新的共享記憶體塊。
該函式的第二個引數指定了所申請的記憶體塊的大小。因為這些記憶體塊是以頁面為單位進行分配的,實際分配的記憶體塊大小將被擴大到頁面大小的整數倍。
第三個引數是一組標誌,通過特定常量的按位或操作來shmget。這些特定常量包括:
ipc_creat:這個標誌表示應建立一個新的共享記憶體塊。通過指定這個標誌,我們可以建立一個具有指定鍵值的新共享記憶體塊。
ipc_excl:這個標誌只能與 ipc_creat 同時使用。當指定這個標誌的時候,如果已有一個具有這個鍵值的共享記憶體塊存在,則shmget會呼叫失敗。
也就是說,這個標誌將使執行緒獲得一個「獨有」的共享記憶體塊。如果沒有指定這個標誌而系統中存在一個具有相同鍵值的共享記憶體塊,shmget會返回這個已經建立的共享記憶體塊,而不是重新建立一個。
模式標誌:這個值由9個位組成,分別表示屬主、屬組和其它使用者對該記憶體塊的訪問許可權。其中表示執行許可權的位將被忽略。
指明訪問許可權的一個簡單辦法是利用中指定,並且在手冊頁第二節stat條目中說明了的常量指定。例如,s_irusr和s_iwusr分別指定了該記憶體塊屬主的讀寫許可權,而 s_iroth和s_iwoth則指定了其它使用者的讀寫許可權。 下面例子中shmget函式建立了一個新的共享記憶體塊(當shm_key已被佔用時則獲取對一個已經存在共享記憶體塊的訪問),且只有屬主對該記憶體塊具有讀寫許可權,其它使用者不可讀寫。
int segment_id = shmget (shm_key, getpagesize (), ipc_creat | s_irusr| s_iwusr ); 如果呼叫成功,shmget將返回一個共享記憶體識別符號。如果該共享記憶體塊已經存在,系統會檢查訪問許可權,同時會檢查該記憶體塊是否被標記為等待摧毀狀態。
Linux下記憶體識別問題,如何在linux作業系統下檢測記憶體洩漏
正常。一般來說,並非是系統的問題,而是主機板的問題。linux某些版本只支援4g記憶體,某些可以達到64g,這因核心不同而變,但並非說你就一定可以檢視到這麼多的記憶體。我猜測你是使用了一些較早的主機板,它們的晶片組只能支援到4g的地址空間,而系統資源也要分配一部分地址,所以最後系統就只能使用少於4g...
linux怎麼掛載磁碟,linux下掛載磁碟的命令是什麼?
這個如果你想掛在磁碟的話那麼直接掛上就可以的。也就是說,不管怎麼說?只要掛上就可以。windows 有我的電腦啊。linux 你可以認為我的電腦就是 linux 的所有檔案和磁碟,都在 我的電腦 下面。就是位置不好找,因為這個可以按需要設定,就像 ntfs 分割槽可以分配碟符的時候分配目錄地址 很多...
linux下cvs服務怎麼啟動不了
檔案沒有寫完呀,看不出來。linux下怎麼啟動tomcat服務 linux下tomcat服務的啟動 關閉與錯誤跟蹤,使用putty遠端連線到伺服器以後,通常通過以下幾種方式啟動關閉tomcat服務 切換到tomcat主目錄下的bin目錄 cd usr local tomcat bin 1,啟動tom...