IPC通过写入文件?

问题描述 投票:2回答:2

我对操作系统中的进程间通信有疑问。

两个进程可以通过打开同一个文件(也就是说在两个进程之前创建,因此两个进程都有文件处理程序)然后通过写入此文件进行通信来相互通信?

如果是,这种方法是什么?我听说IPC的两种主要方式是共享内存和消息传递。其中哪一种,这种方法属于哪种?原因是,我不确定它是否属于共享内存,因为此文件未映射到任何这些进程的地址空间。而且,根据我的理解,在共享内存中,共享内存区域是两个进程的地址空间的一部分。

假设进程以某种预先约定的协议/格式写入文件,因此在知道其他进程写入的位置以及何时等时都没有问题。这个假设仅仅是为了理解。但在现实世界中,这可能过于严格,无法保持等等。

如果不是,这种情况有什么问题?是否如果2个不同的进程打开同一个文件,那么第1个进程所做的更改不会刷新到持久存储中,供其他人查看,直到进程终止为止?或者是其他东西?

来自Windows和Linux的任何真实示例也应该是有用的。

谢谢,

process operating-system ipc shared-memory data-transfer
2个回答
2
投票

使用文件是一种共享内存。不是在RAM中分配公共内存缓冲区,而是使用公共文件。

为了成功地管理通信,需要针对文件中的不同范围的某种锁定机制。这可以是锁定由文件系统(至少在Windows上可用)或全局操作系统互斥锁提供的范围。

磁盘存储用于进程间通信的一个真实场景是群集中使用的quorom磁盘。它是可由所有群集节点通过SAN访问的常见磁盘资源,用于存储群集的配置。


2
投票

posix系统调用mmap将文件映射到虚拟内存。如果映射在两个进程之间共享,则在一个进程中对该区域的写入将影响其他进程。现在向您提问,是的,从底层文件读取或写入的过程并不总是会看到与映射它的进程相同的数据,因为文件段被复制到RAM中并定期刷新到磁盘。虽然我相信你可以强制与msync系统调用同步。请阅读mmap()。它有许多其他内存共享选项。

© www.soinside.com 2019 - 2024. All rights reserved.