-6

私はシステムコール "write"に遭遇しました。次に、 "putchar"と "write"を比較しようとしました。今、私は上記のコード行と混同しています。どちらが良いですか、ch = ' n'; write(1、&ch、1);またはputchar( ' n');

+3

'write'と' putchar'のマニュアルページを見ましたか?混乱しているのは何ですか? – lurker

+0

私はマニュアルを見ました。私はwriteがシステムコールで、putcharはライブラリ関数であることを知っています。私は、効率性とメモリ使用の面で、互いの優しさという点で混乱しています。すなわち「putchar」の内部アーキテクチャは何ですか? –

+0

私はあなたが混乱しているものを尋ねましたが、あなたは言っていませんでした。 – lurker

答えて

2

putcharはライブラリ関数です。 stdoutに文字を書き込むためにwriteシステムコールを呼び出します。

システムコールに何度もアクセスすると、システムのパフォーマンスが低下します。

したがって、ライブラリ関数は実装されています。

ライブラリは書き込み用に機能し、バッファを割り当てます。バッファが一杯になるかフラッシュされると、writeシステムコールが呼び出されて内容がstdoutに書き込まれます。

システムのパフォーマンスを向上させるには、ライブラリ関数(putchar)を使用する必要があります。

出力をすぐに書き込む必要があるかどうかは、書き込みシステムコールを使用することができます。

+0

いくつかの改善が可能です: 'write'は' write'システムコールをラップすることによって通常実装される[ライブラリ関数](http://pubs.opengroup.org/onlinepubs/9699919799/functions/write.html)です。多分そうではないかもしれない。 'putchar'は直接' write'システムコールを呼び出すかもしれないし、しないかもしれません。代わりに 'write'関数を呼び出すかもしれません。 *優れたシステムパフォーマンスが必要な場合は、ライブラリ関数を使用する必要があります。*おそらく。それは広すぎる一般化です。 *あなたはすぐに出力を書く必要があれば、システムコールを書くことができます。*あるいは、 'stderr'を' fputc'に 'STDIO'を使うことができます。 –

関連する問題