Pertama, tidak ada alasan khusus untuk menggunakan fdopen
jika fopen
adalah opsi dan open
adalah pilihan lain yang mungkin. Anda seharusnya tidak menggunakan open
untuk membuka file terlebih dahulu jika Anda menginginkan FILE *
. Jadi termasuk fdopen
dalam daftar itu salah dan membingungkan karena tidak seperti yang lain. Sekarang saya 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
bukannya open
.
fopen
memberi Anda buffering IO yang mungkin ternyata jauh lebih cepat daripada yang Anda lakukan denganopen
.fopen
apakah terjemahan akhir baris jika file tidak dibuka dalam mode biner, yang bisa sangat membantu jika program Anda pernah dipindahkan ke lingkungan non-Unix (meskipun dunia tampaknya hanya konvergen pada LF saja (kecuali jaringan berbasis teks IETF protokol seperti SMTP dan HTTP dan semacamnya)).- A
FILE *
memberi Anda kemampuan untuk menggunakanfscanf
dan fungsi stdio lainnya. - Kode Anda suatu hari nanti mungkin perlu dipindahkan ke beberapa platform lain yang hanya mendukung ANSI C dan tidak mendukung
open
fungsi.
Menurut pendapat saya, terjemahan akhir baris lebih sering menghalangi Anda daripada membantu Anda, dan penguraian fscanf
sangat lemah sehingga Anda akhirnya 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 terutama membaca atau menulis file secara berurutan, dukungan buffering sangat membantu dan peningkatan kecepatan yang besar. Tapi itu bisa menyebabkan beberapa masalah menarik di mana data tidak berakhir di file saat Anda mengharapkannya ada di sana. Anda harus ingat untuk fclose
atau fflush
pada waktu yang tepat.
Jika Anda melakukan pencarian (alias fsetpos
atau fseek
yang kedua sedikit lebih rumit untuk digunakan dengan cara yang sesuai standar), kegunaan buffering dengan cepat menurun.
Tentu saja, bias saya adalah saya cenderung bekerja dengan banyak soket, dan ada fakta bahwa Anda benar-benar ingin melakukan IO non-pemblokiran (yang FILE *
benar-benar gagal untuk mendukung dengan cara yang masuk akal) tanpa buffering sama sekali dan seringkali memiliki persyaratan penguraian yang rumit benar-benar mewarnai persepsi saya.
fopen vs buka di C
1) fopen
adalah fungsi perpustakaan sedangkan open
adalah panggilan sistem .
2) fopen
menyediakan IO buffer yang lebih cepat dibandingkan dengan open
yang tanpa buffer .
3) fopen
bersifat portabel sedangkan open
bukan portabel (terbuka khusus untuk lingkungan ).
4) fopen
mengembalikan pointer ke FILE structure(FILE *); open
mengembalikan bilangan bulat yang mengidentifikasi file.
5) A FILE *
memberi Anda kemampuan untuk menggunakan fscanf dan fungsi stdio lainnya.
open()
adalah panggilan os tingkat rendah. fdopen()
mengonversi deskriptor file tingkat os ke abstraksi FILE tingkat tinggi dari bahasa C. fopen()
memanggil open()
di latar belakang dan memberi Anda FILE-pointer secara langsung.
Ada beberapa keuntungan menggunakan objek FILE daripada deskriptor file mentah, yang mencakup kemudahan penggunaan yang lebih besar tetapi juga keuntungan teknis lainnya seperti buffering bawaan. Terutama buffering umumnya menghasilkan keuntungan kinerja yang cukup besar.