Habituellement, stdout
est tamponné en ligne. En d'autres termes, tant que votre printf
argument se termine par une nouvelle ligne, vous pouvez vous attendre à ce que la ligne soit imprimée instantanément. Cela ne semble pas tenir lorsque vous utilisez un tube vers lequel rediriger tee
.
J'ai un programme C ++,, a
qui génère des chaînes, toujours \n
terminées, vers stdout
.
Lorsqu'il est exécuté seul ( ./a
), tout s'imprime correctement et au bon moment, comme prévu. Cependant, si je le dirige vers tee
( ./a | tee output.txt
), il n'imprime rien tant qu'il ne se ferme pas, ce qui va à l'encontre de l'objectif de l'utilisation tee
.
Je sais que je pourrais le réparer en ajoutant un fflush(stdout)
après chaque opération d'impression dans le programme C ++. Mais existe-t-il un moyen plus simple et plus propre? Existe-t-il une commande que je peux exécuter, par exemple, qui forcerait la mise stdout
en tampon de ligne, même lorsque vous utilisez un tube?
expect
me compiler carunbuffer
ne semble pas être inclus par défaut dans OS X.