0

私はC/C ++コードに取り組んでいますが、それが行うことの1つは、文を含む行を置き換えることUNIX_CODE_TOKEN=です。system()を実行するために使用すると思いましたsed -i ...system()それにもかかわらず、私はそれがあまり効率的ではないことに気づきました。したがって、私は良い提案のためにあなたのところに来ました。

sed -i?を使用せずに実行するC / C ++組み込み関数はありsystem()ますか?fstreamC ++またはCで使用するように言わないでくださいFILE *(1行の特定の単語を置き換えたいのでfseekとlseekも役に立ちません)、置き換えを行う関数を作成しないことにしました。

ヘルプ/提案/返信をありがとう。

4

1 に答える 1

4

system() は通常、プロセスを分割する fork() 、子プロセスで /bin/sh (または何でも) を起動する exec() 、サブシェルが完了するまでブロックする親での waitpid() の観点から実装されます。あなたの場合、おそらくこれを自分で実装する必要がありますが、/bin/sh ではなく直接 exec() /bin/sed を使用します。

ただし、これを正しく実装するのはかなりの作業量です。system() がパフォーマンスの問題であるかどうかを判断するために、実際にプログラムのベンチマークとプロファイリングを行いましたか? sed が遅い可能性がはるかに高いです - 結局、遅いディスクにアクセスする必要があります - そしてあなたの調査は system() を誤って指しています。おそらく、最速の方法は実際にファイルをプログラムビット内で直接処理することであることに気付くでしょう。これは実際には全体的にそれほど速くはなりません.

あなたが解決しようとしているより高いレベルの問題は何ですか? ファイルを編集する必要が完全になくなる可能性は十分にあります。

于 2012-08-26T12:04:58.433 に答える