J'ai un base côté serveur C code CGI:CGI Buffering question
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");
Cependant, cela ne fonctionne pas comme comme on le voit ci-dessus. Au lieu d'imprimer 1,2, ... 100 à progress_bar.txt (référencé par fptr) un par un, il imprime à ONE GO, il semble tamponner, puis écrit dans le fichier. fflush() ne fonctionnait pas non plus.
Toute idée/suggestion serait vraiment appréciée.
Comment savez-vous n'écrit pas un par un? – Freddy
Comment savez-vous qu'il le fait en une seule fois? Sans retards artificiels à l'intérieur de la boucle, cela se terminera presque immédiatement. –
Je n'ai pas compris ce que vous essayez de faire, et quel était le résultat attendu. S'il vous plaît donner plus d'informations. – Amirshk