2017-07-14 19 views
1

這裏是我的代碼:printf的選擇調用之前不會被調用,同時等待標準輸入

int main() 
{ 
    struct timeval tv; 
    fd_set fds; 
    char cmd[256]={}; 
    int second = 0, ret; 

    printf("Enter Command : "); 
    while (1) { 
     tv.tv_sec=1; 
     tv.tv_usec=0; 

     FD_ZERO(&fds); 

     FD_SET(STDIN_FILENO, &fds); 

     if ((ret = select(STDIN_FILENO+1, &fds, NULL, NULL, &tv)) < 0) { 
      printf("Select Failed: Exiting\n"); 
      break; 
     } 

     if (FD_ISSET(STDIN_FILENO, &fds)) 
     { 
      if (fgets(cmd, 256, stdin) != NULL) { 
       printf("Running Command - %s\n", cmd); 
       input_invoke_func(cmd); 
       printf("Enter Command : "); 
      } 
     } else { 
      second++; 
      //print_time(second); 
     } 
    } 
    return 0; 
} 

我看到「輸入命令:」字符串不打印,直到我提供任何STDIN輸入。請讓我知道這種行爲的原因!

謝謝。

+5

標準輸出通常是行緩衝的,並且在'printf();'中沒有''\ n''。在'printf()'後面添加一個和/或調用'fflush(stdout);'' –

+3

您需要刷新標準輸出 –

回答

2

輸入和輸出緩衝在標準庫中。這意味着「打印」或寫入文件的數據不會立即發送到操作系統(從而傳送到屏幕或文件)。這樣做是因爲實際發送數據有一定的開銷,並且在較大批量中執行此操作效率更高。執行這一數據被髮送時,一個可以調用fflush

printf("Enter Command : "); 
fflush(stdout); 

注意:當標準輸出被連接到一個終端沖洗自動發生上換行符。

+0

謝謝..自從我使用fflush已經很久了。這就像一個很好的提醒:) –