Write and read structs to/from files in C
First let's define a shared header file for the struct definition.
// struct.h
typedef struct {
char name[50];
int health;
float damage;
} Character;
Now lets write it to a character.dat
file.
// write.c
#include <stdio.h>
#include <string.h>
#include "struct.h"
int main(void) {
printf("Write struct\n");
Character ch;
strcpy(ch.name, "John Doe");
ch.health = 30;
ch.damage = 5.9;
FILE* file = fopen("character.dat", "wb");
if (file == NULL) {
perror("Error opening file");
return 1;
}
fwrite(&ch, sizeof(Character), 1, file);
fclose(file);
return 0;
}
If we check the contents of the character.dat
file it should look like this.
$ xxd character.dat
00000000: 4a6f 686e 2044 6f65 0000 0000 0000 0000 John Doe........
00000010: 0000 0000 0000 0000 0000 0000 0000 0000 ................
00000020: 0000 0000 0000 0000 0000 0000 0000 0000 ................
00000030: 0000 0000 1e00 0000 cdcc bc40 ...........@
Reading and serializing back to a struct.
// read.c
#include <stdio.h>
#include "struct.h"
int main(void) {
printf("Read struct\n");
Character ch;
FILE* file = fopen("character.dat", "rb");
if (file == NULL) {
perror("Error opening file");
return 1;
}
fread(&ch, sizeof(Character), 1, file);
fclose(file);
printf("Name: %s\n", ch.name);
printf("Health: %d\n", ch.health);
printf("Damage: %.1f\n", ch.damage);
return 0;
}
Other notes
- plan9 Run 9front in Qemu
- dcss Make DCSS playable on 4k displays
- Write ISO to USB Key
- Fix screen tearing on Debian 12 Xorg and i3
- plan9 Install Plan9port on Linux
- Convert all MKV files into other formats
- Cronjobs on Github with Github Actions
- dcss Sane default for Dungeon Crawl Stone Soup Online edition
- 10/GUI 10 Finger Multitouch User Interface
- plan9 Compile drawterm on Fedora 38
- plan9 Mount Plan9 over network
- Change permissions of matching files recursively
- Edsger W. Dijkstra Manuscripts ebook
- plan9 Drawing Pixels in Plan9
- Cache busting in Hugo