__fpurge() — ストリーム内の保留データの破棄

標準

標準/拡張機能 C/C++ 依存項目
Language Environment 両方 なし

形式

#include <stdio.h>
#include <stdio_ext.h>

void __fpurge(FILE *stream);

#define _OPEN_SYS_UNLOCKEKD 1
#include <stdio.h>
#include <stdio_ext.h>

void __fpurge_unlocked(FILE *stream);

機能説明

_fpurge() 関数は、ストリーム内の保留データを破棄するよう要求します。

__fpurge() の呼び出し後、ストリームが現在読み取り中の場合、システムから読み取られたものの、まだアプリケーションに提示されていないデータは破棄されます。同様に、ungetc() を使用してストリームにプッシュ・バックされたデータも破棄されます。

__fpurge() の呼び出し後、ストリームが現在書き込み中の場合、アプリケーションが書き込みを要求したものの、まだ出力装置にフラッシュされていないデータは破棄されます。__fpurge() の呼び出し後にバッファーに書き込まれるデータは、fflush() 経由で明示的に、またはバッファーがいっぱいになったときに暗黙的に、破棄されたデータが最初に配置される予定だったブロックに書き出されます。

__fpurge_unlocked() 関数は、スレッド・セーフでないことを除いて、__fpurge() 関数と同等です。この関数は、呼び出し側のスレッドが (FILE *) オブジェクトを所有している間 (flockfile() または ftrylockfile() 関数の呼び出しが正常に実行された後など) に呼び出すと、マルチスレッド・アプリケーションでも安全に使用できます。

使用上の注意

__fpurge() 関数は、UNIX ファイルに対してのみ呼び出すことができます。これ以外のタイプのファイルに対してこの機能を呼び出しても、バッファー内の保留データは廃棄されません。この関数はゼロ以外の値を戻し、その結果、errno がゼロ以外の値の値に設定されます。

戻り値

_fpurge() 関数は、値を戻しません。

エラー状態を検査するアプリケーションは、errno を 0 に設定し、__fpurge() を呼び出してから、errno を検査する必要があります。errno がゼロ以外である場合、エラーが発生したと想定されます。

エラー・コード
説明
EBADF
stream によって指定されたストリームは無効です。

CELEBF86
/* CELEBF86

   This example purges pending data in the I/O buffer.

*/

#include <stdio.h>
#include <errno.h>
#include <stdio_ext.h>

void main(int argc,char** argv){
   char *bufflush="data will be written into file";
   char *bufpurge="data will be not written into file";
   FILE *fp=fopen("./myfile","a");
   if(NULL==fp){
      perror("failed to open file¥n");
      exit(0);
   }
   fwrite(bufflush,strlen(bufflush),1,fp);
   fflush(fp);
   fwrite(bufpurge,strlen(bufpurge),1,fp);
   errno=0;
   __fpurge(fp);
   if(errno!=0)
      perror("call __fpurge() failed¥n");
   fclose(fp);
}
出力:
The file "myfile" contains the text - data will be written into file

関連情報