C 庫函數(shù) int setvbuf(FILE *stream, char *buffer, int mode, size_t size) 定義流 stream 應如何緩沖。
下面是 setvbuf() 函數(shù)的聲明。
int setvbuf(FILE *stream, char *buffer, int mode, size_t size)
模式 | 描述 |
---|---|
_IOFBF | 全緩沖:對于輸出,數(shù)據在緩沖填滿時被一次性寫入。對于輸入,緩沖會在請求輸入且緩沖為空時被填充。 |
_IOLBF | 行緩沖:對于輸出,數(shù)據在遇到換行符或者在緩沖填滿時被寫入,具體視情況而定。對于輸入,緩沖會在請求輸入且緩沖為空時被填充,直到遇到下一個換行符。 |
_IONBF | 無緩沖:不使用緩沖。每個 I/O 操作都被即時寫入。buffer 和 size 參數(shù)被忽略。 |
如果成功,則該函數(shù)返回 0,否則返回非零值。
下面的示例演示了 setvbuf() 函數(shù)的用法。
#include <stdio.h> int main() { char buff[1024]; memset( buff, '\0', sizeof( buff )); fprintf(stdout, "啟用全緩沖\n"); setvbuf(stdout, buff, _IOFBF, 1024); fprintf(stdout, "這里是 (cainiaoplus.com)\n"); fprintf(stdout, "該輸出將保存到 buff\n"); fflush( stdout ); fprintf(stdout, "這將在編程時出現(xiàn)\n"); fprintf(stdout, "最后休眠五秒鐘\n"); sleep(5); return(0); }
讓我們編譯并運行上面的程序,這將產生以下結果。在這里,程序把緩沖輸出保存到 buff,直到首次調用 fflush() 為止,然后開始緩沖輸出,最后休眠 5 秒鐘。它會在程序結束之前,發(fā)送剩余的輸出到 STDOUT。
啟用全緩沖 這里是 (cainiaoplus.com) 該輸出將保存到 buff 這將在編程時出現(xiàn) 最后休眠五秒鐘