2017-05-05 4 views
0

Gemäß der Funktionalität von getchar(), muss es blockiert werden, wenn der Puffer stdio stream leer ist. Wie wird diese Sperrfunktion implementiert?Wie getchar() wird mit STDIO Stream synchronisiert?

Und es wird gesagt, dass getchar/getc als Makros (direkte Assemblierung) aus Performance-Gründen implementiert werden kann, wie Blocking-Funktionalität in diesem Fall sichergestellt ist.

Antwort

0

Blockierung ist verantwortlich für OS-Kernel. Wenn die Operation nicht realisiert werden kann, hat der Kernel den Prozess in eine Warteschlange gestellt, die ihn nicht infrage stellt, bis das entsprechende Ereignis (zumindest ein Zeichen für die Eingabe verfügbar ist) erkannt wird.

als Makro implementiert hat nichts besonderes mit dem Blockieren zu tun. Dies bedeutet nur, dass es keine Funktion ist und Sie können nicht die Adresse davon bekommen. Hinweis Makro bedeutet nicht direkte Assembly, bedeutet dies C-Makro etwas wie:

#define getchar(void) fgetc(stdin) 
Verwandte Themen