2010-01-04 4 views
3

3 초마다 (hello world와 같은) 표시 방법을 알아낼 수 없습니다. 리눅스에서 gcc 컴파일러로 C 프로그래밍 만하고 있습니다. Ctrl + c로 중지 할 수 있습니다. 난 내 프로젝트로 코드를 조작하는 가장 단순하고 쉬운 방법이 필요하다.3 초마다 무엇인가 표시

미리 감사드립니다.

답변

6

당신은 그 표준 출력에 문제로 실행할 수는 일반적으로 구현 배치 최대 출력 편리 때까지 그것을 작성하는 것을 의미한다 버퍼링된다. 3 초마다 (그리고 sleep(3)이 좋은 방법이다.) 3 초마다 나타나지 않는다면, fflush(stdout);을 입력하거나`fprintf (stderr, something) 엔");.

+1

나를 구하십시오. 모든 변경 사항을 표시하려면 fflush (stdout)를 사용해야합니다. – Devyn

+1

@Devyn, 아마도이 대답을 대신 받아 들여야합니까? –

4
sleep(3); 

sleep 함수는 프로그램이 돌아 오기 전에 X 초 동안 기다립니다. 이 명령은 실행 사이에 있으므로 3 초마다 정확하게 명령을 실행하지는 않지만 대부분의 목적에 충분히 근접합니다. 또한 일부 플랫폼은 usleep입니다. 여기서 u는 더 많은 해상도를 얻을 수있는 마이크로를 의미합니다. 자세한 내용은 설명서 페이지를 참조하십시오.

+0

답장을 보내 주셔서 감사합니다. 우리는 특별한 헤더가 필요합니까? – Devyn

+2

'unistd.h' : http://www.opengroup.org/onlinepubs/000095399/functions/sleep.html –

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

커서가 깜박입니다. 아무것도 나타나지 않는다! 어떻게해야합니까? – Devyn

+9

@Devyn, 3 초 기다리십시오. –

+0

글쎄 실제로 10 초 이상 기다렸습니다.여기 내 완전한 코드가 있습니다. #INCLUDE #INCLUDE INT 본체 (공극) { 동안 (1) { 의 printf ("무언가 \ 없음"); sleep (3); } } – Devyn

1

일반적인 접근법은 무한 루프 (while (1) { ... })를 작성하고 매틱마다 프로그램 실행을 일시 중지하는 것입니다.

일시 중지하려면 sleep 함수를 표준 라이브러리에서 사용할 수 있습니다. 수면 시간을 지정할 수있는 sleep 대신에 nanosleep 함수를 사용하면 더 나은 정밀도를 얻을 수 있습니다. 당신은 당신이 outpu 문자열에 개행 문자 (\n)을 추가하지 않는 문자열이 먼저 버퍼에 인쇄하고 버퍼가 가끔 입니다 때문에, 당신이 가장 가능성이, 아무것도 볼 것

#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 
    } 
} 

주가에를 플러시 터미널 (일반적으로 개행을 인쇄 할 때 발생하지만 모든 시스템에서 플러시를 보장 할 수는 없습니다). 그렇기 때문에 fflush 전화를 추가하는 것이 좋습니다.

0

setvbuf() 기능을 사용하여 스트림의 버퍼 유형을 제어 할 수 있습니다. 기본적으로 파일을 참조하는 스트림은 블록 버퍼이며 terine은 라인 버퍼링 (stdout) 또는 버퍼링되지 않음 (stderr)입니다.

의 printf에는 \ n이 없다는 것을
#include <stdio.h> 

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

참고. setvbuf() 호출을 주석 처리하면 버퍼를 채운 후 모든 출력을 한 번에 볼 수 있습니다 (보통 1024 바이트).

1

은 멀리 떨어진,하지만 난 모든 시간을 사용하는 기술은 /usr/bin/watch를 사용하여 매일 N초를 반복 한 번 뭔가를 표시하는 프로그램을 작성하는 것입니다. 그렇게 많이 재사용됩니다.

관련 문제