我有一个程序,每秒将数据写入 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 中使用就可以了。您也不需要将特定的管道硬编码到您自己的程序中,只需使用重定向。