我有一個服務器端的基於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 2010-06-02 21:53:56
你怎麼知道它一氣呵成呢?在循環內部沒有任何人爲延遲,這將幾乎立即完成。 – 2010-06-02 21:54:01
我沒有理解你想要做什麼,以及預期的結果是什麼。請提供更多信息。 – Amirshk 2010-06-02 22:02:12