İlk olarak, fdopen
eğer fopen
bir seçenek ve open
diğ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 fdopen
listeye 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.
fopen
Bunun yerine dört ana neden vardır open
.
fopen
size 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 fscanf
ve diğer stdio fonksiyonlarını verir.
- Kodunuzun bir gün yalnızca ANSI C'yi destekleyen ve
open
iş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 fscanf
o 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ınfclose
fflush
Uygun zamanlarda veya uygun zamanlarda .
Arama yapıyorsanız (aka fsetpos
veyafseek
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.
fdopen
veopen
yafopen
veopen
?