gpt4 book ai didi

CGI 缓冲问题

转载 作者:行者123 更新时间:2023-11-30 18:08:57 25 4
gpt4 key购买 nike

我有一个基于 C 的服务器端 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 引用),而是一次性打印,似乎是缓冲然后写入文件。fflush() 也不起作用。

任何线索/建议将不胜感激。

最佳答案

首先,在循环之前打开文件,并在循环结束后关闭文件。 IO 过多。

问题出在这里w+ - 这会截断您的文件。使用a+。 (fopen帮助)

关于CGI 缓冲问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2961878/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com