2017-07-12 1 views
2

J'utilise ce code pour imprimer ma sortie dans un fichierEst-ce que fprintf() dans c imprime la sortie dans un fichier un par un ou en bloc?

FILE * file; 
file = fopen("output.txt", "a"); 
for (int i=0; i<10; i++){ 

    loop(arr, a_d, Y_d, sample_d, A_d, y_d, res_d, res,x_d, R_d, A1_d, y1_d, Q_d, TAU_d, devInfo, m, n, i); 

    float s = minimum(arr, 7802); 

    fprintf(file,"%f\n", s); 
} 

fclose(file); 

Mais je dois obtenir le nombre de lignes remplies dans le fichier sortie.txt par commande -wc dans un script shell pour l'impression des progrès du programme en pourcentage. Je ne sais pas si fprinf() imprime la sortie un par un vers un fichier ou en dernier. Alors, quelqu'un peut-il me suggérer un autre moyen de le faire?

Répondre

4

Vous vous posez la mauvaise chose, mais laissez-moi vous expliquer:

(f)printf() sorties à un stdioflux, et les cours d'eau peuvent être soit unbuffered ou tampon dans deux modes différents: entièrement tamponnés ou ligne tamponnée.

Un flux FILE * ouvert avec fopen() sera généralement en mode entièrement bufferisé. Cela signifie que la sortie se produit uniquement lorsque le tampon est plein ou lorsque le flux est vidé (fflush() ou implicitement lorsque vous le fermez).

Vous pouvez changer le mode de mise en mémoire tampon avec setvbuf() ou vous pouvez simplement appeler fflush() après chaque sortie. En ce qui concerne ce que vous voulez réaliser, je pense qu'il serait préférable d'émettre des informations de progression directement à partir de votre programme. Vous pouvez par exemple utiliser stderr pour cela.

+0

Pouvez-vous expliquer plus comment puis-je obtenir des informations de progression de mon programme directement? – agangwal

+0

Pas vraiment, cela dépend de ce dont vous avez besoin. Vous pourriez par exemple calculer une valeur en pourcentage après chaque étape et juste 'fprintf()' à 'stderr' ... –

+0

Je veux juste montrer mes progrès en pourcentage. Pouvez-vous me montrer un exemple de comment le faire ?? – agangwal