【问题标题】:Interprocess Communication via file通过文件进行进程间通信
【发布时间】:2012-06-19 05:14:32
【问题描述】:

当我在 Linux 中的某些任意位置(即echo > /tmp/file)回显到文件时,一些正在运行的进程会响应。这是通过文件管道的 IPC 吗?

这是否意味着正在运行的进程总是打开要读取的文件?但是,既然文件流被自己的进程锁定,那么如何写入文件呢?

【问题讨论】:

  • 一些正在运行的进程响应——哪些响应,以及如何响应?运行进程总是打开文件——哪个文件?文件流被锁定——谁说的?
  • 我的意思是一般的运行进程。如果我打开一个文件,就有可能被锁定。例如,打开的文件不可能更改其内容,因为其他一些进程正在使用它。普通计算机用户在尝试删除或修改文件时总是会收到此消息。

标签: linux process ipc


【解决方案1】:

如果你想使用一个文件与另一个进程通信,你应该看看man fifo

我将在这里只报告第一行:

NAME
       fifo - first-in first-out special file, named pipe

DESCRIPTION
       A FIFO special file (a named pipe) is similar to a pipe, except that it
       is accessed as part of the file system.  It can be opened  by  multiple
       processes  for  reading or writing.  When processes are exchanging data
       via the FIFO, the kernel passes all data internally without writing  it
       to the file system.  Thus, the FIFO special file has no contents on the
       file system; the file system entry merely serves as a  reference  point
       so that processes can access the pipe using a name in the file system.

我想这就是你需要的。

只需将其视为缓冲区。必须打开它以供不同进程读取和写入。正在读取的进程将被阻塞,直到写入进程不对其进行写入。当写入过程完成写入时,关闭文件,这是读取过程开始清空缓冲区的绿灯。它是一个 FIFO,因此写入的第一行将是读取的第一行。然后写入过程可以再次打开它并重新开始。

您可以使用mkfifo 创建一个 FIFO。看看man mkfifo

【讨论】:

  • 这意味着,文件不是真正的文件,而只是文件系统中可见的管道(由某些进程拥有)?在较低的层次上,这是否意味着文件只是对一块内存的引用,当这块内存有一些数据到达时,它会被拥有这块内存的进程读取。命名管道只是用于人类交互,不是吗?
  • 添加了一个简短的解释。但是我没有得到关于人机交互的部分……我们不是在说软件吗??? :P
  • 好吧,我们得到了命名管道,我们可以手动写入文件,即输入echo foo > /tmp/file,所以我认为它包括人机交互。
  • 当然可以。一旦你有了它,你可以用你能想象的任何方式在那里写。
猜你喜欢
  • 2017-09-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-22
  • 1970-01-01
相关资源
最近更新 更多