printf函數與緩沖區
printf函數是一個行緩沖函數,先將內容寫到緩沖區,滿足一定條件后,才會將內容寫入對應的文件或流中。
基本條件如下:
1.緩沖區填滿 2.寫入的字符中有‘\n’ '\r' 3.調用fflush或stdout手動刷新緩沖區 4.調用scanf等要從緩沖區中讀取數據時,也會將緩沖區內的數據刷新
5.程序結束時
有以下示例1驗證:
1 #include <stdio.h> 2 #include <stdlib.h> 3 4 /*argc:命令行輸入參數個數,argv:命令行參數 5 *argv為字符指針數組,argv[i]為指向第i個命令行參數內容的指針 6 */ 7 int main(int argc, char **argv){ 8 int i; 9 char a='a'; 10 if(argc != 2) //命令行參數為2,否則出錯 11 { 12 printf("Usage:%s Number\n",argv[0]); 13 return 0; 14 } 15 16 for(i=0;i<atoi(argv[1]);i++) //atoi:字符轉化為整數 17 { 18 printf("%c",a); 19 } 20 21 while(1); //讓程序一直運行 22 }
運行結果:
說明linux下,printf緩沖區大小為1024字節。while(1)使程序一直運行,當緩沖區未滿時,不會輸出打印。
示例2:
1 #include <stdio.h> 2 3 int main() 4 { 5 int i; 6 for(i=0; i<10; i++) 7 { 8 printf("a"); 9 fflush(stdout); //參數為文件指針 10 } 11 while(1); 12 return 0; 13 }
沒進行流刷新之前
流刷新fflush之后