簡體   English   中英

在shmget中用作鍵的安全值

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM