Getchar() et printf() en parallele dans un thread
Bonjour,
Dans le cadre du développement d'une application sous système linux, j'ai besoin de lire une saisie clavier dans un main() tout en étant capable d'écrire des données sur la console depuis un thread initialisé par ce même main().
Seulement, j'ai beau faire des printf() dans le thread, rien ne s'affiche tant que je n'envoie pas de \n dans un printf().
Voir fichier attaché printf.c ( gcc printf.c -o printf -lpthread ).
Si je commente la ligne printf("\n");, "mon texte" ne s'affichera pas.
Je ne sais pas d'où cela peut venir même si j'imagine que c'est peut être un tampon au niveau de la sortie qui attend un \n.
Pouvez-vous m'expliquer l'origine de ce problème et idéalement comment le régler ? ;)
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
|
#include <stdio.h>
#include <pthread.h>
#include <unistd.h>
void* thread(void* arg) {
sleep(1); // attendre une seconde que getchar se lance
printf("mon texte");
printf("\n"); // Obligatoire sinon "mon texte" ne s'affiche pas
return NULL;
}
int main (int argc, char ** argv) {
pthread_t threadEcoute;
pthread_attr_t attr;
pthread_attr_init(&attr);
if (pthread_create(&threadEcoute, &attr, thread, NULL) != 0)
perror("erreur de thread");
char caractere = getchar();
return 0;
} |