Linux 下共用記憶體建立時需要注意的問題

來源:互聯網
上載者:User

在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也能看到目前使用者建立的共用記憶體資訊

 


 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

Tags Index: