Normalmente la libreria standard chiamerà qualcosa nel sistema operativo per gestire la lettura e la scrittura del file vero e proprio. Su POSIX (o simili) che sarebbero per lo più read
e write
, che possono leggere o scrivere file. Su Windows, normalmente sarà ReadFile
e WriteFile
. Windows fornisce anche ReadFileEx
e WriteFileEx
, ma sono principalmente per l'I / O asincrono, che la libreria standard non supporta (ancora).
Da lì, l'esecuzione in genere discenderà attraverso (almeno) un driver del file system, una cache del file system e un driver di periferica per il disco, SSD o qualunque tipo di dispositivo viene utilizzato per memorizzare il file in questione. In alternativa, i dati potrebbero passare attraverso un livello socket e da lì a un driver di dispositivo per un'interfaccia di rete.
I dettagli precisi del trasferimento dei dati sull'hardware variano (abbastanza ampiamente), ma in un caso tipico dell'hardware moderno gran parte di essi viene effettivamente gestito dal dispositivo di destinazione stesso. Sulla CPU si crea una lista di raccolta per l'output o una lista di dispersione per l'input. Questo è fondamentalmente solo una piccola parte delle tabelle delle pagine della CPU, per dire al dispositivo di destinazione quali pagine fisiche deve leggere (per l'output) o scrivere (per l'input).
Questo è necessario perché (almeno sulla maggior parte dei SO tipici) stai allocando memoria con indirizzi virtuali - ciò che il tuo programma vede come memoria "contigua" può essere sparsi in modo piuttosto casuale nella memoria fisica. La maggior parte dell'hardware 1 non è al corrente di quella traduzione degli indirizzi, quindi deve essere fornita con gli indirizzi fisici delle singole pagine di memoria in cui risiedono i tuoi dati.
Si noti inoltre che in un caso tipico (ad esempio, un file tipico su disco), ciò che si rilascia come una singola chiamata a fwrite
potrebbe essere tradotto in un numero di operazioni I / O effettive con l'unità disco. Se scrivi parte di un settore, la tua scrittura potrebbe tradurre in lettura un intero settore in un buffer, sovrascrivendo parte di quel buffer, quindi scrivendo il buffer modificato sul disco.
1. Le principali eccezioni sono alcune schede video e gli adattatori di rete RDMA. Questi hanno memoria in cui il driver del dispositivo mantiene una copia shadow delle tabelle di conversione degli indirizzi della CPU, che l'hardware quindi usa per tradurre gli indirizzi, riducendo così il carico sulla CPU.