fflush -
ストリームの内容を強制的に出力(フラッシュ)する
#include <stdio.h>
int fflush(FILE *stream);
出力ストリームに関しては、
fflush()
は、ユーザー空間でバッファーリングされているすべてのデータを
指定された出力に書き出す
(フラッシュする)、
もしくはストリーム
stream
の下位にある書き込み関数を用いてこのストリームを更新する。
seek
可能なファイルに関連付けられた入力ストリーム
(ディスクファイルは seek
可能だが、
パイプや端末は seek
できない)
に関しては、
fflush()
は、対応するファイルから取得されたが、アプリケーションからは
読み出されていないバッファーデータを全て破棄する。
ストリームは開いた状態のままであり、
この関数によって何の影響も受けない。
stream 引数が NULL ならば、
fflush() は開いている
すべての出力ストリームをフラッシュする。
これらの処理をロックせずに行いたいときは、
unlocked_stdio(3)
を参照のこと。
成功すると 0
が返される。
その他の場合には
EOF
が返され、
errno
が、エラーに対応した値に設定される。
- EBADF
-
stream
は開いているストリームではない。
あるいはストリームは書き込み用ではない。
fflush() 関数は
write(2)
に関して規定されているエラーで失敗することもある。
この場合
errno
もその値に設定される。
この節で使用されている用語の説明については、
attributes(7) を参照。
インターフェース |
属性 |
値 |
fflush() |
Thread safety |
MT-Safe |
C89, C99, POSIX.1-2001, POSIX.1-2008.
POSIX.1-2001
では入力ストリームのフラッシュの動作は規定されていなかったが、
POSIX.1-2008
では規定されている。
fflush() は、 C
ライブラリが与えているユーザー空間のバッファーしかフラッシュしない。
データが物理的にディスクに保存されることを保証したければ、
カーネルバッファーもフラッシュしなければならない。
これには例えば
sync(2)
や
fsync(2) を用いる。
fsync(2),
sync(2),
write(2),
fclose(3),
fileno(3),
fopen(3),
setbuf(3),
unlocked_stdio(3)
この man ページは Linux
man-pages
プロジェクトのリリース
5.10
の一部である。プロジェクトの説明とバグ報告に関する情報は
https://www.kernel.org/doc/man-pages/
に書かれている。