ภาษา C มีฟังก์ชันหลายอย่างที่อนุญาตให้อ่านไฟล์ได้ ฟังก์ชันที่ใช้บ่อยที่สุดคือฟังก์ชัน read() และ fread() ภาษานี้ยังจัดเตรียมวิธีการอ่านอักขระทีละอักขระด้วยฟังก์ชัน เช่น getchar()
สิ่งสำคัญคือต้องทราบฟังก์ชันการประมวลผลไฟล์ วิธีการเรียก อาร์กิวเมนต์อินพุตและเอาต์พุต ฯลฯ เพื่อใช้งานได้อย่างคล่องแคล่ว เนื่องจากเป็นทรัพยากรที่โปรแกรมเมอร์มีไว้เพื่อจัดเก็บและกำจัดข้อมูลที่เก็บไว้ในระบบ
ในบทความ Linuxhint นี้ คุณจะได้เรียนรู้วิธีใช้ฟังก์ชัน read() เพื่ออ่านไฟล์
เราจะอธิบายทุกอย่างเกี่ยวกับเอลล่านี้ ไวยากรณ์ของมัน การเรียกใช้เมธอด อาร์กิวเมนต์อินพุตและเอาท์พุต ประเภทข้อมูลที่แต่ละอันยอมรับ และวิธีการประกาศอย่างถูกต้อง
จากนั้นเราจะนำสิ่งที่เราเรียนรู้โดยการนำคุณลักษณะนี้ไปใช้เป็นตัวอย่างในทางปฏิบัติ
เพื่อให้คุณทราบอย่างเต็มที่เกี่ยวกับวิธีการใช้ฟังก์ชัน read() เราได้เพิ่มส่วนพิเศษที่อธิบายข้อผิดพลาดทั้งหมดที่อาจเกิดขึ้นเมื่อใช้ฟังก์ชันนี้ เช่นเดียวกับการตรวจจับและการระบุข้อผิดพลาด เพื่อที่คุณจะได้มีเทคนิคที่จำเป็นสำหรับการแก้ไขอย่างรวดเร็วในกรณีที่เกิดข้อผิดพลาด
ไวยากรณ์ของฟังก์ชัน Read() ในภาษา C
size_t อ่าน(int fd, โมฆะ *buf, size_t นับ);
ป>
คำอธิบายของฟังก์ชัน Read()
ฟังก์ชัน read() อ่านเนื้อหาของไฟล์ที่เปิดซึ่งระบุโดยคำอธิบายในอาร์กิวเมนต์อินพุต "fd" ฟังก์ชันนี้จะอ่านและคัดลอกเนื้อหาของไฟล์ลงในบัฟเฟอร์ที่ชี้ไปที่ "buf" พร้อมจำนวนไบต์ ตัวระบุ “fd” เป็นจำนวนเต็มที่ถูกส่งคืนโดยเป็นผลมาจากฟังก์ชัน open() เมื่อเปิดไฟล์
หากฟังก์ชัน read() ส่งคืนสำเร็จ ก็จะส่งคืนจำนวนไบต์ที่อ่าน ผลลัพธ์เท่ากับ 0 หมายความว่าไฟล์ถูกอ่านจนจบ และ -1 หมายความว่ามีข้อผิดพลาดเกิดขึ้น
ข้อผิดพลาดเฉพาะสามารถระบุได้โดยการดึงรหัสจากตัวแปร "errno" ส่วนกลาง หลังจากนั้น คุณจะพบส่วนที่อธิบายข้อผิดพลาดที่อาจเกิดขึ้นเมื่อใช้ฟังก์ชัน read() และเทคนิคในการตรวจจับและระบุข้อผิดพลาด
ฟังก์ชัน read() ได้รับการประกาศในส่วนหัว “unistd.h” หากต้องการใช้งาน คุณต้องรวมไฟล์นี้ไว้ในโค้ดของคุณดังนี้:
วิธีการอ่านไฟล์ด้วยฟังก์ชัน Read()
ในตัวอย่างนี้ เราจะอธิบายวิธีการเปิดและอ่านไฟล์โดยใช้ฟังก์ชัน open() และ read()
เพื่อจุดประสงค์นี้ ก่อนหน้านี้เราได้สร้างไฟล์ข้อความที่มีชื่อ "example.txt" ผ่านทาง Linux Manager และบันทึกไว้ในไดเร็กทอรี "Documents" จากนั้น เราก็เขียนย่อหน้าแรกของบทความนี้ลงไป
ขั้นตอนแรกในการพัฒนาโค้ดเพื่ออ่านไฟล์คือการรวมส่วนหัวที่จำเป็นและสร้างฟังก์ชัน main() ที่ส่งคืนค่าว่าง เรากำหนดจำนวนเต็ม "fd" ซึ่งทำหน้าที่เป็นตัวอธิบายไฟล์ ซึ่งเป็นบัฟเฟอร์ 1,024 อักขระที่เรียกว่า "buff" ซึ่งข้อมูลที่อ่านโดย read() จะถูกเก็บไว้ เส้นทางอาร์เรย์จะเก็บเส้นทางและชื่อของไฟล์ที่เราต้องการอ่าน
หลังจากกำหนดตัวแปรที่จำเป็นแล้ว เราจะเรียกใช้ฟังก์ชัน open() เพื่อเปิดไฟล์ เราเรียกฟังก์ชันนี้โดยการส่งผ่านอาร์เรย์เส้นทางพร้อมกับเส้นทางและชื่อของไฟล์เป็นอาร์กิวเมนต์อินพุตแรก และระบุแฟล็ก O_RDONLY เป็นอาร์กิวเมนต์ที่สอง เนื่องจากเป็นอาร์กิวเมนต์เอาต์พุต เราจะส่งจำนวนเต็ม “fd” โดยที่ open() ส่งคืนคำอธิบายที่เราใช้ในการอ่านไฟล์
เมื่อเราเปิดไฟล์แล้ว เราจะอ่านเนื้อหาโดยเรียกใช้ฟังก์ชัน read() และส่งผ่านตัวอธิบาย “fd” เป็นอาร์กิวเมนต์แรกที่ฟังก์ชัน open() ส่งคืน สำหรับอาร์กิวเมนต์ที่สอง เราจะส่งตัวชี้ไปยังบัฟเฟอร์ "buff" ซึ่งเราจัดเก็บเนื้อหาที่จะอ่าน และสุดท้ายขนาดของบัฟเฟอร์ซึ่งในกรณีนี้คือ 1024 ไบต์
จากนั้นเราใช้ฟังก์ชัน printf() เพื่อแสดงเนื้อหาที่เก็บไว้ใน buff ในคอนโซลคำสั่ง นี่คือโค้ดที่สมบูรณ์สำหรับตัวอย่างนี้:
#รวม
#รวม
#รวม
#รวม
int หลัก()
{
อินท์เอฟดี;
ถ่านบัฟ [1024];
เส้นทางถ่าน[] ="เอกสาร/example.txt";
fd =เปิด (เส้นทาง, O_RDONLY);
อ่าน(fd, บัฟ, 1024);
printf("\n\n%s\n\n",บัฟ);
ในรูปต่อไปนี้ เราจะเห็นการคอมไพล์และการดำเนินการของโค้ดนี้ ดังที่เราเห็น read() ใส่เนื้อหาทั้งหมดของไฟล์ “example.txt” ลงใน “buff” และฟังก์ชัน printf() จะพิมพ์ลงในคอนโซลคำสั่ง:

วิธีการตรวจจับและระบุข้อผิดพลาดที่อาจเกิดขึ้นเมื่อใช้ฟังก์ชัน Read()
การใช้ read() อาจทำให้เกิดข้อผิดพลาดต่างๆ ได้ เมื่อสิ่งนี้เกิดขึ้น ฟังก์ชันนี้จะส่งคืนผลลัพธ์ที่เท่ากับ -1
วิธีที่ง่ายที่สุดในการตรวจสอบว่าเกิดข้อผิดพลาดหรือไม่คือการใช้เงื่อนไข "if" โดยที่เงื่อนไขคือค่าที่ส่งคืนเป็น -1 ตอนนี้เรามาดูกันว่าคุณสามารถใช้วิธีนี้เพื่อตรวจสอบว่าเกิดข้อผิดพลาดได้อย่างไร:
อินท์เอ็น;
n =อ่าน (fd, บัฟ, 1024);
ถ้า ( n ==-1){
printf ("เกิดข้อผิดพลาดขณะพยายามอ่านไฟล์");
หากฟังก์ชัน read() กลับมาพร้อมข้อผิดพลาด ฟังก์ชันจะเปลี่ยนไปใช้คำสั่ง "if" และพิมพ์ข้อความ "An error allowanceed while try to read the file"
เมื่อเกิดข้อผิดพลาด รหัสตัวเลขจะถูกจัดเก็บโดยอัตโนมัติในตัวแปร “errno” ส่วนกลางซึ่งกำหนดไว้ในส่วนหัว “errno.h” รหัสนี้สามารถใช้เพื่อระบุข้อผิดพลาดที่เกิดขึ้น
ต่อไปนี้เป็นข้อความที่ตัดตอนมาพร้อมข้อผิดพลาดที่ฟังก์ชัน read() สามารถสร้างได้และถูกกำหนดไว้ในส่วนหัว “errno.h” พร้อมด้วยคำอธิบายโดยย่อของแต่ละข้อผิดพลาดและค่าจำนวนเต็มที่เกี่ยวข้อง:
ค่าคำจำกัดความใน errno ข้อผิดพลาดEAGAIN 11ลองอีกครั้งEBADF 9หมายเลขไฟล์ไม่ถูกต้องEDESTADDRREQ 89ต้องมีที่อยู่ปลายทางEFAULT 14ที่อยู่ไม่ถูกต้องEFBIG 27ไฟล์ใหญ่เกินไปEINTR 4การโทรของระบบถูกขัดจังหวะEINVAL 22อาร์กิวเมนต์ไม่ถูกต้องEIO 5 ข้อผิดพลาด I/OEPERM 1ไม่อนุญาตให้ดำเนินการวิธีที่ง่ายที่สุดในการระบุข้อผิดพลาดคือการเปิดสวิตช์โดยที่ตัวแปร "errno" เป็นเงื่อนไขการกระโดด และแต่ละกรณีเป็นคำจำกัดความของข้อผิดพลาด
ต่อไป ให้เราดูตัวอย่างที่เราพยายามป้อนคำอธิบายที่มีเครื่องหมายลบ ส่งผลให้เกิดข้อผิดพลาด เพื่อระบุข้อผิดพลาด เราใช้เงื่อนไข "ถ้า" ที่เราเห็นในตัวอย่างข้อมูลก่อนหน้า เพื่อระบุสิ่งนี้ เราจะเปิดสวิตช์ที่มีข้อผิดพลาดทั่วไปสามประการที่ฟังก์ชันนี้สามารถสร้างขึ้นได้
#รวม
#รวม
#รวม
#รวม
#รวม
int หลัก()
{
อินท์ fd,n;
ถ่านบัฟ [1024];
เส้นทางถ่าน[] ="เอกสาร/example.txt";
fd =เปิด (เส้นทาง, O_RDONLY);
n =อ่าน (99999999, บัฟ, 1024);
ถ้า (n ==-1){
สวิตช์ (เอ่อ) {
กรณี EBADF:{
printf("หมายเลขไฟล์ไม่ถูกต้อง ข้อผิดพลาด:%i\n", errno);
แตก;}
กรณี EINVAL:{
printf("อาร์กิวเมนต์ไม่ถูกต้อง ข้อผิดพลาด:%i\n", errno);
แตก;}
กรณี EIO:{
printf("ข้อผิดพลาด I/O . ข้อผิดพลาด:%i\n", errno);
แตก;}
}
}
ดังที่เราเห็นในรูปต่อไปนี้ ฟังก์ชัน read() ส่งกลับข้อผิดพลาดเมื่อมีการส่ง descriptor ที่ไม่ถูกต้องเป็นอาร์กิวเมนต์อินพุต และค่าที่ดึงมาจากตัวแปร "errno" ที่ใช้เป็นเงื่อนไขการกระโดดช่วยให้เราสามารถระบุข้อผิดพลาดเมื่อเข้าสู่กรณี EBADF

บทสรุป
ในบทความ Linuxhint นี้ เราได้แสดงให้คุณเห็นถึงวิธีการใช้ฟังก์ชัน read() ซึ่งเป็นหนึ่งในฟังก์ชันทั่วไปที่ใช้งานในภาษา C เพื่ออ่านไฟล์
เราดูที่ไวยากรณ์และส่วนที่อธิบายการดำเนินการทางทฤษฎี อาร์กิวเมนต์อินพุตและเอาต์พุต และประเภทข้อมูล หลังจากนั้น เราได้นำสิ่งที่เราเรียนรู้จากตัวอย่างเชิงปฏิบัติไปใช้ด้วยโค้ดและรูปภาพที่แสดงวิธีการเปิดและอ่านไฟล์โดยใช้ฟังก์ชัน open() และ read()
เพื่อให้มีวิธีที่จำเป็นในการแก้ไขข้อผิดพลาดที่อาจเกิดขึ้นเมื่อใช้ฟังก์ชันนี้ เราได้เพิ่มส่วนพิเศษที่อธิบายวิธีการที่ภาษา C จัดเตรียมไว้เพื่อตรวจจับและระบุข้อผิดพลาด