0

私は次のBashスクリプトを持っています:

cat | command1 | command2 | command3

コマンドは変更されません。

パフォーマンス上の理由から、コマンドを実行し、それに応じてパイプを作成および評価する小さなCプログラムに置き換えたいと思います。

Cでそれを行う方法はありますか?

4

2 に答える 2

5

他の人が言ったように、おそらくパフォーマンスに大きなメリットはありません。
実行するコマンドは、それらを接着するシェルスクリプトではなく、ほとんどの時間かかると想定するのが妥当です。したがって、接着が速くなっても、ほとんど何も変わりません。

そうは言っても、それを実行したい場合は、、、および関数を使用する必要fork()がありますpipe。複数のプロセスを提供します。一対のファイル記述子が得られます。一方に書き込んだものと、もう一方から読み取ることができます。 ファイル記述子番号を変更するために使用できます。パイプの片側を取得して、あるプロセスでファイル記述子1(stdout)にし、もう一方の側でファイル記述子0(stdin)にすることができます(通常のstdin、stdoutを閉じることを忘れないでください)。最初)。(またはそのバリアントの1つ)がプログラムの実行に使用されます。dup2()exec()
fork
pipedup2
exec

記入する詳細はたくさんあります。楽しんでください。

于 2013-02-17T07:50:07.013 に答える
2

これをほぼ実行する例を次に示します。

初期化の数ミリ秒だけで、処理自体にパフォーマンス上の利点はありません。明らかに、これを行っているコンテキストはわかりませんが、dash代わりに使用するだけbashで、1つの文字の変更からそれらのミリ秒の80%が得られた可能性があります。#!

于 2013-02-17T08:01:33.190 に答える