Pertama, tidak ada alasan yang sangat baik untuk digunakan fdopen
jika fopen
merupakan opsi dan open
merupakan pilihan lain yang memungkinkan. Anda seharusnya tidak terbiasa open
membuka file di tempat pertama jika Anda menginginkan FILE *
. Jadi termasuk fdopen
dalam daftar itu tidak benar dan membingungkan karena tidak banyak seperti yang lain. Saya sekarang akan melanjutkan untuk mengabaikannya karena perbedaan penting di sini adalah antara standar C FILE *
dan deskriptor file khusus-OS.
Ada empat alasan utama untuk menggunakan fopen
bukan open
.
fopen
memberi Anda IO buffering yang ternyata jauh lebih cepat dari apa yang Anda lakukan open
.
fopen
tidak terjemahan akhir baris jika file tidak dibuka dalam mode biner, yang dapat sangat membantu jika program Anda pernah porting ke lingkungan non-Unix (meskipun dunia tampaknya konvergen pada LF-only (kecuali jaringan berbasis teks IETF protokol seperti SMTP dan HTTP dan semacamnya)).
- A
FILE *
memberi Anda kemampuan untuk menggunakan fscanf
dan fungsi stdio lainnya.
- Kode Anda suatu hari nanti mungkin perlu porting ke beberapa platform lain yang hanya mendukung ANSI C dan tidak mendukung
open
fungsinya.
Menurut pendapat saya, terjemahan akhir baris lebih sering menghalangi Anda daripada membantu Anda, dan penguraiannya fscanf
sangat lemah sehingga Anda akhirnya terpaksa membuangnya demi sesuatu yang lebih berguna.
Dan sebagian besar platform yang mendukung C memiliki open
fungsi.
Itu meninggalkan pertanyaan buffering. Di tempat-tempat di mana Anda membaca atau menulis file secara berurutan, dukungan buffer sangat membantu dan peningkatan kecepatan yang besar. Tapi itu bisa menyebabkan beberapa masalah menarik di mana data tidak berakhir di file ketika Anda mengharapkannya ada di sana. Anda harus mengingat fclose
atau fflush
pada waktu yang tepat.
Jika Anda melakukan pencarian (alias fsetpos
atau fseek
yang sedikit lebih sulit untuk digunakan dengan cara yang sesuai standar), kegunaan buffering dengan cepat turun.
Tentu saja, bias saya adalah bahwa saya cenderung bekerja dengan soket banyak, dan ada fakta bahwa Anda benar-benar ingin melakukan IO non-blocking (yang FILE *
benar-benar gagal mendukung dengan cara yang masuk akal) tanpa buffering sama sekali dan sering memiliki persyaratan parsing yang kompleks benar-benar mewarnai persepsi saya.
fdopen
danopen
ataufopen
danopen
?