-
函數名:fflush - 刷新一個流
-
概要:
#include <stdio.h> int fflush(FILE *stream);
-
描述:
對於輸出流,fflush()通過流的底層write(2)函數對所有用戶空間緩存的數據進行強制寫操作,寫到所給定的輸出或更新流(如stdout、stderr)。
對於與可查找文件相關的輸入流(例如,磁盤文件,但不是管道或終端),fflush()丟棄從底層文件中已獲取的、但應用程序沒有使用的任何緩衝數據。
流的打開狀態不受影響。
如果流參數爲NULL,那麼fflush()將刷新所有打開的輸出流。
有關非鎖定對等項,請參見unlocked_stdio(3)。 -
返回值:
成功完成後返回0。否則將返回EOF(-1)並設置errno來指示錯誤。 -
ERRORS
EBADF :stream不是一個打開的流,或者不是爲了寫打開的。
函數fflush也可能失敗並置 errno 爲 write(2) 指定的任何錯誤。 -
注意:
fflush()只刷新C庫提供的用戶空間緩衝區。爲了確保數據物理存儲在磁盤上,內核緩衝區也必須被刷新,例如,使用sync(2)或fsync(2)。 -
補充:
struct _IO_FILE { int _flags; /* High-order word is _IO_MAGIC; rest is flags. */ /* The following pointers correspond to the C++ streambuf protocol. */ char *_IO_read_ptr; /* Current read pointer */ char *_IO_read_end; /* End of get area. */ char *_IO_read_base; /* Start of putback+get area. */ char *_IO_write_base; /* Start of put area. */ char *_IO_write_ptr; /* Current put pointer. */ char *_IO_write_end; /* End of put area. */ char *_IO_buf_base; /* Start of reserve area. */ char *_IO_buf_end; /* End of reserve area. */ /* The following fields are used to support backing up and undo. */ char *_IO_save_base; /* Pointer to start of non-current get area. */ char *_IO_backup_base; /* Pointer to first valid character of backup area */ char *_IO_save_end; /* Pointer to end of non-current get area. */ struct _IO_marker *_markers; struct _IO_FILE *_chain; int _fileno; int _flags2; __off_t _old_offset; /* This used to be _offset but it's too small. */ /* 1+column number of pbase(); 0 is unknown. */ unsigned short _cur_column; signed char _vtable_offset; char _shortbuf[1]; _IO_lock_t *_lock; #ifdef _IO_USE_OLD_IO_FILE }; typedef struct _IO_FILE FILE;
Linux -- fflush函數
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.