在linux下使用共享記憶體時,照著書上或者網上的方法,使用shmat函式時,老是會碰到乙個問題
shmat error
permission denied
每次需要sudo一下才能夠正常執行,並且如果普通使用者使用ipcs檢視的話,是看不見已經分配的共享記憶體的,需要在root使用者下才能看見, 最開始以為是shmat需要root使用者的許可權,後來發現不是這樣。
造成這個問題的成因是在使用shget的時候,沒有賦於開闢的共享記憶體對應的讀寫許可權。
shget函式原型如下
int shmget( key_t shmkey , int shmsiz , int flag );
注意最後乙個形參 flag,表示當前記憶體的模式
(mode)以及許可權標識。
可以取如下的值
模式可取如下值: 新建:ipc_creat
如果識別符號以存在,則返回錯誤值:ipc_excl
然後將「模式」 和「許可權標識」進行「或」運算,做為第三個引數。
如: ipc_creat | ipc_excl | 0666
即shmid = shmget( shmkey , sizeof(in_data) , ipc_creat | 0666 ) ;
這樣,一切ok. 不需要root許可權,用ipcs也能看到當前使用者建立的共享記憶體資訊
Linux環境下共享記憶體
共享記憶體指 shared memory 在多處理器的計算機系統中,可以被不同 處理 cpu 訪問的大容量記憶體。由於多個cpu需要快速訪問 儲存器,這樣就要對 儲存器進行 快取 cache 任何乙個快取的資料被更新後,由於其他處理器也可能要訪問,共享記憶體就需要立即更新,否則不同的處理器可能用到不...
Linux下共享記憶體程式設計
利用共享記憶體 share memory 可以讓我們在任意兩個程序之間傳遞資料,而且也是相對容易實現的一種方法,在正常情況下,乙個程序所使用的記憶體是不允許其它程序訪問的,但是通過共享記憶體可以實現資料的共享。使用共享記憶體用到的api函式有 include include include key ...
Linux 共享記憶體
一 概念 共享記憶體是被多個程序共享的一部分物理記憶體,是程序間共享資料的最快的一種方法。二 實現 分為兩個步驟 1 建立共享記憶體。2 對映共享記憶體。1 建立 int shmget key t key,int size,int shm 當key的取值為 ipc private 時,將建立一塊新的...