Pertama, tidak ada alasan yang sangat baik untuk digunakan fdopenjika fopenmerupakan opsi dan openmerupakan pilihan lain yang memungkinkan. Anda seharusnya tidak terbiasa openmembuka file di tempat pertama jika Anda menginginkan FILE *. Jadi termasuk fdopendalam 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 fopenbukan open.
fopenmemberi 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 fscanfdan fungsi stdio lainnya.
- Kode Anda suatu hari nanti mungkin perlu porting ke beberapa platform lain yang hanya mendukung ANSI C dan tidak mendukung
openfungsinya.
Menurut pendapat saya, terjemahan akhir baris lebih sering menghalangi Anda daripada membantu Anda, dan penguraiannya fscanfsangat lemah sehingga Anda akhirnya terpaksa membuangnya demi sesuatu yang lebih berguna.
Dan sebagian besar platform yang mendukung C memiliki openfungsi.
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 fcloseatau fflushpada waktu yang tepat.
Jika Anda melakukan pencarian (alias fsetposatau fseekyang 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.
fdopendanopenataufopendanopen?