C - File Input Output
Overview
File I/O in C uses the stdio library to read from and write to files via FILE pointers. Common operations include opening a file, reading/writing data, and closing the file.
Learning Objectives
- Open files using fopenand close them withfclose.
- Read and write text data with fprintf,fscanf,fgets, andfputs.
- Handle errors and check return values safely.
Prerequisites
Basic Example: Write then Read
#include <stdio.h>
int main(void) {
  FILE *fp = fopen("data.txt", "w");
  if (!fp) { perror("fopen write"); return 1; }
  fprintf(fp, "Hello %d\n", 42);
  fclose(fp);
  fp = fopen("data.txt", "r");
  if (!fp) { perror("fopen read"); return 1; }
  char buf[64];
  if (fgets(buf, sizeof buf, fp)) {
    printf("Read: %s", buf);
  }
  fclose(fp);
}
Expected Output
Read: Hello 42
Reading structured data
#include <stdio.h>
typedef struct { char name[32]; int age; } Person;
int main(void) {
  FILE *fp = fopen("people.txt", "w");
  if (!fp) return 1;
  fprintf(fp, "Ann 30\nBen 25\n");
  fclose(fp);
  fp = fopen("people.txt", "r");
  if (!fp) return 1;
  Person p;
  while (fscanf(fp, "%31s %d", p.name, &p.age) == 2) {
    printf("%s (%d)\n", p.name, p.age);
  }
  fclose(fp);
}
Expected Output
Ann (30)
Ben (25)
Common Pitfalls
- Forgetting to close files (fclose), leading to resource leaks.
- Not checking return values from fopen,fgets, orfscanf.
- Using fscanfwithout width limits can overflow buffers; use field widths (e.g.,%31s).
Exercises
- Write a program that appends a new line to a log file with a timestamp-like integer.
- Read a file line by line and count the number of lines that contain a given word.