【发布时间】:2010-06-02 21:50:58
【问题描述】:
我有一个基于 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() 也不起作用。
任何线索/建议将不胜感激。
【问题讨论】:
-
你怎么知道不是一一写的?
-
你怎么知道它一口气完成了?循环内没有人为延迟,这将几乎立即完成。
-
我不明白您要做什么,以及预期的结果是什么。请提供更多信息。
-
哦,好吧,我不知道这个。谢谢。但与此同时,我找不到合适的答案来回答我的问题。
-
@Am : 请参考stackoverflow.com/questions/2951732/file-upload-progress-bar。只需查看服务器端代码。谢谢