ครั้งแรกไม่มีเหตุผลที่ดีโดยเฉพาะอย่างยิ่งที่จะใช้fdopen
ถ้าfopen
เป็นตัวเลือกและopen
เป็นตัวเลือกที่เป็นไปได้อื่น ๆ คุณไม่ควรจะใช้เพื่อเปิดไฟล์ในสถานที่แรกถ้าคุณต้องการopen
FILE *
ดังนั้นการรวมfdopen
ไว้ในรายการนั้นไม่ถูกต้องและทำให้สับสนเพราะมันไม่เหมือนกับคนอื่น ๆ ตอนนี้ฉันจะเพิกเฉยต่อความแตกต่างที่สำคัญเนื่องจากมาตรฐาน CFILE *
และตัวอธิบายไฟล์เฉพาะระบบปฏิบัติการ
มีสี่เหตุผลหลักที่จะใช้แทนfopen
open
fopen
ช่วยให้คุณมีบัฟเฟอร์ IO ที่อาจเร็วกว่าสิ่งที่คุณทำ open
ที่จะเปิดออกมาเป็นจำนวนมากได้เร็วกว่าสิ่งที่คุณกำลังทำอยู่กับ
fopen
การแปลสิ้นสุดบรรทัดหากไฟล์ไม่ได้เปิดในโหมดไบนารีซึ่งจะมีประโยชน์มากหากโปรแกรมของคุณถูกย้ายไปยังสภาพแวดล้อมที่ไม่ใช่ Unix (แม้ว่าโลกจะปรากฏขึ้นเพื่อมาบรรจบกันบน LF-only (ยกเว้นเครือข่ายข้อความ IETF) โปรโตคอลเช่น SMTP และ HTTP และอื่น ๆ ))
- A
FILE *
ช่วยให้คุณสามารถใช้งานได้fscanf
และฟังก์ชั่น stdio อื่น ๆ
- รหัสของคุณอาจต้องถูกย้ายไปยังแพลตฟอร์มอื่นที่รองรับ ANSI C เท่านั้นและไม่รองรับ
open
ฟังก์ชั่นนี้
ในความคิดของฉันการแปลที่ลงท้ายด้วยบรรทัดมักจะเข้ามาช่วยคุณได้มากกว่าการแยกวิเคราะห์ fscanf
นั้นอ่อนแอมากจนคุณต้องเลิกใช้มันเพื่อประโยชน์บางอย่างที่มีประโยชน์มากขึ้น
และแพลตฟอร์มส่วนใหญ่ที่รองรับ C มี open
ฟังก์ชั่น
นั่นเป็นคำถามที่ทิ้งไว้ ในสถานที่ที่คุณส่วนใหญ่อ่านหรือเขียนไฟล์ตามลำดับการสนับสนุนการกำหนดบัฟเฟอร์จะมีประโยชน์มากและมีการปรับปรุงความเร็วสูง แต่อาจนำไปสู่ปัญหาที่น่าสนใจซึ่งข้อมูลไม่ได้อยู่ในไฟล์เมื่อคุณคาดหวังว่ามันจะอยู่ที่นั่น คุณต้องจำไว้fclose
หรือfflush
ในเวลาที่เหมาะสม
หากคุณกำลังมองหา ( fsetpos
หรือfseek
ที่สองหรือที่สองคือเล่ห์เหลี่ยมเล็กน้อยที่จะใช้ในทางที่ได้มาตรฐาน) ประโยชน์ของการบัฟเฟอร์อย่างรวดเร็วลงไป
แน่นอนอคติของฉันคือฉันมักจะทำงานร่วมกับซ็อกเก็ตมากและมีความจริงที่ว่าคุณต้องการที่จะทำการปิดกั้น IO จริง ๆ (ซึ่งFILE *
ล้มเหลวในการให้การสนับสนุนในทางที่สมเหตุสมผล) โดยไม่มีการบัฟเฟอร์เลย มีข้อกำหนดในการแยกวิเคราะห์ที่ซับซ้อนเพื่อให้สีของฉัน
fdopen
และopen
หรือfopen
และopen
?