毎秒、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
それでは、2番目の端末(またはバックグラウンド)で実行してください。
yours < first.pipe | other_programs
または名前付きパイプを使用する場合
mknod second.pipe
yours < first.pipe > second.pipe
other_prgrams < second.pipe
繰り返します:ほとんどの場合、名前付きパイプ(fifo)は実際には必要なく、|
シェルで使用するだけです。また、特定のパイプを自分のプログラムにハードコードする必要はなく、リダイレクトを使用するだけです。