2013-08-16 18 views
11

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?

+0

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

+0

no, vuole capire anche vfprintf, non solo la scrittura sottostante. L'altro thread contiene il resto, però. –

risposta

7

Penso che stai guardando il livello sbagliato. La logica in vfprintf è responsabile della formattazione degli argomenti e della loro scrittura attraverso le funzioni stdio sottostanti, di solito in un buffer nell'oggetto FILE a cui è destinato. La logica effettiva per ottenere questo output sul descrittore di file (o su altri sistemi non POSIX, la rappresentazione di dispositivo/file sottostante) è probabilmente in fwrite, fputc e/o alcune __ -funzioni interne prefissate (forse __overflow).

+2

Grazie - tra questa risposta e http://stackoverflow.com/questions/2442966/c-c-function-definitions-without-assembly ho una migliore comprensione di cosa sta succedendo. – sdasdadas

Problemi correlati