Comment garder stdin et stdout séparés lors de l’impression?

Considérez le code suivant qui génère du texte toutes les quelques secondes:

int main (void) { int status = 0; if (fork() == 0) { while (1) { printf ("whatever...\n"); // printf ("\rwhatever...\n"); sleep (3); } } while (wait (&status) > 0); return 0; } 

Le problème que j’ai est que si j’ai du texte déjà tapé dans le terminal, le texte sorti serait ajouté à la fin du tampon d’entrée comme:

 > whatever...  somethingwhatever... < 

Comment puis-je lui faire imprimer le tampon de sortie et conserver le tampon d’entrée en même temps comme:

 > whatever...  whatever... < something 

Si vous vous fiez au traitement standard des E / S fourni par le terminal, vous n’avez aucun contrôle sur cet aspect.

Ce que vous pouvez faire, c’est vous en occuper manuellement. Vous pouvez soit séparer l’entrée et la sortie en deux colonnes en utilisant tput ou ncurses , soit vous pouvez désactiver l’écho de l’entrée (l’entrée ne sera pas affichée) et afficher vous-même l’entrée.

Le problème avec la deuxième approche est que cela risque d’être source de confusion pour l’utilisateur.