2010-07-08 2 views
0

안녕하세요. 저는 CGI 프로그래밍에 익숙하지 않습니다.C CGI 프로그램 : 동적으로 인쇄하는 방법?

제목별로 제목을 동적으로 인쇄하려고합니다.

int main() 
{ 
    long int l=0; 

    printf("Content-Type: text/plain;charset=us-ascii\n\n"); 

    while(1) 
    {  
     printf("%li ", l); 

     if ((l%30) == 0) 
      printf("\n"); 

     if (l == 5000) 
      exit(1); 

     ++l; 
     usleep(3000); 
    }  
} 

그것으로 문제는이 모든 일이 완료 될 때까지 인쇄되지 않는 것을 : 예를 들어, 숫자의 무리를 출력이 코드를 고려하십시오. 터미널에서하는 것처럼 인쇄물을 인쇄하려면 어떻게해야합니까?

답변

1

출력 스트림을 명시 적으로 플러시해야합니다. 프로그램의 출력이 파일이나이 경우와 같은 다른 프로그램의 입력으로 리디렉션 될 때 출력 버퍼 (일반적으로 4-64KB 정도)가 가득 차면 주기적으로 만 플러시됩니다.

표준 출력을 세척하려면, 단지 fflush(3) 전화 :

if((l%30) == 0) { 
    printf("\n"); 
    fflush(stdout); 
} 

주 (당신은 그냥 일반적으로 프로그램을 실행 한 경우 예) 출력 단자에 갈 때, 다음, 기본적으로는 라인 버퍼입니다 : 개행 문자를 출력 할 때마다 출력물이 지워집니다. 이것은 대화 형 프로그램을 작성하기가 훨씬 쉬워 지지만 비대화 형 프로그램의 성능을 저하시킵니다. 더 자주 플러시할수록 프로그램이 느리게 진행되므로 긴 일관된 데이터 세트를 작성한 후 긴 집중적 인 작업을 수행하기 전에 필요한 경우에만 플러시해야합니다.

+0

응답 해 주셔서 감사합니다. 나는 당신이 말한 것을 구현했는데 (이것은 연습 프로그램을위한 것임), 여전히 효과가 없었습니다. 나는 아마 stdout이 플러시 할 스트림이 아니라고 생각한다. 비록 내가 CGI 프로그래밍에서 stdout이 곧바로 stdout과 같은 것을 읽었다 고 믿는다 고해도, 나는 의심 스럽다. 나에게도 여전히 알아낼 수있는 것이 있지만 올바른 방향으로 움직여 주셔서 감사합니다. 대단히 감사합니다! – user386156

관련 문제