1

C の低レベル関数のトピックを開始したばかりで、この課題の一部でユーザー入力を求めなければなりません。通常は printf() と scanf() を使用しますが、この割り当てでは、read()、write()、open()、close()、および lseek() のみを使用できます。

私の質問は、画面に印刷した後、キーボードからの入力をどのように読み取るかということです。readを使用する必要があることは理解していますが、ファイル記述子は STDIN_FILENO になりますが、サイズのカウントはどのように決定すればよいでしょうか? また、ユーザーが入力した内容をどのように追跡しますか? そのためだけに char 配列を作成する必要がありますか?

また、誰かが低レベル関数を使ったプログラミングの良い読み物やチュートリアルを参照できれば、大いに役立ちます。

4

2 に答える 2

2

文字ごとに読み取ると、パフォーマンスが低下します。システムコールは高価です。ほとんどの場合、何らかの種類のバッファ (スタック上に割り当てられた静的メモリ) が必要です。サイズ (特定のサイズを超えると) はそれほど重要ではありません。

fd 0 がクック モードの端末である場合、read の呼び出しごとに行が表示されます (通常、バッファー全体を埋めることはできません)。認識することが重要なのは、N バイトの読み取り要求が N バイトを返す必要はなく、N バイト未満の戻りが IO エラーを意味する必要がないことです。ディスクベースのファイルの場合、バッファーのサイズに対する読み取り要求は、完全にいっぱいになる傾向があります。

これについては、Richard Stevens による Advanced Programming in the Unix Env​​ironment が良い本です。それからもちろん、システム コールのマニュアル ページ。

于 2015-09-26T01:13:59.340 に答える