2010-01-04 78 views
3

我無法弄清楚如何在每3秒顯示的東西(如世界你好)。 我只在C編程中使用gcc編譯器在linux中編寫。 我們可以通過Ctrl + c來停止它。 我只是想用我的項目來操作最簡單最簡單的方法。顯示東西在每3秒

非常感謝你提前!

回答

6

您可能會遇到一個問題,即標準輸出通常會被緩衝,這意味着實現會批量輸出,直到方便寫入。如果你正在編寫出每三秒鐘(和sleep(3)是做到這一點的好辦法),並沒有顯示出來每三秒鐘,可以嘗試在fflush(stdout);或`fprintf中寫入標準錯誤輸出(錯誤,「東西\ N「);.

+1

你救了我。必須使用fflush(stdout)來顯示每個更改。 – Devyn 2010-01-04 19:10:24

+1

@Devyn,也許你應該接受這個答案呢? – 2010-01-04 19:13:59

4
sleep(3); 

sleep函數使您的程序在返回前等待X秒。請注意,這是在兩次執行之間進行的,所以它不會每隔3秒精確地運行一次命令,但對於大多數目的來說足夠近。此外,一些平臺有usleep,其中你代表微,這可以讓你更多的分辨率。請參閱手冊頁獲取更多信息。

+0

感謝您的回覆。我們需要任何特殊的標題嗎? – Devyn 2010-01-04 18:57:55

+2

'unistd.h':http://www.opengroup.org/onlinepubs/000095399/functions/sleep.html – 2010-01-04 18:59:58

9
while(1) { 
    printf("something\n"); 
    sleep(3); 
} 
+0

我剛剛閃爍了光標。什麼都沒有出現!我該怎麼辦? – Devyn 2010-01-04 18:58:55

+9

@Devyn,等待三秒鐘。 – 2010-01-04 19:00:12

+0

那麼我實際上等了超過10秒。這是我的完整代碼。 的#include 的#include INT主(無效) { 而(1){printf的 ( 「東西\ n」); sleep(3); } } – Devyn 2010-01-04 19:04:15

1

通用的方法是編寫一個無限循環(while (1) { ... })和暫停程序執行每個刻度。

要暫停,您可以使用從標準庫sleep功能。或者sleep,它只能指定以秒爲單位的休眠時間,您可以使用允許更高精度的nanosleep函數。

#include <stdio.h> 
#include <time.h> 

int main() 
{ 
    struct timespec t = { 3/*seconds*/, 0/*nanoseconds*/}; 
    while (1){ 
    printf("Wait three seconds and...\n"); 
    nanosleep(&t,NULL); 
    fflush(stdout); //see below 
    } 
} 

需要注意的是,除非你添加一個換行符(\n)給你outpu字符串,你很可能會看到什麼,因爲該字符串將先打印到緩衝區,該緩衝區是偶爾刷新到終端(通常在打印換行符時發生,但即使這樣也不能保證每個系統都有刷新)。這就是爲什麼最好添加fflush的電話。

0

流的緩衝區類型可以使用setvbuf用來()函數來控制。默認情況下,引用文件的流是塊緩衝的,terinals是行緩衝(stdout)或無緩衝(stderr)。

#include <stdio.h> 

int main(int argc, char* argv[]) { 
    setvbuf(stdout, NULL, _IONBF, 0); 
    while (1) { 
     printf("Wait 3 seconds... "); 
     sleep(3); 
    } 
} 

注意,有在printf中沒有\ n。如果您註釋掉setvbuf()調用,您可以看到在填充緩衝區(通常爲1024字節)後,所有輸出如何同時出現。

1

只有遠親,但我用所有的時間的技術是寫一個程序來顯示一些一次然後用/usr/bin/watch重複它的每一個ñ秒。我以這種方式獲得更多的重用。