I/O (Input/Output) ในภาษา C แบ่งเป็น 2 ระดับ:
| ประเภท | เข้าใจง่ายโดย | ข้อดี | ข้อเสีย |
| High-level I/O | มนุษย์ | Portable (เคลื่อนย้ายระหว่างระบบได้) | ช้ากว่า Low-level |
| Low-level I/O | คอมพิวเตอร์ | รวดเร็ว Execution time น้อย | Non-portable (ขึ้นกับระบบปฏิบัติการ) |
ตารางฟังก์ชัน High-Level I/O
| ฟังก์ชัน | คำอธิบาย |
| fprintf() | เขียนข้อมูลแบบจัดรูปแบบลงไฟล์ |
| fscanf() | อ่านข้อมูลแบบจัดรูปแบบจากไฟล์ |
| putc() / fputc() | เขียนอักขระเดี่ยวลงไฟล์ |
| getc() / fgetc() | อ่านอักขระเดี่ยวจากไฟล์ |
| putw() | เขียนจำนวนเต็มลงไฟล์ |
| getw() | อ่านจำนวนเต็มจากไฟล์ |
| fputs() | เขียนสตริงลงไฟล์ |
| fgets() | อ่านสตริงจากไฟล์ |
| fread() | อ่านเรคคอร์ดทั้งหมดจากไฟล์ |
| fwrite() | เขียนเรคคอร์ดทั้งหมดลงไฟล์ |
รายละเอียดฟังก์ชันสำคัญ
fprintf() & fscanf()
// เขียน
fprintf(fp, "control string", var_list);
// อ่าน
fscanf(fp, "control string", &var_list);
putc() & getc()
putc(ch, fp); // เขียนอักขระ
ch = getc(fp); // อ่านอักขระ
putw() & getw()
putw(num, fp); // เขียนจำนวนเต็ม
num = getw(fp); // อ่านจำนวนเต็ม
fputs() & fgets()
fputs(str, fp); // เขียนสตริง
fgets(str, max_chars, fp); // อ่านสตริง (รวม newline)
fread() & fwrite() - สำหรับ Struct/Record
struct emp { int eno; char name[30]; float sal; } e;
FILE *fp;
fread(&e, sizeof(e), 1, fp); // อ่าน 1 เรคคอร์ด
fwrite(&e, sizeof(e), 1, fp); // เขียน 1 เรคคอร์ด
ตัวอย่างโปรแกรม: บันทึก/อ่านตัวเลข 1-10
#include <stdio.h>
int main() {
FILE *fp;
int i;
fp = fopen("num.txt", "w");
for(i = 1; i <= 10; i++)
putw(i, fp);
fclose(fp);
fp = fopen("num.txt", "r");
printf("File content: ");
for(i = 1; i <= 10; i++)
printf("%d ", getw(fp));
fclose(fp);
return 0;
}
ตัวอย่างโปรแกรม: บันทึกข้อมูลนักศึกษา (Struct)
#include <stdio.h>
struct student {
int sno;
char sname[30];
float marks;
};
int main() {
struct student s[2];
FILE *fp;
int i;
fp = fopen("student.txt", "w");
for(i = 0; i < 2; i++) {
printf("Student %d:\n", i+1);
printf("Number: "); scanf("%d", &s[i].sno);
printf("Name: "); scanf("%s", s[i].sname);
printf("Marks: "); scanf("%f", &s[i].marks);
fwrite(&s[i], sizeof(s[i]), 1, fp);
}
fclose(fp);
fp = fopen("student.txt", "r");
for(i = 0; i < 2; i++) {
fread(&s[i], sizeof(s[i]), 1, fp);
printf("Student %d: %d %s %.2f\n", i+1, s[i].sno, s[i].sname, s[i].marks);
}
fclose(fp);
return 0;
}