C - Advanced File Handling

Use fread/fwrite for binary I/O and fseek/ftell for positioning.

Binary I/O

#include <stdio.h>

int main(void) {
  int data[3] = {1,2,3};
  FILE *fp = fopen("data.bin", "wb");
  fwrite(data, sizeof *data, 3, fp);
  fclose(fp);
  
  int out[3] = {0};
  fp = fopen("data.bin", "rb");
  fread(out, sizeof *out, 3, fp);
  fclose(fp);
  printf("%d %d %d\n", out[0], out[1], out[2]);
}

Positioning

fseek(fp, 0, SEEK_END);
long size = ftell(fp);
rewind(fp);

Common Pitfalls

  • Binary files are not portable across architectures (endianness/size).
  • Not checking fread/fwrite return counts.