Meskipun saya memahami bahwa fpos_t
adalah tipe buram yang dimaksudkan untuk diinisialisasi oleh fungsi fgetpos()
, §7.19.9.1 dari Dasar pemikiran C99 menyatakan bahwa:
fgetpos
danfsetpos
ditambahkan ke C89 untuk memungkinkan operasi akses acak pada file yang terlalu besar untuk ditangani denganfseek
danftell
.
dan §7.19.9.2:
Kebutuhan untuk mengkodekan posisi rekaman dan posisi dalam rekaman dalam nilai
long
dapat membatasi ukuran file teks yang dapat digunakanfseek
danftell
menjadi jauh lebih kecil daripada ukuran file biner....
fgetpos
danfsetpos
ditambahkan untuk menangani file yang terlalu besar untuk ditangani denganfseek
danftell
.
Hal ini tampaknya terutama berfokus pada file teks (file dibuka dengan mode
tidak termasuk flag b
), karena beberapa implementasi mungkin memerlukan penyimpanan dua posisi (posisi rekaman file dan posisi karakter rekaman), yang secara signifikan dapat mengurangi jangkauan efektif fseek()
dan fungsi ftell()
untuk aliran teks.
Namun demikian, saya tidak mengerti bagaimana hal ini sangat berguna untuk aliran teks, dan saya tentu saja tidak mengerti bagaimana hal ini dapat secara efektif digunakan untuk "akses acak".
Tampaknya satu-satunya cara untuk benar-benar memanfaatkan fungsi-fungsi ini adalah dengan membaca setiap karakter file dan menyimpan nilai fgetpos()
d fpos_t
di dalamnya, yang sepertinya merupakan hal terbaik, karena Anda hampir pasti tidak ingin membaca mendekati LONG_MAX
karakter.
Apa yang dipikirkan "Komite"? Apakah ada dasar pemikiran C99?