У меня есть на стороне сервера C на основе CGI-код, как:CGI Буферизация вопрос
cgiFormFileSize("UPDATEFILE", &size); //UPDATEFILE = file being uploaded
cgiFormFileName("UPDATEFILE", file_name, 1024);
cgiFormFileContentType("UPDATEFILE", mime_type, 1024);
buffer = malloc(sizeof(char) * size);
if (cgiFormFileOpen("UPDATEFILE", &file) != cgiFormSuccess) {
exit(1);
}
output = fopen("/tmp/cgi.tar.gz", "w+");
inc = size/(1024*100);
fptr = fopen("progress_bar.txt", "w+");
while (cgiFormFileRead(file, b, sizeof(b), &got_count) == cgiFormSuccess)
{
fwrite(b,sizeof(char),got_count,output);
i++;
if(i == inc && j<=100)
{
fprintf(fptr,"%d", j);
fflush(fptr);
i = 0;
j++; // j is the progress bar increment value
}
}
fclose(fptr);
cgiFormFileClose(file);
retval = system("mkdir /tmp/update-tmp;\
cd /tmp/update-tmp;\
tar -xzf ../cgi.tar.gz;\
bash -c /tmp/update-tmp/update.sh");
Однако это не работает так, как показано выше. Вместо того, чтобы печатать 1,2, ... 100 до progress_bar.txt (упоминается fptr) один за другим, он печатает на ONE GO, кажется, что он буферизует, а затем записывает в файл. fflush() тоже не работает.
Любая подсказка/предложение было бы действительно оценено.
Как вы знаете, не пишет один за другим? – Freddy
Откуда вы знаете, что это происходит за один раз? Без искусственных задержек внутри цикла это почти полностью завершится. –
Я не понял, что вы пытаетесь сделать, и каков ожидаемый результат. Пожалуйста, дайте больше информации. – Amirshk