私は次のBashスクリプトを持っています:
cat | command1 | command2 | command3
コマンドは変更されません。
パフォーマンス上の理由から、コマンドを実行し、それに応じてパイプを作成および評価する小さなCプログラムに置き換えたいと思います。
Cでそれを行う方法はありますか?
他の人が言ったように、おそらくパフォーマンスに大きなメリットはありません。
実行するコマンドは、それらを接着するシェルスクリプトではなく、ほとんどの時間かかると想定するのが妥当です。したがって、接着が速くなっても、ほとんど何も変わりません。
そうは言っても、それを実行したい場合は、、、および関数を使用する必要fork()
がありますpipe
。複数のプロセスを提供します。一対のファイル記述子が得られます。一方に書き込んだものと、もう一方から読み取ることができます。
ファイル記述子番号を変更するために使用できます。パイプの片側を取得して、あるプロセスでファイル記述子1(stdout)にし、もう一方の側でファイル記述子0(stdin)にすることができます(通常のstdin、stdoutを閉じることを忘れないでください)。最初)。(またはそのバリアントの1つ)がプログラムの実行に使用されます。dup2()
exec()
fork
pipe
dup2
exec
記入する詳細はたくさんあります。楽しんでください。
これをほぼ実行する例を次に示します。
初期化の数ミリ秒だけで、処理自体にパフォーマンス上の利点はありません。明らかに、これを行っているコンテキストはわかりませんが、dash
代わりに使用するだけbash
で、1つの文字の変更からそれらのミリ秒の80%が得られた可能性があります。#!