İlk olarak, fdopeneğer fopenbir seçenek ve opendiğer olası seçenek ise kullanmak için özellikle iyi bir neden yoktur . İsterseniz open, dosyayı ilk etapta açmamalısınız FILE *. Bu fdopenlisteye dahil etmek yanlış ve kafa karıştırıcıdır çünkü diğerleri gibi değildir. Şimdi görmezden gelmeye devam edeceğim, çünkü buradaki önemli fark bir C standardı FILE *ile OS'ye özgü bir dosya tanımlayıcı arasında.
fopenBunun yerine dört ana neden vardır open.
fopensize yaptığınızdan çok daha hızlı olabilen tamponlama G / Ç sağlar open.
fopen dosya ikili modda açılmazsa satır sonu çevirisini yapar, bu da programınız Unix olmayan bir ortama taşınmışsa çok yararlı olabilir (dünya yalnızca LF'de yakınsa da görünmektedir (IETF metin tabanlı ağ dışında) SMTP ve HTTP gibi protokoller).
- A
FILE *size kullanım fscanfve diğer stdio fonksiyonlarını verir.
- Kodunuzun bir gün yalnızca ANSI C'yi destekleyen ve
openişlevi desteklemeyen başka bir platforma taşınması gerekebilir .
Bence çeviriyi bitiren çizgi size yardımcı olmaktan daha sık yol alır ve ayrıştırma fscanfo kadar zayıftır ki, kaçınılmaz olarak daha yararlı bir şey lehine savurmanız gerekir.
Ve C'yi destekleyen çoğu platformda open işlevi vardır.
Arabelleğe alma sorusu kalmıyor. Çoğunlukla sırayla bir dosyayı okuduğunuz veya yazdığınız yerlerde, arabelleğe alma desteği gerçekten yararlı ve büyük bir hız iyileştirmesi. Ancak, verilerin orada olmasını beklediğinizde dosyada bulunmadığı bazı ilginç sorunlara yol açabilir. Hatırlamak zorundasınfclosefflushUygun zamanlarda veya uygun zamanlarda .
Arama yapıyorsanız (aka fsetposveyafseek ikincisi standartlara uygun bir şekilde kullanmak biraz daha zor), arabelleğe almanın kullanışlılığı hızla azalır.
Tabii ki, önyargım, soketlerle çok fazla çalışma eğiliminde olduğum ve gerçekten FILE *ve hiç tamponlama olmadan hiç engellemeyen IO ( tamamen makul bir şekilde destekleyemeyen) yapmak istediğiniz gerçeği var. karmaşık ayrıştırma gereksinimleri gerçekten benim algılarımı renklendirmek.
fdopenveopenyafopenveopen?