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

それでは、2番目の端末(またはバックグラウンド)で実行してください。

yours < first.pipe | other_programs

または名前付きパイプを使用する場合

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

繰り返します:ほとんどの場合、名前付きパイプ(fifo)は実際には必要なく、|シェルで使用するだけです。また、特定のパイプを自分のプログラムにハードコードする必要はなく、リダイレクトを使用するだけです。

関連情報