fflush() - ファイルへのバッファーの書き込み

標準

標準/拡張機能 C/C++ 依存項目

ISO C
POSIX.1
XPG4
XPG4.2
C99
Single UNIX Specification、バージョン 3
Language Environment

両方  

形式

#include <stdio.h>

int fflush(FILE *stream);

#define _OPEN_SYS_UNLOCKED_EXT 1
#include <stdio.h>

int fflush_unlocked(FILE *stream);

機能説明

stream で指定されるストリームをフラッシュします。stream が NULL の場合は、すべてのオープン・ストリームをフラッ シュします。

fflush() 関数は、ungetc() 関数と ungetwc() 関数の影響を受けます。これらの関数を呼び出すと、fflush() は、文字がプッシュ・バックされる ときのファイル位置をバックアップするようになります。詳しくは、ungetc() および ungetwc() 関数をそれぞれ参照してください。必要に応じて _EDC_COMPAT 環境変数をオープン時に設定することができ、それにより、fflush() は、プッシュ・バックされたすべての文字を廃棄し、ファイル位置を、ungetc() または ungetwc() 関数呼び出しがはじめて発行 されたときの位置のままにします。

ungetwc() が 1 つのワイド char をテキスト・ストリームにプッシュした後で fflush() が使用されると、ungetwc() が発行されたときにファイルが 存在していた位置から 1 ワイド文字分だけ位置がバックアップされます。ワイド指向バイナリー・ストリームの場合は、ungetc バッファーでワイド文字を表すのに使用されるバイト数にもとづいて、位置がバックアップされます。このため、最初の位置でまったく読み取られなかったワイド指向バイナリー ・ストリームが宛先であるとき、文字に対して ungetwc() を使用 しようとすると、fflush() に対して未定義の動作の結果となります。 _EDC_COMPAT 環境変数でも ungetwc() の後の fflush() の動作が変更 されること、およびこの変数により、プッシュ・バックされたすべての ワイド char が廃棄され、位置は、ungetwc() が発行された位置のままになる ことに注目してください。_EDC_COMPAT 環境変数の詳細について は、「z/OS XL C/C++ プログラミング・ガイド」の『環境変数』を参照してください。

fflush() が失敗した場合、位置は、ungetc() または ungetwc() 関数 呼び出しが最初に発行されたときのファイル内の位置のままになります。すべての押し返された文字は廃棄されます。
注: ストリームをクローズするとき、またはストリームをクローズせずにプロ グラムが正常に終了したとき、システムはバッファーを自動的にフラッシュします。

バッファリング・モードとファイル・タイプは、出力データがフラッシュされるときに影響を与えます。 詳しくは、「z/OS XL C/C++ プログラミング・ガイド」の『C ストリームのバッファー方式』を参照してください。

stream は、fflush() 呼び出しのあと、オープンしたままに なっています。読み取り操作は、書き込み操作の直後または直前には不可能である ので、fflush() 関数を使用して、これら 2 つのモード間の切り替えを行う ことができます。fflush() 関数は、読み取りプログラムや同時書き込み/更新プログラム で動作するときにバッファーを最新表示するためにも使用できます。

fflush_unlocked() は、スレッド・セーフでないことを除いて、機能的に fflush() と 等価です。この関数をマルチスレッドのアプリケーション内で安全に使用できるのは、 flockfile() 関数または ftrylockfile() 関数のどちらかへの呼び出しが成功した後のように、 呼び出しスレッドが (FILE*) オブジェクトを所有している間に、この関数を呼び出す場合だけです。

fflush() 関数は、type=blocked を指定してオープンされたファイルには影響しません。

戻り値

正常にバッファーをフラッシュした場合、fflush() は 0 を戻します。

正常に実行されなかった場合、fflush() は EOF を戻します。すべてのオープン・ファイルをフラッシュ中に、あるファイルのフラッシュに 失敗すると、EOF を戻します。しかしフラッシュは、正常にフラッシュできる、その他のオープン・ファイル で継続されます。

CELEBF15
⁄* CELEBF15                                      

   This example flushes a stream buffer.                                        
   It tests for the returned value of 0 to see if the flushing was              
   successful.                                                                  
                                                                                
 *⁄                                                                             
#include <stdio.h>                                                              
                                                                                
int retval;                                                                     
int main(void)                                                                  
{                                                                               
   FILE *stream;                                                                
   stream = fopen("myfile.dat", "w");                                           
                                                                                
   retval=fflush(stream);                                                       
   printf("return value=%i",retval);                                            
}                                                                               

関連情報