- ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:fflush()、setbuf()について)
C言語のfflush()とsetbuf()について
このQ&Aのポイント
- C言語のfflush関数は、バッファに格納されているデータを吐き出す機能を持っています。
- fflush(stdin)やfflush(stdout)と記述すると、それぞれ入力バッファや出力バッファをフラッシュすることができます。
- setbuf関数は、出力バッファをユーザが指定したバッファに設定する機能を持っています。setbuf(stdout, buf)やsetbuf(stdin, buf)と記述することで、指定したバッファを使用するように設定することができます。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
> (1)fflush(stdin),fflush(stdout)とそれぞれ記述するとどのような動作をするのか。 fflush(stdin)とすると動作が未定義になります。したがって、何がおきるか分かりません。 fflush(stdout)の場合は、printf等で出力したけれども、まだバッファにたまっている文字が実際の装置(コンソールやファイルなど)に出力されます。 > (2)データをフラッシュしたいときとは、具体的にどんなときか。(scanfなどで続けてデータの入力を行うこと以外に) 例えば、相手と対話的にやり取りを行う必要がある場合などです。シリアルポート等で通信を行う場合はもちろん、次のようなケースも考えられます。 fputs("入力> ", stdout); fgets(str, sizeof(str), stdin); 上の例では、"入力> "がコンソールに出力される前にfgetsが入力を求めてしまうかもしれません。そのため、fgetsの前にfflush(stdout);を挿入することで、入力を求める前に"入力> "が確実に出力されるようになります。 なお、「scanfなどで続けてデータの入力を行うこと」に対しては、fflushは何の役にも立ちません。 > (1)setbuf(stdout,buf)、setbuf(stdin,buf)とそれぞれ記述するとどのような動作をするのか。 stdoutまたはstdinが管理するバッファをbufに設定し、フルバッファリングを行います。デフォルトでは、stdoutやstdinがどんなバッファリングを行うかは環境に依存します。
お礼
お礼が遅くなってしまってすいません。 おかげさまで理解が深まりました。 ありがとうございました。