14.진행 현황 보기


  제목만 봐서는 뭘하는 건지 알기 어려울 것이다. 이번에는 이러한 상황이 발생했을 때 써먹을 수 있는 기법을 소개한다.

상 황   통계처리를 하려고 한는데, 처리 대상이 장난이 아니다. CGI로 작성하라고 해서 작성을 하고 있는데 아무래도 10분이상 걸릴거 같다. 사용자들은 분명히 기다리지 못하고 STOP버튼을 눌러 버릴 것이고, 늦는다고 불평을 해댈 것이다. 열심히 개발하고 욕만 실컷 얻어먹게 된다.


  물론 상황이 좀 극단적이긴 하지만, 실전에서는 있을 수 있는 얘기들이다. 요새 대부분의 프로그램들이 Progress Bar라는 것을 지원한다. 즉, 진행될 때마다 막대가 점점 차가면서 얼마나 더 기다려야 하는지 알려주는 것을 말하는데, C/S시스템을 개발할 때 누구나 써봤을 것이다. 그러나 불행히도 WEB에서는 그런거 없다.

  그래서, fflush라는 함수를 사용해서 극복해보자. 말이 필요없다.예제다.

#include <stdio.h>

main()
{
    int i;

    printf("Content-type: text/html\n\n");

    printf("<html><body>\n");
    for(i = 0;i < 3;i++){
       printf("<b>%d</b&gr;<br<\n", i);
       fflush(stdout);
       sleep(2);
    }
    printf("\n");
}


  전에도 말했지만, CGI가 실행될 때 Input으로 stdin이 쓰이고, 출력으로 stdout이 쓰인다. fflush함수는 버퍼에 있는 내용을 실제로 기록하는 함수이다.

  여기서 주의할 것이 브라우저는 대부분 한줄이 완전히 차기전까지 화면에 아무것도 보여주지 않는다. 따라서, 위의 예에서
과 같이 다음줄로 넘겨주는 작업이 반드시 필요하다.( 이것은 브라우저의 특성이므로 대상이 되는 브라우저에서 확인하는 작업이 필요하다. )

  실행해보면 알겠지만, 0,1,2가 차례로 2초 간격(sleep함수)으로 출력되는 것을 볼 수 있을 것이다. 이렇게 다 찬 뒤에는 javascript등을 이용해서 다른 화면 예를 들면, 성공했다는 화면등으로 이동시키는 것도 좋은 방법이다.

- Last Update : 2001.7.9 by Deadfire(http://www.deadfire.net)

CGI with C 활용
브라우저구분
환경변수LIST
클라이언트풀
서버푸쉬
Form Mail
진행현황보기
Cookie
MD5
File Download
SSI
Redirection
File Upload
GD1.2
Database
마치며

Copyright ⓒ 1997 ~, Deadfire Program Master