我有一个使用共享内存,并与信号具有相同程序的其他实例通信保护它的程序与其他程序发生冲突。我担心我的共享内存和信号量的安全性。怎样避免使用共享内存和信号灯
我该如何确保我使用的信号量和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