Очистка буфера вывода в C (CGI) - PullRequest
1 голос
/ 08 июня 2011

Следующий код:

int z = 0;
while(z < 4)
{
printf("iteration %d\n",z);
sleep(1);
z++;
}

Работает нормально, и буфер stdout сбрасывается каждую секунду при запуске программы из командной строки.Однако, когда я пытаюсь получить доступ к программе в веб-браузере (server - apache в linux, скомпилированный исполняемый файл (с gcc), обрабатываемый через cgi), содержимое отображается только через 4 секунды, а не «шаг за шагом».Я ищу что-то вроде PHP ob_flush(). И, кстати, cgi - лучший способ обработки скомпилированных исполняемых файлов C?

Обновление: , ни fflush(stdout), ни setvbuf(stdout, NULL, _IONBF, 0) не работает!!! Отлично работает после отключения mod_deflate.

Ответы [ 2 ]

3 голосов
/ 08 июня 2011

Я не совсем уверен, что правильно понимаю ваш вопрос, но в C вы можете

  • Сбрасывать после каждого отпечатка (fflush)
  • Отключить буферизацию (setbuf, setvbuf)

    setvbuf(stdout, NULL, _IONBF, 0); /* this will disable buffering for stdout */
    

Если это не сработает, то что-то еще делает буферизацию или буферизация не является проблемой.

2 голосов
/ 08 июня 2011

Вы можете попробовать fflush stdout после вашего printf.

...