0

popen がファイルのようにパイプを開いて読み取り/書き込みを許可することは理解していますが、fdopen と fputs/fgets の方が効率的ではないでしょうか?

4

2 に答える 2

2

開く

popen() 関数は、パイプを作成し、フォークし、シェルを呼び出すことによってプロセスを開きます

fgets

fgets() は、stream から最大で size 未満の 1 文字を読み取り、s が指すバッファーに格納します。

popenパイプを開き、fgetsデータを読み取ります。それらは異なることを行うため、一方が他方よりも「うまく」機能するわけではありません。popenパイプを開きたい場合は の方が良い、データを読みたい場合は の方が良いと言えると思いますがfgets、それはそれを押し進めています。

于 2012-11-16T05:21:06.807 に答える
2

popenのman ページ:パイプを作成し、フォークし、シェルを呼び出してプロセスを開きます。

fopenのman ページ: path が指す文字列と同じ名前のファイルを開き、それにストリームを関連付けます。

fgetsのman ページ: stream から最大で size 未満の 1 文字を読み取り、s が指すバッファーに格納します。

popenパイプを開くために使用され(通常、シェルコマンドのようなものを実行するために)、読み取りfopenに使用できるファイルを開くために使用されますfgets

したがってpopen、 とfgetsは、さまざまな目的に役立つさまざまな機能です。

于 2012-11-16T05:22:55.013 に答える