C 庫函數– setvbuf()
描述
C庫函數int setvbuf(FILE *stream, char *buffer, int mode, size_t size)定義流stream應如何緩衝。
聲明
下面是setvbuf() 函數的聲明。
int setvbuf(FILE *stream, char *buffer, int mode, size_t size)
參數
- stream --這是指向FILE對象的指針,該FILE對象標識了一個打開的流。
- buffer --這是分配給用戶的緩衝。如果設置為NULL,該函數會自動分配一個指定大小的緩衝。
- mode --這指定了文件緩衝的模式:
模式 | 描述 |
---|---|
_IOFBF | 全缓冲:对于输出,数据在缓冲填满时被一次性写入。对于输入,缓冲会在请求输入且缓冲为空时被填充。 |
_IOLBF | 行缓冲:对于输出,数据在遇到换行符或者在缓冲填满时被写入,具体视情况而定。对于输入,缓冲会在请求输入且缓冲为空时被填充,直到遇到下一个换行符。 |
_IONBF | 无缓冲:不使用缓冲。每个 I/O 操作都被即时写入。buffer 和 size 参数被忽略。 |
- size --這是緩衝的大小,以字節為單位。
返回值
如果成功,則該函數返回0,否則返回非零值。
實例
下面的實例演示了setvbuf() 函數的用法。
#include <stdio.h> int main() { char buff[1024]; memset( buff, '\0', sizeof( buff )); fprintf(stdout, "启用全缓冲\n"); setvbuf(stdout, buff, _IOFBF, 1024); fprintf(stdout, "这里是 w3cschool.cc\n"); fprintf(stdout, "该输出将保存到 buff\n"); fflush( stdout ); fprintf(stdout, "这将在编程时出现\n"); fprintf(stdout, "最后休眠五秒钟\n"); sleep(5); return(0); }
讓我們編譯並運行上面的程序,這將產生以下結果。 在這裡,程序把緩衝輸出保存到buff ,直到首次調用fflush()為止,然後開始緩衝輸出,最後休眠5秒鐘。 它會在程序結束之前,發送剩餘的輸出到STDOUT。
启用全缓冲 这里是 w3cschool.cc 该输出将保存到 buff 这将在编程时出现 最后休眠五秒钟