c - 如何保护Linux中进程间共享的内存

标签 c linux memory

在 Linux 或其他现代操作系统中,每个进程的内存都受到保护,因此一个进程中的野写不会导致任何其他进程崩溃。现在假设我们在进程 A 和进程 B 之间共享内存。现在假设,由于软错误,进程 A 无意中向该内存区域写入了一些内容。鉴于进程 A 和进程 B 都对该内存具有完全写入访问权限,是否有任何方法可以防止这种情况发生?

最佳答案

当您调用 shm_open 时您可以将 O_RDONLY 标志传递给模式参数。

或者您可以使用 mprotect将特定页面标记为(例如)只读。您需要两个进程之间的合作和信任才能执行此操作,B 无法说 A 不能使用 mprotect 写入它。

如果您真的想确保其他进程不会干扰,那么通过某种描述的管道或套接字进行通信可能是一个明智的想法。

您还可以使用 mmap 映射某物(例如在 /dev/shm 中?)文件权限使得无法写入两个进程之一,如果它们作为单独的 UID 运行。例如,如果您有 /dev/shm/myprocess 由用户生产者和组消费者拥有,并在使用该 UID 和 GID 运行的进程映射它之前将文件权限设置为 0640,那么您可以防止第二个从写入到它的过程。

关于c - 如何保护Linux中进程间共享的内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7216870/

相关文章:

c++ - 在vim中分屏执行C

c - C 中的 Shell 程序具有奇怪的 fork 行为

linux - 什么是 acpi_pm linux 时钟源用于什么硬件实现它?

linux - 软虚拟内存限制 (ulimit -v)

c - 从 C 中的字符串中去除空格和换行符

c - 实时了解 localtime() 与 localtime_r() 中的时区变化

c - 如何在不等待用户输入的情况下从 stdin 获取字符?

c++ - 32位小数浮点/ double 解析

memory - PhantomPinned 成员会使我的结构具有固定的内存地址吗?

c++ - 在 Windows 上检查 RAM 中的剩余空间?