標準/拡張機能 | 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 がゼロ以外である場合、エラーが発生したと想定されます。
/* 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