想我打電話shmget
使用以下參數:段已經存在時,如何使用shmget權限位?
int shmid = shmget(KEY, 1024*4096, IPC_CREAT|0644);
,並進一步,假設與關鍵KEY
段已經存在。 shmget
的參數shmflg
參數(在這種情況下,0644
)的許可模式位OR'd如何影響shmget
的行爲?是否shmget
與這些權限標誌段的權限執行任何種類的「權限驗證?具體是什麼驗證意味着什麼?
想我打電話shmget
使用以下參數:段已經存在時,如何使用shmget權限位?
int shmid = shmget(KEY, 1024*4096, IPC_CREAT|0644);
,並進一步,假設與關鍵KEY
段已經存在。 shmget
的參數shmflg
參數(在這種情況下,0644
)的許可模式位OR'd如何影響shmget
的行爲?是否shmget
與這些權限標誌段的權限執行任何種類的「權限驗證?具體是什麼驗證意味着什麼?
如何進行或運算到
shmflg argument
的權限模式位[...]的shmget
影響shmget
的行爲?
POSIX是有點棘手解釋這個問題對於那些已經有指定鍵共享內存段的情況,但目的似乎是它的運作類似於open()
。也就是說,如果進程的uid和g id和請求的模式與段的uid,gid和權限不一致,則該功能失敗。具體地,如果
的
shmget()
功能必須失敗:[...]的共享存儲器的標識符存在的shmflg
9個比特將不會被授予由低階指定的鍵,但操作許可[...] 。
Linux聯機幫助頁shmget()
也有類似的文字,還特意說,
如果共享內存段已經存在,權限驗證[...]。
這與POSIX沒有什麼不同,只是更加明確。
Another section of POSIX給出了更多的細節,這些細節歸結爲說讀/寫訪問是基於根據它的euid和egid適用於進程的許可位集來授予或拒絕的。
是否shmget的與這些權限標誌段的權限執行任何種類的「權限驗證?具體是什麼驗證意味着什麼?
是,以上和鏈接POSIX規格說明
對於我來說,我還有點不清楚「shmflg
的低9位指定的操作權限」是什麼,我們可以將它解釋爲調用進程在創建段的權限它,但我認爲這確實意味着什麼只是在shmflag
中打開的所有模式位也都在段的權限字段中。