2017-05-05 10 views
0

Selon la fonctionnalité de getchar(), il doit être bloqué lorsque le tampon de flux stdio est vide. Comment cette fonctionnalité de blocage est-elle implémentée?Comment getchar() est synchronisé avec le flux stdio?

Et il est dit que getchar/getc peut être implémenté en tant que macros (assemblage direct) pour des raisons de performance, comment la fonctionnalité de blocage est assurée dans ce cas.

Répondre

0

Le blocage est en charge du noyau OS. Si l'opération ne peut pas être réalisée, alors le noyau met le processus dans une file d'attente qui le rend non éligible jusqu'à ce que l'événement correspondant (au moins un caractère est disponible pour l'entrée) soit détecté.

implémenté en tant que macro n'a rien de spécial à faire avec le blocage. Cela signifie simplement que ce n'est pas une fonction et vous ne pouvez pas obtenir l'adresse de celui-ci. Remarque macro ne signifie pas assemblage direct, cela signifie C quelque chose comme macro: C

#define getchar(void) fgetc(stdin)