Pur comprendendo che fpos_t
è un tipo opaco destinato ad essere inizializzato dalla funzione fgetpos()
, §7.19.9.1 degli stati che C99 rationale:Come si può usare `fsetpos()` per "consentire l'accesso casuale su file che sono troppo grandi per gestire con` fseek() `?"
fgetpos
efsetpos
sono stati aggiunti a C89 per consentire operazioni di accesso casuale sui file che sono troppo grandi per gestire confseek
eftell
.
e §7.19.9.2:
La necessità di codificare sia la posizione di registrazione e la posizione all'interno di un record in un valore
long
può limitare la dimensione dei file di testo su cuifseek
eftell
può essere utilizzato per essere notevolmente più piccolo della dimensione dei file binari....
fgetpos
efsetpos
sono stati aggiunti a che fare con i file che sono troppo grandi da gestire confseek
eftell
.
Questo sembra concentrarsi principalmente su file di testo (file aperti con un mode
escludendo la bandiera b
), perché alcune implementazioni possono richiedere la memorizzazione di due posizioni (una posizione di record di file e una posizione di carattere record), che potrebbero ridurre sensibilmente la gamma effettiva delle funzioni fseek()
e ftell()
per i flussi di testo.
Tuttavia, non ho idea di come questo sia particolarmente utile per i flussi di testo e certamente non capisco come possa essere effettivamente utilizzato per "accesso casuale".
Sembra che l'unico modo per utilizzare effettivamente queste funzioni è leggendo tutti i caratteri di un file e il caching loro fgetpos()
d fpos_t
valori, che sembra di nicchia nella migliore delle ipotesi, dal momento che quasi certamente non si vuole leggere da nessuna parte vicino LONG_MAX
caratteri .
Cosa stava pensando "il Comitato"? C'è un fondamento logico C99?
+1, ma i mainframe IBM non sono più arcaici di ASCII o POSIX: http://www-03.ibm.com/systems/z/index.html –