Sono curioso di sapere come printf
funziona internamente in Linux. Non capisco come scrive i dati su STDOUT
.Come funziona printf internamente?
Dopo un po 'di ricerche per l'interno, ho scaricato glibc
e ha preso uno sguardo al codice sorgente:
__printf (const char *format, ...)
{
va_list arg;
int done;
va_start (arg, format);
done = vfprintf (stdout, format, arg);
va_end (arg);
return done;
}
Dopo aver trovato questo, sono andato più in profondità la funzione vfprintf
- ma il file è di circa 2500 linee di codice C non familiare. Sto cercando una spiegazione da 10.000 piedi di come printf funziona con la memoria di un computer e l'output per visualizzare i caratteri sullo schermo.
Se fossi un pezzo di codice assembly, cosa dovrei fare per eseguire lo stesso compito? Dipende dal sistema operativo?
Tutto si riduce alla scrittura su un dispositivo (quasi fosse un file). Il driver del dispositivo prende il sopravvento e interpreta i valori ASCII e dice al monitor come visualizzarli. Lo stesso vale per il disco, i mouse, ecc. – Jiminion
no, vuole capire anche vfprintf, non solo la scrittura sottostante. L'altro thread contiene il resto, però. –