linux fflush函数,fflush - wwliu的个人页面 - OSCHINA - 中文开源技术交流社区
概述
函數名: fflush
功 能: 清除文件緩沖區,文件以寫方式打開時將緩沖區內容寫入文件
頭文件: #include
原型:int fflush(FILE *stream)
#include
#include
#include
#include
void flush(FILE *stream);
int main(void)
{
FILE *stream;
char msg[] = "This is a test";
/* create a file */
stream = fopen("DUMMY.FIL", "w");
/* write some data to the file */
fwrite(msg, strlen(msg), 1, stream);
clrscr();
printf("Press any key to flush DUMMY.FIL:");
getch();
/* flush the data to DUMMY.FIL without\
closing it */
flush(stream);
printf("\nFile was flushed, Press any key\to quit:");
getch();
return 0;
}
void flush(FILE *stream)
{
int duphandle;
/* flush the stream's internal buffer */
fflush(stream);
/* make a duplicate file handle */
duphandle = dup(fileno(stream));
/* close the duplicate handle to flush the DOS buffer */
close(duphandle);
}
返回值
fflush 的返回值類型是int類型,那么這個int類型具體的返回是什么呢?
如果成功刷新,fflush返回0。指定的流沒有緩沖區或者只讀打開時也返回0值。返回EOF指出一個錯誤。
注意:如果fflush返回EOF,數據可能由于寫錯誤已經丟失。當設置一個重要錯誤處理器時,最安全的是用setvbuf函數關閉緩沖或者使用低級I/0例程,如open、close和write來代替流I/O函數。
其他用法
fflush(stdin)刷新標準輸入緩沖區,把輸入緩沖區里的東西丟棄[
非標準
]
fflush(stdout)刷新標準輸出緩沖區,把輸出緩沖區里的東西打印到標準輸出設備上
注意事項
C和C++的標準里從來沒有定義過 fflush(stdin)。也許有人會說:“可是我用 fflush(stdin) 解決了這個問題,你怎么能說是錯的呢?”的確,某些
編譯器
(如VC6)支持用 fflush(stdin) 來清空輸入緩沖,但是并非所有編譯器都要支持這個功能(linux下的gcc就不支持,經我的GCC4.6.2測試),因為標準中根本沒有定義 fflush(stdin)。
MSDN 文檔里也清楚地寫著:
fflush on input stream is an extension to the C standard (fflush 操作輸入流是對C標準的擴充)。
以下是 C99 對 fflush 函數的定義:
int fflush(FILE *stream);
如果stream指向輸出流或者更新流(update stream),并且這個更新流最近執行的操作不是輸入,那么fflush函數將把任何未被寫入的數據寫入stream指向的文件(如標準輸出文件stdout)。否則,fflush函數的行為是不確定的。fflush(NULL)清空所有輸出流和上面提到的更新流。如果發生寫錯誤,fflush函數會給那些流打上錯誤標記,并且返回EOF,否則返回0。
由此可知,如果 stream 指向輸入流(如 stdin),那么 fflush 函數的行為是不確定的。故而使用 fflush(stdin) 是不正確的。
總結
以上是生活随笔為你收集整理的linux fflush函数,fflush - wwliu的个人页面 - OSCHINA - 中文开源技术交流社区的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux的日志系统,Linux上的日志
- 下一篇: linux终端怎样ise,Linux下I