我有一個使用共享內存,並與信號具有相同程序的其他實例通信保護它的程序與其他程序發生衝突。我擔心我的共享內存和信號量的安全性。怎樣避免使用共享內存和信號燈
我該如何確保我使用的信號量和shm不會被其他程序打開,否則會將其搞亂?有一種方法可以在單獨的用戶下使用自己的用戶組來運行該程序,並且保護共享對象並將其限制爲只能由該用戶和組訪問。這是我的問題的答案,還是有一些陷阱,可能在Windows上?
如果我必須在同一用戶下運行所有程序,或者某些程序以root身份運行(總是存在這樣的程序,是不是他們),有什麼方法可以保護它們嗎?
我開始爲所有希望一起通信的實例設置shm &信號量的默認「密鑰」。但可能有不同的計劃已經採取了'關鍵'。有沒有一些技術來解決這個問題?我正在考慮選擇一系列「鍵」(例如,鍵將是1000到2000範圍內的整數),如果程序無法獲取默認值的鍵,它會嘗試從範圍中獲取其他鍵。
我發現相關的問題here,但它並沒有說我的問題2和3,除了這個問題,我無法找到與SHM和信號衝突,保護什麼東西,好像是不在編寫程序時要特別考慮。
我的情況是我有一個程序想要與同一程序的其他實例進行通信。同一個程序的實例有多個「集合」,一個「集合」的程序一起通信,另一個集合的程序一起通信。他們通過信號量保護的共享內存進行通信。程序在各種* nix平臺和Windows上運行。他們應該24/7全天候運行並且應該是可靠和安全的,這就是我關心衝突的原因。
是的,因爲使用共享內存和信號量的函數調用不同,因此我需要針對不同平臺使用特定於操作系統的代碼部分,因爲它是必需的。 問題是 - 有什麼技巧來保護內存/信號量不被意外訪問的其他程序? – MiroJanosik 2010-12-17 10:06:39
在Windows上,您應該查看[SECURITY_ATTRIBUTES](http://msdn.microsoft.com/zh-cn/library/aa379560%28VS.85%29.aspx)。此結構用於[CreateSemaphore](http://msdn.microsoft.com/en-us/library/ms682438%28VS.85%29.aspx)和[CreateFileMapping](http://msdn.microsoft.com/ en-us/library/aa366537%28VS.85%29.aspx)(用於[共享內存](http://msdn.microsoft.com/en-us/library/aa366551%28VS.85%29.aspx) ) – Vlad 2010-12-17 10:13:46