[英]Safe values to be used as key in shmget
我正在使用shmget在Linux上的項目進程之間共享數據。
int shmget(key_t key, size_t size, int shmflg);
但是,任何其他程序也可以調用shmget,因此它可能導致鍵沖突(因為我使用常量作為調用shmget的鍵,我必須使用常量而不是生成的鍵,因為橫向進程是構建和運行的分別)。
什么應該是shmget中用作鍵的安全值?
沒有安全值,您(以及創建共享段的每個其他進程)都應使用IPC_EXCL
來確保沒有沖突。 但是,后者應確保其他程序不會開始寫入您的細分(除非它們寫得很糟糕)。
您可以嘗試在ftok()之外構建“私有”密鑰,但是,您知道它不安全。 如果您遇到某些問題,您將無法告訴您的程序這不是正確的密鑰。 還要記住:
只有
id
的低位8位才有意義。 如果這些位為0,則不指定ftok()的行為。
換句話說,不要在那里傳遞0
;)。
無論如何,你應該認真考慮建立一些溝通渠道。 服務器用id寫的單個文件就足夠了,然后由其他程序讀取。
從其他想法,您可以嘗試將服務器PID作為id
傳遞,如果其他進程至少可以獲得。 這可能會讓它更“安全”。
我建議您使用POSIX shm_open
(使用mmap
),它沒有ftok
存在的沖突問題,只要您沒有使用與其他軟件相同的命名區域。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.