สวัสดีและยินดีต้อนรับกลับ
เราอยู่ในส่วนใหม่
ส่วนนี้เกี่ยวกับไฟล์อินพุตและเอาต์พุตการเขียนและการอ่านจากไฟล์
เราจะเน้นไปที่ไฟล์ข้อความ แต่เราจะพูดถึงไฟล์ไบนารีด้วยเช่นกัน
ในการบรรยายนี้ ฉันแค่อยากจะให้ภาพรวม บอกคุณว่าไฟล์คืออะไร และบอกคุณว่ามันมีประโยชน์อย่างไรในการจัดเก็บข้อมูลถาวร
จนถึงตอนนี้ ข้อมูลทั้งหมดที่โปรแกรมของเราเข้าถึงได้ผ่านทางหน่วยความจำ
เราคุ้นเคยกับแนวคิดเรื่องตัวแปร โครงสร้าง ไม่ว่ามันจะเป็นอะไร
ลบข้อมูลทั้งหมดที่โปรแกรมของคุณใช้อยู่ในหน่วยความจำ
และเหตุผลที่มันถูกเก็บไว้ในหน่วยความจำก็เพราะว่าความทรงจำนั้นเร็วมาก และคุณสามารถเข้าถึงมันได้อย่างรวดเร็วเพื่อทำการคำนวณ
คุณกำลังดึงข้อมูล ดำเนินการวงจร ทั้งหมดนั้น
ดังนั้นขอบเขตแต่ก็ถูกจำกัดด้วยเพราะว่าขอบเขตและความหลากหลายของแอพพลิเคชั่นของเรา
ถ้าใช้แค่หน่วยความจำก็จะค่อนข้างจำกัด
เราทราบดีว่าหน่วยความจำจะหายไปเมื่อโปรแกรมหยุดทำงาน ดังนั้นจึงมีข้อจำกัดอย่างมาก
แอปพลิเคชันทางธุรกิจที่จริงจังทั้งหมดต้องการข้อมูลมากกว่าที่จะใส่ลงในหน่วยความจำหลักได้
หน่วยความจำหลักก็เล็กมากเช่นกัน
และทุกวันนี้คุณสามารถมีหน่วยความจำได้มากตั้งแต่ 1630 ถึง 32 กิกะไบต์
แต่ในอดีต และโดยเฉพาะอย่างยิ่งในอุปกรณ์ฝังตัว คุณไม่มี RAM มากพอ และด้วยเหตุนี้ แอปพลิเคชันของคุณจึงถูกจำกัดอย่างมากเนื่องจากพื้นที่และขนาด
คุณต้องการเก็บตัวแปรและสิ่งต่าง ๆ เช่นนั้นไว้ในหน่วยความจำหลักเท่านั้น
เนื่องจากหน่วยความจำหลักหายไปเมื่อโปรแกรมหายไป
คุณไม่สามารถมีข้อมูลใด ๆ ที่เก็บไว้อย่างต่อเนื่องในการรีบูต
ดังนั้นทั้งหมดจึงขึ้นอยู่กับความสามารถในการประมวลผลข้อมูลที่คงอยู่และจัดเก็บไว้ในอุปกรณ์ภายนอก
เช่น ฮาร์ดดิสก์ไดรฟ์ โปรแกรมขนาดใหญ่เหล่านี้
ดังนั้นคุณจึงต้องการมีความสามารถนี้ในการจัดเก็บบนฮาร์ดไดรฟ์
มันช้ากว่าเล็กน้อย แต่คุณสามารถเก็บข้อมูลได้มากมายและโปรแกรมขนาดใหญ่จำเป็นต้องเก็บข้อมูลจำนวนมาก
C มีฟังก์ชันมากมายในมาตรฐานไฟล์ส่วนหัวสำหรับการเขียนและอ่านจากอุปกรณ์ภายนอก
คุณไม่จำเป็นต้องเขียนโค้ดของคุณเองเพื่ออ่านและเขียนไฟล์ แต่คุณสามารถเห็นข้อดีของแอปพลิเคชันที่มีความสามารถในการจัดเก็บข้อมูลได้เป็นเวลานาน
ข้อดีมากมาย
อุปกรณ์ภายนอกที่คุณจะใช้สำหรับจัดเก็บและเรียกข้อมูลมักจะเป็นฮาร์ดไดรฟ์ของดิสก์ไดรฟ์
อย่างไรก็ตาม ฟังก์ชันไฟล์ส่วนหัวที่เราจะพูดถึงคุณสามารถใช้กับอุปกรณ์จัดเก็บข้อมูลภายนอกใดๆ ก็ได้
ดังนั้นคุณสามารถใช้มันบนไดรฟ์ USB คุณสามารถใช้มันบนอุปกรณ์ภายนอกที่เก็บข้อมูลและไดรฟ์ SSD อะไรก็ได้ที่มีตัวอย่างทั้งหมด
จนถึงปัจจุบัน ข้อมูลที่ผู้ใช้ป้อนจะสูญหายไป
เมื่อสิ้นสุดโปรแกรมจะเรียกว่าหน่วยความจำระเหย
เมื่อใดก็ตามที่คุณได้ยินคำว่า vol time memory หมายความว่าหน่วยความจำไม่คงอยู่หรือข้อมูลไม่คงอยู่
จะหายไปเมื่อโปรแกรมสิ้นสุดหรือหากเครื่องรีบูต
ดังนั้นหากผู้ใช้ต้องการเรียกใช้โปรแกรมด้วยข้อมูลเดียวกัน เขาต้องป้อนใหม่ทุกครั้งเพื่อให้ได้รับการกู้คืน
มันไม่สะดวกมาก
มันจำกัดการเขียนโปรแกรม
และอีกครั้ง นี่คือความทรงจำที่ผันผวน
เมื่อคุณจัดเก็บข้อมูลในไฟล์และจัดเก็บไว้ในฮาร์ดไดรฟ์ นี่คือที่จัดเก็บข้อมูลถาวร
มันยังคงอยู่ที่นั่น
แม้กระทั่งเมื่อคุณรีบูทเครื่องหรือเมื่อโปรแกรมของคุณไม่ทำงาน
นั่นเรียกว่าหน่วยความจำแบบไม่ลบเลือนเพราะจะอยู่ภายในไฟล์ สามารถจัดเก็บข้อมูลที่ไม่ลบเลือน และมักจะถูกจัดเก็บไว้ในดิสก์หรือปัจจุบันเป็นโซลิดสเตตไดรฟ์และ
SSD
เป็นส่วนของการจัดเก็บที่มีชื่อและมาตรฐาน IO ของสตั๊ดคือไฟล์ที่มีการใช้ข้อมูลเพื่อให้สามารถอ่านและเขียนไปยังไฟล์เหล่านั้นได้
แต่เราจะใช้แนวคิดนี้ในการเขียนและอ่านข้อมูลจากไฟล์สำหรับการจัดเก็บถาวร
และคุณจะสังเกตเห็นว่าแอปพลิเคชันของคุณมีประโยชน์มากขึ้น แข็งแกร่งขึ้นมาก ปรับขนาดได้มากขึ้น
เพราะตอนนี้เรามีความสามารถ เพื่อเก็บข้อมูลจำนวนมากและเราไม่ต้องกังวลว่าข้อมูลจะหายไปเมื่อใดก็ตามที่โปรแกรมสิ้นสุดหรือคอมพิวเตอร์รีบูต
ดังนั้นการใช้ไฟล์จะมีประโยชน์มาก
ไฟล์ภายในระบบปฏิบัติการ Linux หรือระบบปฏิบัติการ Windows ถูกจัดเก็บด้วยวิธีใดวิธีหนึ่ง
แต่เท่าที่ภาษา C ดำเนินไป ภาษาโปรแกรมก็เป็นแค่ลำดับของไบต์ในแต่ละไบต์เท่านั้นที่สามารถอ่านแยกกันได้
สิ่งนี้สอดคล้องกับโครงสร้างไฟล์ใน Unix แต่ไม่จำเป็น
มันสร้างความแตกต่างได้ก็ต่อเมื่อคุณอ่านไฟล์ข้อความและหน้าต่างเท่านั้น เนื่องจากคุณอาจมีอักขระพิเศษที่คุณต้องกังวลเกี่ยวกับขนาด
แต่มันเป็นเพียงลำดับไบต์
ดังนั้น หากคุณมีไฟล์ข้อความและมีไบต์มากกว่า คุณก็ยังอ่านไบต์เหล่านั้นได้
คุณเพียงแค่ต้องเข้าใจว่าไบต์เหล่านั้นหมายถึงอะไร
นี่คือลักษณะของไฟล์ และเราจะอ่านและเขียนมันโดยใช้ภาษาซีอย่างไร
เป็นเพียงชุดของไบต์ที่มีออฟเซ็ตต่างกัน
จุดเริ่มต้นของไฟล์จะเป็นศูนย์ จากนั้นคุณจะพบตำแหน่งต่างๆ ในไฟล์เสมอ
อาจเป็นสี่ อาจเป็นสี่คูณสิบสอง อาจเป็น 100 ไบต์
จากนั้นคุณจะมีจุดสิ้นสุดของไฟล์และจุดสิ้นสุดของไฟล์ซึ่งมักจะทำเครื่องหมายด้วยเครื่องหมายพิเศษที่เรียกว่า
EOF และไฟล์
ดังนั้นไฟล์จึงมีจุดเริ่มต้นและจุดสิ้นสุดและตำแหน่งปัจจุบัน
ตำแหน่งปัจจุบันถูกกำหนดไว้มากมายในตอนเริ่มต้น
ตำแหน่งปัจจุบันคือตำแหน่งที่การดำเนินการกับไฟล์จะเกิดขึ้น
คุณจะเขียนหรือคุณจะอ่านที่ตำแหน่งนั้น
และเราจะพูดถึงฟังก์ชันบางอย่างที่คุณสามารถย้ายไปรอบๆ เพื่อย้ายตำแหน่งปัจจุบันได้ทุกที่ที่คุณต้องการในไฟล์
แม้ในตอนท้ายถ้าคุณต้องการอ่านตอนจบหรือขวาจนจบ
ไฟล์มีสองประเภท
มีไฟล์ข้อความและไฟล์ไบนารี
ไฟล์ข้อความคือข้อมูลที่เขียนเป็นลำดับของอักขระที่จัดเป็นบรรทัด
แต่ละบรรทัดลงท้ายด้วยบรรทัดใหม่ และข้อมูลข้อความอาจแตกต่างกันไปในแต่ละระบบ ขึ้นอยู่กับวิธีการตีความอักขระ
ตัวอย่างเช่น บน Windows ใน DOS ทุกบรรทัดมีการขึ้นบรรทัดใหม่และการป้อนบรรทัด ดังนั้นแบ็กสแลช
R และแบ็กสแลช N
ดังนั้นเมื่อคุณอ่านข้อมูลหรือเขียนข้อมูล คุณต้องเข้าใจสิ่งนี้เพราะรูปแบบแตกต่างกันเล็กน้อย
แต่บน Linux คุณไม่มีแบ็กสแลช
R ดังนั้น คุณต้องเข้าใจวิธีการเขียนข้อมูลข้อความ แม้ว่าจะจัดเรียงตามบรรทัดและเป็นชุดของไบต์
ข้อมูลไบนารีจะถูกเขียนเป็นชุดของไบต์ตามที่ปรากฏในหน่วยความจำ
ตัวอย่างของไฟล์ที่มีข้อมูลไบนารีก็คือข้อมูล
ไฟล์ของเรา เช่น ข้อมูลภาพหรือไฟล์ไบนารีที่เข้ารหัสเพลงไม่สามารถอ่านได้
ถ้าคุณจะพยายามที่จะนำมาไว้ในโปรแกรมแก้ไขข้อความเนื่องจากเป็นเพียงไบต์ เราจะเน้นที่ไฟล์ข้อความในส่วนนี้
แต่คุณสามารถเขียนข้อมูลใดๆ ที่คุณต้องการลงในไฟล์ได้
คุณสามารถเขียนเป็นชุดไบต์และวิธีที่ปรากฏในหน่วยความจำ หรือเขียนเป็นข้อความก็ได้
แต่เมื่อเขียนไฟล์แล้ว มันจะประกอบด้วยชุดของไบต์ แม้ว่าจะแสดงเป็นข้อความก็ตาม
คุณสามารถดูไฟล์ข้อความในตัวแก้ไข ซึ่งทำให้อ่านได้ง่ายขึ้น
คุณต้องเข้าใจว่ารูปแบบของไฟล์นั้นเพื่อที่จะอ่านมัน และนี่คือสิ่งที่ผมพูดถึงถ้าคุณใช้
DOS Windows หรือ Linux โดยที่ Windows อาจมีอักขระพิเศษเมื่อเขียนข้อมูล
ดังนั้น ลำดับขนาด 12 ไบต์ในไฟล์ไบนารีสามารถมีอักขระได้ 12 ตัว อาจเป็นจำนวนเต็มเครื่องหมาย 12
แปดคูณแปดบิต หรือจำนวนเต็มที่ไม่ได้ลงนาม 12 ตัว
ไฟแบบไบนารีนั้นยากเป็นพิเศษเพราะพวกเขาแค่เก็บวัตสันไว้เป็นความทรงจำที่ชัดเจน
ดังนั้นในโหมดไบนารี ไฟล์แต่ละบิตสามารถเข้าถึงได้
แต่เพื่อที่จะอ่านบางสิ่งจากไฟล์ คุณต้องเข้าใจว่ามีอะไรอยู่ในนั้นบ้าง เท่าที่ข้อมูลและมันถูกเก็บไว้อย่างไร
และอาจขึ้นอยู่กับว่าคุณใช้ระบบใด
และมันยังขึ้นอยู่กับว่ามันเป็นข้อความหรือเลขฐานสอง
สตรีม
โปรแกรม C จะเปิดขึ้นโดยอัตโนมัติในสามไฟล์ในนามของคุณ
สตรีมสามารถแสดงไฟล์ได้ แต่สตรีมเป็นคำทั่วไปที่สามารถแสดงถึงอินพุตประเภทใดก็ได้
มันสามารถเป็นตัวแทนของคีย์บอร์ด มันสามารถเป็นตัวแทนของคอนโซล มันสามารถเป็นตัวแทนของไฟล์ มันสามารถเป็นตัวแทนของซ็อกเก็ต
หากคุณคุ้นเคยกับการสตรีมเครือข่ายเป็นคำทั่วไป และมีสามสตรีมที่เปิดขึ้นโดยอัตโนมัติสำหรับคุณในภาษาการเขียนโปรแกรม
C
หนึ่งคืออินพุตมาตรฐาน และนี่คืออุปกรณ์อินพุตปกติของระบบของคุณ
โดยปกติแล้วจะเป็นแป้นพิมพ์
เราใช้อินพุตมาตรฐานเมื่อเราสแกน F แต่คุณสามารถใช้ scan off เพื่ออ่านจากไฟล์ได้
หากคุณเปลี่ยนอินพุตสตรีม บางทีคุณอาจเปลี่ยนอินพุตสตรีมเป็นเอาต์พุตมาตรฐานของไฟล์ ซึ่งมักจะแสดงบนหน้าจอ
โดยปกติแล้วจะผ่านทางคอนโซล
ข้อผิดพลาดมาตรฐานก็ปรากฏบนหน้าจอเช่นกัน แต่คุณมักจะต้องเปลี่ยนเส้นทางเพื่อดูมันโดยใช้เครื่องหมายและสามหรืออะไรทำนองนั้น
แต่นี่คือผลลัพธ์สามประการที่ฉันกล่าวถึง
อินพุตมาตรฐานคือไฟล์ที่กีตาร์อ่านและสแกน F เอาต์พุตมาตรฐานถูกใช้โดยเอาต์พุตของเราและการพิมพ์
F ส่วนใหญ่เราใช้ printf
คุณยังสามารถเปลี่ยนเส้นทางไฟล์บนระบบเพื่อให้รู้จักเป็นเอาต์พุตอินพุตมาตรฐาน
นี่คือการเปลี่ยนเส้นทาง
นี่คือแนวคิดของระบบปฏิบัติการที่คุณสามารถเปลี่ยนเส้นทางข้อมูล ส่งเอาต์พุตไปยังไฟล์ เช่น หรือส่งข้อมูลเข้า
รับอินพุตจากไฟล์ซึ่งต่างจากมาตรฐาน
นี่คือที่ที่คุณสามารถใช้สัญลักษณ์น้อยกว่าหรือมากกว่า
วัตถุประสงค์ของเอาต์พุตข้อผิดพลาดมาตรฐานคือการจัดเตรียมตำแหน่งที่ชัดเจนทางตรรกะในการส่งข้อความแสดงข้อผิดพลาด
ดังนั้นจึงเป็นแบบแยกจากกันแม้ว่าจะแสดงไปที่หน้าจอก็ตาม
ในการเข้าถึงนั้น คุณต้องมีคำสั่งพิเศษ
สตรีมคือการแสดงนามธรรมของแหล่งข้อมูลภายนอกหรือปลายทางสำหรับข้อมูล
นี่คือเหตุผลที่ว่าทำไมมันถึงเป็นแบบทั่วไปมากกว่าพูดเป็นไฟล์
คีย์บอร์ด.
บรรทัดคำสั่งบนไฟล์ที่แสดงของคุณบนดิสก์
ทั้งหมดนี้คือตัวอย่างวิธีการทำงานกับสตรีมของคุณ
สตรีมจะมีความสำคัญมากขึ้นเมื่อคุณเริ่มเรียนภาษา C++
ไลบรารี C มีฟังก์ชันสำหรับการอ่านและเขียนไปยังหรือจากสตรีมข้อมูล คุณจึงสามารถใช้ฟังก์ชันเอาต์พุตอินพุตเดียวกันสำหรับการอ่านและเขียนอุปกรณ์ภายนอกใดๆ
ที่จับคู่กับสตรีมได้
นั่นเป็นเหตุผลที่ฉันบอกว่าคุณสามารถใช้ scan F เพื่ออ่านจากแป้นพิมพ์ได้
คุณสามารถใช้ scan F เพื่ออ่านจากไฟล์ได้
ทุกอย่างขึ้นอยู่กับอินพุตที่สตรีมชี้ไปที่ใด
ดังนั้น ฟังก์ชันต่างๆ จึงมีประโยชน์มาก และยืดหยุ่นมากในการทำเช่นนี้
และนี่เป็นเพียงภาพรวมระดับสูงว่าไฟล์คืออะไร และทำไมเราจะใช้มัน มันเป็นข้อมูลถาวรอย่างไร
มันคือหน่วยความจำแบบไม่ลบเลือน
มันอยู่รอบๆ เรากำลังจะใช้มัน และเราจะใช้ไฟล์ส่วนหัว IO มาตรฐานเพื่ออ่านและเขียนเมื่อเราต้องการเก็บข้อมูลสำหรับโปรแกรมของเรา
และโปรแกรมของเราจะแข็งแกร่งขึ้นมาก ใช้งานได้หลากหลาย คล่องตัวกว่ามาก
ดังนั้นในการบรรยายครั้งต่อไป เราจะพูดถึงการนำสิ่งนี้ไปใช้จริงโดยใช้ฟังก์ชันในส่วนหัว
IO มาตรฐาน
ขอขอบคุณ.