我無法弄清楚如何在每3秒顯示的東西(如世界你好)。 我只在C編程中使用gcc編譯器在linux中編寫。 我們可以通過Ctrl + c來停止它。 我只是想用我的項目來操作最簡單最簡單的方法。顯示東西在每3秒
非常感謝你提前!
我無法弄清楚如何在每3秒顯示的東西(如世界你好)。 我只在C編程中使用gcc編譯器在linux中編寫。 我們可以通過Ctrl + c來停止它。 我只是想用我的項目來操作最簡單最簡單的方法。顯示東西在每3秒
非常感謝你提前!
您可能會遇到一個問題,即標準輸出通常會被緩衝,這意味着實現會批量輸出,直到方便寫入。如果你正在編寫出每三秒鐘(和sleep(3)
是做到這一點的好辦法),並沒有顯示出來每三秒鐘,可以嘗試在fflush(stdout);
或`fprintf中寫入標準錯誤輸出(錯誤,「東西\ N「);.
sleep(3);
sleep
函數使您的程序在返回前等待X秒。請注意,這是在兩次執行之間進行的,所以它不會每隔3秒精確地運行一次命令,但對於大多數目的來說足夠近。此外,一些平臺有usleep
,其中你代表微,這可以讓你更多的分辨率。請參閱手冊頁獲取更多信息。
感謝您的回覆。我們需要任何特殊的標題嗎? – Devyn 2010-01-04 18:57:55
'unistd.h':http://www.opengroup.org/onlinepubs/000095399/functions/sleep.html – 2010-01-04 18:59:58
通用的方法是編寫一個無限循環(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
的電話。
流的緩衝區類型可以使用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字節)後,所有輸出如何同時出現。
只有遠親,但我用所有的時間的技術是寫一個程序來顯示一些一次然後用/usr/bin/watch
重複它的每一個ñ秒。我以這種方式獲得更多的重用。
你救了我。必須使用fflush(stdout)來顯示每個更改。 – Devyn 2010-01-04 19:10:24
@Devyn,也許你應該接受這個答案呢? – 2010-01-04 19:13:59