当/而不是写入 FIFO 时运行程序?

当/而不是写入 FIFO 时运行程序?

我有一个程序,每秒将数据写入 FIFO。现在我想更改其中一些数据并将其写入另一个 FIFO。

最好的方法是什么?我可以以某种方式将其直接传送到我的程序吗(我无法控制原始程序/源代码)?或者我是否必须创建一个在后台运行并不断轮询 FIFO 以获取新输入的程序?

答案1

推荐的方式是这样的:

修改程序的示例yours.c(不执行任何操作):

#include <stdio.h>

int main (int argc, char argv[])
{
  char buf[1024];
  int n;

  do {
    n = fread(buf, sizeof(char), sizeof(buf), stdin);
    fwrite (buf, sizeof(char), n, stdout);
  } while (n > 0);
}

原始程序的设置:

mknod first.pipe
original_program first.pipe

现在在第二个终端中运行(或在后台)

yours < first.pipe | other_programs

或者,如果您想使用命名管道

mknod second.pipe
yours < first.pipe > second.pipe
other_prgrams < second.pipe

重复一遍:在大多数情况下,您实际上并不需要命名管道 (fifo),|在 shell 中使用就可以了。您也不需要将特定的管道硬编码到您自己的程序中,只需使用重定向。

相关内容