Faux.
A moins que ton programme attaque les I/O à coups de read/write et non fread/fwrite, la bufferisation tu l'auras dans tous les coups. Quand tu rediriges ton flux sur un descripteur de fichier qui n'est pas un tty, la libc passe automatiquement stdout en bufferisation par bloque et non plus par ligne. Exemple:
#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>
int main (void) {
(void) fputs ("foo\nbar\n", stdout);
for (; ; ) { pause (); }
return 0;
}
Sur un tty, tu ne verras que "foo" (par ligne). Redirection vers un fichier: celui ci sera vide (par bloque). Et avec:
mon_programme > log && tail -f log
tu verras que rien ne s'affichera.
Donc, définitivement, soit ton programme utilise syslog (ou tout autre système de log). S'il utilise le flux d'erreur à la place de stdout, essaie
mon_programme 2>&1 | tee
et là, surprise, on voit que tee ne bufferise même pas par ligne. Oui, il passe à la main stdout en non bufferisé.
[^] # Re: Fichier log ou affichage ?
Posté par Blurps . En réponse au message [Terminal] Fichier log ou affichage ?. Évalué à 1.
#include <stdlib.h> #include <stdio.h> #include <unistd.h> int main (void) { (void) fputs ("foo\nbar\n", stdout); for (; ; ) { pause (); } return 0; }Sur un tty, tu ne verras que "foo" (par ligne). Redirection vers un fichier: celui ci sera vide (par bloque). Et avec: tu verras que rien ne s'affichera. Donc, définitivement, soit ton programme utilise syslog (ou tout autre système de log). S'il utilise le flux d'erreur à la place de stdout, essaie et là, surprise, on voit que tee ne bufferise même pas par ligne. Oui, il passe à la main stdout en non bufferisé.