我有一个关于操作系统中进程间通信的问题。
两个进程是否可以通过打开同一个文件(据说是在两个进程之前创建的,所以两个进程都有文件处理程序)然后通过写入该文件进行通信来相互通信?
如果是,这个方法属于什么?我听说 IPC 的两种主要方式是共享内存和消息传递。这个方法属于哪一个? 原因是,我不确定它是否属于共享内存,因为这个文件没有映射到任何这些进程的地址空间。而且,根据我的理解,在共享内存中,共享内存区域是两个进程的地址空间的一部分。
假设进程以某种预先商定的协议(protocol)/格式写入文件,因此双方都知道其他进程写入的位置和时间等没有问题。这个假设只是为了理解。但在现实世界中,这可能过于严格而无法成立等等。
如果不是,这个场景有什么问题?是不是如果两个不同的进程打开同一个文件,那么在进程终止之前,第一个进程所做的更改不会刷新到持久存储中供其他人查看?还是别的?
任何来自 Windows 和 Linux 的真实示例也应该有用。
谢谢,
最佳答案
使用文件是一种共享内存。不是在 RAM 中分配一个公共(public)内存缓冲区,而是使用一个公共(public)文件。
为了成功地管理通信,需要对文件中的不同范围使用某种锁定机制。这可能是锁定文件系统提供的范围(至少在 Windows 上可用)或全局操作系统互斥锁。
磁盘存储用于进程间通信的一个真实场景是集群中使用的仲裁磁盘。它是一个公共(public)磁盘资源,所有集群节点都可以通过 SAN 访问它,用于存储集群的配置。
关于process - IPC 通过写入文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6241398/