Freopen Stdin ไบนารี ตัวเลือก


คำตอบง่ายๆคือไม่ โหมดนี้จะถูกกำหนดเมื่อมีการสร้างอ็อบเจ็กต์ iostream และไม่สามารถเปลี่ยนแปลงได้ในภายหลัง การใช้งานบางอย่างอาจให้วิธีการทำในภายหลัง แต่นี่ไม่ใช่มาตรฐาน ในการใช้งานบางอย่างการทำ freopen บน stdout อาจเปลี่ยนโหมดแม้ว่าฉันคิดว่าอย่างเป็นทางการนี้เป็นสิ่งต้องห้ามใน C. (เป็นการใช้งานที่กำหนดไว้ใน C. ) และเห็นได้ชัดว่ามันไม่ได้ทำงานในการดำเนินงานของคุณ ทางออกที่ดีที่สุดคือการหาวิธีตั้งชื่ออุปกรณ์คอนโซล (devtty ภายใต้ Unix CONS ฉันคิดว่าภายใต้ Windows) เปิดในโหมดที่ต้องการและส่งออกไป ตอบ 16 เม. ย. 16 ที่ 11: 34 สตรีมด้วยไฟล์หรือโหมดอื่นใช้สตรีมไปเปิดไฟล์ที่ระบุโดยชื่อไฟล์หรือเปลี่ยนโหมดการเข้าถึง ถ้ามีการระบุชื่อไฟล์ใหม่ฟังก์ชันนี้จะพยายามปิดไฟล์ใด ๆ ที่เกี่ยวข้องกับสตรีมอยู่แล้ว (พารามิเตอร์ที่สาม) และยกเลิกการเชื่อมโยง จากนั้นอิสระจากว่ากระแสข้อมูลนั้นถูกปิดหรือไม่สำเร็จ freopen จะเปิดไฟล์ที่ระบุโดยชื่อไฟล์และเชื่อมโยงกับสตรีมเช่นเดียวกับ fopen จะใช้โหมดที่ระบุ ถ้าชื่อไฟล์เป็นโมฆะพอยน์เตอร์ฟังก์ชันจะพยายามเปลี่ยนโหมดของสตรีม แม้ว่าการใช้ไลบรารีโดยเฉพาะจะได้รับอนุญาตให้ จำกัด การเปลี่ยนแปลงที่ได้รับอนุญาตและภายใต้สถานการณ์เช่นนั้น ตัวบ่งชี้ข้อผิดพลาดและตัวบ่งชี้ eof จะถูกล้างออกโดยอัตโนมัติ (เช่นถ้าเรียกว่า clearerr) ฟังก์ชันนี้มีประโยชน์อย่างยิ่งสำหรับการเปลี่ยนเส้นทางสตรีมที่กำหนดไว้ล่วงหน้าเช่น stdin stdout และ stderr ไปยังไฟล์ที่ระบุ (ดูตัวอย่างด้านล่าง) พารามิเตอร์ชื่อไฟล์ C สตริงที่มีชื่อของไฟล์ที่จะเปิด ค่าดังกล่าวจะต้องเป็นไปตามข้อกำหนดของชื่อไฟล์ของสภาพแวดล้อมที่ใช้งานและอาจรวมถึงเส้นทาง (หากได้รับการสนับสนุนโดยระบบ) ถ้าพารามิเตอร์นี้เป็น null pointer ฟังก์ชันจะพยายามเปลี่ยนโหมดของสตรีม เหมือนกับว่าได้ใช้ชื่อไฟล์ที่เชื่อมโยงกับสตรีมปัจจุบันแล้ว โหมด C ที่มีโหมดการเข้าถึงไฟล์ สามารถ: อ่าน: เปิดไฟล์สำหรับการดำเนินการป้อนข้อมูล ไฟล์ต้องมีอยู่ เขียน: สร้างไฟล์ว่างสำหรับการดำเนินการออก หากไฟล์ที่มีชื่อเดียวกันมีอยู่แล้วเนื้อหาจะถูกยกเลิกและไฟล์จะถือว่าเป็นไฟล์ว่างเปล่าใหม่ ผนวก: เปิดไฟล์สำหรับเอาต์พุตที่ท้ายไฟล์ การดำเนินการออกเสมอเขียนข้อมูลที่ท้ายแฟ้มขยาย การดำเนินการจัดตำแหน่ง (fseek. fsetpos. rewind) จะถูกละเว้น แฟ้มถูกสร้างขึ้นหากไม่มีอยู่ readupdate: เปิดไฟล์สำหรับอัพเดต (ทั้งสำหรับอินพุตและเอาต์พุต) ไฟล์ต้องมีอยู่ writeupdate: สร้างไฟล์ว่างเปล่าและเปิดขึ้นเพื่ออัพเดต (ทั้งสำหรับอินพุตและเอาต์พุต) หากไฟล์ที่มีชื่อเดียวกันมีอยู่แล้วเนื้อหาจะถูกยกเลิกและไฟล์จะถือว่าเป็นไฟล์ว่างเปล่าใหม่ appendupdate: เปิดไฟล์สำหรับอัพเดต (ทั้งสำหรับอินพุตและเอาต์พุต) พร้อมกับการดำเนินการออกทั้งหมดที่เขียนข้อมูลในตอนท้ายของไฟล์ การดำเนินการจัดตำแหน่ง (fseek. fsetpos. rewind) มีผลต่อการดำเนินการป้อนข้อมูลครั้งต่อไป แต่การดำเนินการส่งออกจะเลื่อนตำแหน่งกลับไปที่จุดสิ้นสุดของไฟล์ แฟ้มถูกสร้างขึ้นหากไม่มีอยู่ กับ specifiers โหมดเหนือไฟล์จะเปิดเป็นไฟล์ข้อความ ในการเปิดไฟล์เป็นไฟล์ไบนารี ต้องมีอักขระ b เข้าไปในสตริงโหมด ตัวอักษร b เพิ่มเติมนี้สามารถถูกผนวกเข้าไว้ในตอนท้ายของสตริง (เช่นทำให้โหมดผสมต่อไปนี้: rb, wb, ab, rb, wb, ab) หรือแทรกระหว่างตัวอักษรและเครื่องหมายสำหรับโหมดผสม (rb, wb, ab) มาตรฐาน C ใหม่ (C2011 ซึ่งไม่ใช่ส่วนของ C) จะเพิ่มตัวย่อยย่อยมาตรฐานใหม่ (x) ซึ่งสามารถผนวกเข้ากับตัวระบุ w (เพื่อสร้าง wx wbx. wx หรือ wbxwbx) ตัวแบ่งย่อยนี้บังคับให้ฟังก์ชันล้มเหลวหากมีไฟล์อยู่แทนการเขียนทับ หากมีอักขระเพิ่มเติมตามลำดับการทำงานขึ้นอยู่กับการใช้ไลบรารี: การใช้งานบางอย่างอาจไม่สนใจอักขระอื่น ๆ เพื่อให้ตัวอย่างเช่นมีการเพิ่ม t (บางครั้งใช้เพื่อระบุไฟล์อย่างชัดเจน) ในการใช้งานไลบรารีบางอย่างการเปิดหรือสร้างไฟล์ข้อความที่มีโหมดอัพเดตอาจถือว่าสตรีมแทนเป็นไฟล์ไบนารี ชี้กระแสไปยังออบเจกต์ FILE ที่ระบุสตรีมที่จะเปิดใหม่ ค่าที่ส่งกลับถ้าไฟล์ถูกเปิดใหม่ฟังก์ชันจะคืนค่าตัวชี้ที่ส่งผ่านเป็นสตรีมพารามิเตอร์ ซึ่งสามารถใช้เพื่อระบุสตรีมที่เปิดใหม่ มิฉะนั้นจะมีการส่งคืนตัวชี้ค่า null ในการใช้งานห้องสมุดส่วนใหญ่ตัวแปร errno จะถูกตั้งค่าเป็นรหัสข้อผิดพลาดเฉพาะระบบเมื่อความล้มเหลวเปิดไฟล์ที่ชื่อที่ระบุไว้ในชื่อไฟล์พารามิเตอร์และเชื่อมโยงกับสตรีมที่สามารถระบุได้ในการดำเนินงานในอนาคตโดยตัวชี้ FILE . การดำเนินงานที่ได้รับอนุญาตในสตรีมและวิธีการเหล่านี้จะถูกกำหนดโดยพารามิเตอร์โหมด สตรีมที่ส่งคืนจะถูกบัฟเฟอร์เต็มตามค่าเริ่มต้นหากไม่ทราบถึงอุปกรณ์เชิงโต้ตอบ (ดู setbuf) ตัวชี้ที่ส่งคืนสามารถถูกแยกออกจากไฟล์ได้โดยการเรียก fclose หรือ freopen ไฟล์ที่เปิดทั้งหมดจะถูกปิดโดยอัตโนมัติเมื่อสิ้นสุดโปรแกรมตามปกติ สภาพแวดล้อมการทำงานสนับสนุนไฟล์ FOPENMAX อย่างน้อยหนึ่งไฟล์ที่เปิดพร้อมกัน พารามิเตอร์ชื่อไฟล์ C สตริงที่มีชื่อของไฟล์ที่จะเปิด ค่าดังกล่าวจะต้องเป็นไปตามข้อกำหนดของชื่อไฟล์ของสภาพแวดล้อมที่ใช้งานและอาจรวมถึงเส้นทาง (หากได้รับการสนับสนุนโดยระบบ) โหมด C ที่มีโหมดการเข้าถึงไฟล์ สามารถ: อ่าน: เปิดไฟล์สำหรับการดำเนินการป้อนข้อมูล ไฟล์ต้องมีอยู่ เขียน: สร้างไฟล์ว่างสำหรับการดำเนินการออก หากไฟล์ที่มีชื่อเดียวกันมีอยู่แล้วเนื้อหาจะถูกยกเลิกและไฟล์จะถือว่าเป็นไฟล์ว่างเปล่าใหม่ ผนวก: เปิดไฟล์สำหรับเอาต์พุตที่ท้ายไฟล์ การดำเนินการออกเสมอเขียนข้อมูลที่ท้ายแฟ้มขยาย การดำเนินการจัดตำแหน่ง (fseek. fsetpos. rewind) จะถูกละเว้น แฟ้มถูกสร้างขึ้นหากไม่มีอยู่ readupdate: เปิดไฟล์สำหรับอัพเดต (ทั้งสำหรับอินพุตและเอาต์พุต) ไฟล์ต้องมีอยู่ writeupdate: สร้างไฟล์ว่างเปล่าและเปิดขึ้นเพื่ออัพเดต (ทั้งสำหรับอินพุตและเอาต์พุต) หากไฟล์ที่มีชื่อเดียวกันมีอยู่แล้วเนื้อหาจะถูกยกเลิกและไฟล์จะถือว่าเป็นไฟล์ว่างเปล่าใหม่ appendupdate: เปิดไฟล์สำหรับการอัพเดท (ทั้งสำหรับอินพุตและเอาต์พุต) พร้อมกับการดำเนินการออกทั้งหมดที่เขียนข้อมูลในตอนท้ายของไฟล์ การดำเนินการจัดตำแหน่ง (fseek. fsetpos. rewind) มีผลต่อการดำเนินการป้อนข้อมูลครั้งต่อไป แต่การดำเนินการส่งออกจะเลื่อนตำแหน่งกลับไปที่จุดสิ้นสุดของไฟล์ แฟ้มถูกสร้างขึ้นหากไม่มีอยู่ กับ specifiers โหมดเหนือไฟล์จะเปิดเป็นไฟล์ข้อความ ในการเปิดไฟล์เป็นไฟล์ไบนารี ต้องมีอักขระ b เข้าไปในสตริงโหมด ตัวอักษร b เพิ่มเติมนี้สามารถถูกผนวกเข้าไว้ในตอนท้ายของสตริง (เช่นทำให้โหมดผสมต่อไปนี้: rb, wb, ab, rb, wb, ab) หรือแทรกระหว่างตัวอักษรและเครื่องหมายสำหรับโหมดผสม (rb, wb, ab) มาตรฐาน C ใหม่ (C2011 ซึ่งไม่ใช่ส่วนของ C) จะเพิ่มตัวย่อยย่อยมาตรฐานใหม่ (x) ซึ่งสามารถผนวกเข้ากับตัวระบุ w (เพื่อสร้าง wx wbx. wx หรือ wbxwbx) ตัวแบ่งย่อยนี้บังคับให้ฟังก์ชันล้มเหลวหากมีไฟล์อยู่แทนการเขียนทับ หากมีอักขระเพิ่มเติมตามลำดับการทำงานขึ้นอยู่กับการใช้ไลบรารี: การใช้งานบางอย่างอาจไม่สนใจอักขระอื่น ๆ เพื่อให้ตัวอย่างเช่นมีการเพิ่ม t (บางครั้งใช้เพื่อระบุไฟล์อย่างชัดเจน) ในการใช้งานไลบรารีบางอย่างการเปิดหรือสร้างไฟล์ข้อความที่มีโหมดอัพเดตอาจถือว่าสตรีมแทนเป็นไฟล์ไบนารี ไฟล์ข้อความคือไฟล์ที่มีลำดับของบรรทัดข้อความ การแปลงอักขระพิเศษบางอย่างอาจเกิดขึ้นในการดำเนินการอินพุตเอาต์พุตในโหมดข้อความเพื่อปรับให้เข้ากับรูปแบบไฟล์ข้อความเฉพาะระบบทั้งนี้ขึ้นอยู่กับสภาพแวดล้อมที่แอ็พพลิเคชันทำงาน แม้ว่าในสภาพแวดล้อมบางอย่างจะไม่มีการแปลงเกิดขึ้นทั้งไฟล์ข้อความและไฟล์ไบนารีจะได้รับการปฏิบัติแบบเดียวกันการใช้โหมดที่เหมาะสมช่วยเพิ่มความสามารถในการพกพา สำหรับไฟล์ที่เปิดอยู่สำหรับการอัพเดท (ซึ่งมีเครื่องหมาย) ซึ่งสามารถใช้งานได้ทั้งแบบอินพุตและเอาต์พุตสตรีมจะต้องล้างข้อมูล (fflush) หรือเปลี่ยนตำแหน่ง (fseek. fsetpos rewind) ก่อนการอ่านที่เกิดขึ้นหลังจากการเขียน จะต้องมีการปรับตำแหน่งสตรีม (fseek. fsetpos. rewind) ก่อนดำเนินการเขียนตามการอ่าน (เมื่อใดก็ตามที่การดำเนินการไม่ถึงจุดจบของไฟล์) ค่าที่ส่งกลับถ้าแฟ้มถูกเปิดสำเร็จฟังก์ชันจะส่งกลับตัวชี้ไปยังวัตถุ FILE ที่สามารถใช้เพื่อระบุกระแสข้อมูลสำหรับการดำเนินงานในอนาคต มิฉะนั้นจะมีการส่งคืนตัวชี้ค่า null ในการใช้งานห้องสมุดส่วนใหญ่ตัวแปร errno จะถูกตั้งค่าเป็นรหัสข้อผิดพลาดเฉพาะระบบเมื่อความล้มเหลว

Comments