Di solito stdoutè con buffer di riga. In altre parole, finché il tuo printfargomento finisce con una nuova riga, puoi aspettarti che la riga venga stampata immediatamente. Questo non sembra essere valido quando si utilizza una pipe a cui reindirizzare tee.
Ho un programma C ++ a, che restituisce stringhe, sempre \nterminate, a stdout.
Quando viene eseguito da solo ( ./a), tutto viene stampato correttamente e al momento giusto, come previsto. Tuttavia, se lo installo in tee( ./a | tee output.txt), non stampa nulla finché non si chiude, il che vanifica lo scopo dell'uso tee.
So che potrei risolverlo aggiungendo una fflush(stdout)dopo ogni operazione di stampa nel programma C ++. Ma esiste un modo più semplice e più pulito? C'è un comando che posso eseguire, ad esempio, che costringerebbe stdoutad essere bufferizzato di riga, anche quando si utilizza una pipe?
expectme stesso in quantounbuffernon sembra essere incluso di default in OS X.