GNU/Linux >> Belajar Linux >  >> Linux

C fopen vs terbuka

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 .

  1. fopen memberi Anda buffering IO yang mungkin ternyata jauh lebih cepat daripada yang Anda lakukan dengan open .
  2. 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)).
  3. A FILE * memberi Anda kemampuan untuk menggunakan fscanf dan fungsi stdio lainnya.
  4. 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.


Linux
  1. Ubuntu – Bagaimana Cara Membuka File .bak Di Linux?

  2. Pertanyaan Wawancara Linux :Buka File / Buka Deskriptor File

  3. open() dengan Python tidak membuat file jika tidak ada

  1. Apakah fopen() fungsi thread safe di Linux?

  2. buka file dengan program default di node-webkit

  3. Cara membuka file di vim menggunakan pipa

  1. Bagaimana Cara Membuka File .8 Dengan Man?

  2. libaio.so.1:tidak dapat membuka file objek bersama

  3. Buka file yang diberikan oleh hasil perintah di vim