2009-07-07 204 views
0

我有2個進程P1和P2。 P1運行爲根,並且創建與下面的調用信號量:semget以「權限被拒絕」失敗

了semget(鍵1,S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH | IPC_CREAT);

我試圖在另一個進程P2中獲取相同信號量的句柄,該進程在正常用戶的上下文中運行。在此過程中,semget調用成功,但semop調用失敗,並顯示「權限被拒絕」(Errno = 13)。

任何指針都會有很大的幫助。

〜PS7

回答

0

什麼是我們所談論的語言?

我認爲在導入S_常量時會出現一些錯誤,以至於它們爲空並且不起作用。

那麼用位掩碼進行暴力測試呢? 嘗試使用直接IPC_CREAT | 0666

我的2美分:)

0

「權限被拒絕」/EACCES是的,當然,與非特權過程P2試圖semget爲它無法獲得一個現存的信號是一致的。所以,也許在密鑰下已經有一個現存的信號量,它缺少所需的S_IWOTH|S_IROTH權限。 (也許從P1的早期版本的剩餘?)

ipcs -s說什麼信號量的權限是?如果您將IPC_EXCL添加到P1semget呼叫中,會發生什麼情況?它會失敗嗎?

0

使用S_IRUSR和S_IWUSR指定讀取和 共享存儲器段的所有者寫權限,和S_IROTH和S_IWOTH指定其他標誌讀取和寫入權限 如shmget的第三arguement()。

IPC_CREATE只保證應該根據鍵值創建新的共享內存段。如果用鍵值指定的段存在,通常shmget()會失敗。

1

此項有很長的時間,但我是有

同樣的問題

0600 | IPC_CREAT

,但我已經固定須藤

運行我的應用程序
相關問題