Domanda

Solo per curiosità, come fa iostream accedere al sistema di input-output. (Ho una cattiva abitudine di reinventare continuamente la ruota, e mi chiedo se posso costruire un sistema di input-output personalizzato per artisti del calibro di iostream).

È stato utile?

Soluzione

Per una guida dettagliata per iostreams, vedere il libro standard C ++ iostreams e locali . Dopo averlo letto ho il sospetto che si accontenterà di gestire con lo status quo - iostreams sono probabilmente la parte più complessa della libreria standard C ++

.

Altri suggerimenti

Dipende ...

Si interagisce in qualche modo con il sistema IO nativo del sistema operativo. Si potrebbe utilizzare internamente la libreria C, che utilizza chiamate di sistema al kernel, o potrebbe utilizzare le chiamate di sistema direttamente. L'implementazione esatta è fortemente dipendente dalla piattaforma.

Molte persone dicono che non reinventare la ruota, ma potrebbe essere una buona esperienza di apprendimento. Se si utilizza Windows, esaminare le chiamate API Win32 per la gestione dei file. Se si usa Linux, utilizzare la libreria POSIX / C, o utilizzare le chiamate di sistema (molto più difficile, io vi suggerisco di andare con la libreria C).

Certamente potrebbe reinventare la ruota.

Ci sono un sacco di complicazioni aggiunti agli operatori del flusso di gestire i set di caratteri internazionali. Dopo aver guardato ragionevolmente profondamente davvero non importava molto. E 'molto complicato e distrugge completamente ogni possibilità di facile usare l'ereditarietà. Funziona ed è disponibile però. (Volevo cambiare il comportamento della memorizzazione che utilizza durante le conversioni)

Tutti i flussi vanno ad uno streambuf. Quel streambuf dipenderà dal tipo di flusso. Un ofstream va a un fstreambuf; cout va a qualche streambuf non specificato. Se si desidera personalizzare le cose, cout consente di ottenere questo streambuf ed eventualmente sostituirlo.

Un modello comune è il "filtraggio streambuf", che è un'interfaccia streambuf che trasforma il suo input prima di inviarlo ad un altro streambuf. Questo può essere combinato con cout: estrarre la streambuf originale, avvolgere che in uno streambuf filtraggio, e mettere quel involucro nel cout. Non è necessario sapere come funziona lo streambuf originale.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top