Systems IO
Fixed Record
A fixed-size record can be written and read as one binary item.
record layout
A struct groups fields that are stored together as one item.
read back
The loaded record fields can be used just like the original fields.
Fixed Record
fixed_record.c
Replay: real traced execution (multi-file project)
#include <stdio.h>
struct Score {
int id;
int points;
};
int main(void) {
int bonus = 5;
struct Score original = {42, 80 + bonus};
struct Score loaded = {0, 0};
FILE *out = fopen("egtry_c17_record.bin", "wb");
fwrite(&original, sizeof(original), 1, out);
fclose(out);
FILE *in = fopen("egtry_c17_record.bin", "rb");
fread(&loaded, sizeof(loaded), 1, in);
fclose(in);
remove("egtry_c17_record.bin");
printf("id=%d points=%d\n", loaded.id, loaded.points);
return 0;
}
#include <stdio.h>
struct Score {
int id;
int points;
};
int main(void) {
int bonus = 0;
struct Score original = {42, 80 + bonus};
struct Score loaded = {0, 0};
FILE *out = fopen("egtry_c17_record.bin", "wb");
fwrite(&original, sizeof(original), 1, out);
fclose(out);
FILE *in = fopen("egtry_c17_record.bin", "rb");
fread(&loaded, sizeof(loaded), 1, in);
fclose(in);
remove("egtry_c17_record.bin");
printf("id=%d points=%d\n", loaded.id, loaded.points);
return 0;
}
#include <stdio.h>
struct Score {
int id;
int points;
};
int main(void) {
int bonus = 10;
struct Score original = {42, 80 + bonus};
struct Score loaded = {0, 0};
FILE *out = fopen("egtry_c17_record.bin", "wb");
fwrite(&original, sizeof(original), 1, out);
fclose(out);
FILE *in = fopen("egtry_c17_record.bin", "rb");
fread(&loaded, sizeof(loaded), 1, in);
fclose(in);
remove("egtry_c17_record.bin");
printf("id=%d points=%d\n", loaded.id, loaded.points);
return 0;
}
bonus ← 5, original ← (empty), loaded ← (empty), out ← ⟨addr A⟩
8int main(void) {9 int bonus→ 5 = 5; //@bonus=0, 1010 struct Score original→ (empty) = {42, 80 + bonus5};11 struct Score loaded→ (empty) = {0, 0};1213 FILE *out→ ⟨addr A⟩ = fopen("egtry_c17_record.bin", "wb");14 fwrite(&original(empty), sizeof(original), 1, out⟨addr A⟩);15 fclose(out⟨addr A⟩);1617 FILE *in→ ⟨addr A⟩ = fopen("egtry_c17_record.bin", "rb");18 fread(&loaded(empty), sizeof(loaded), 1, in⟨addr A⟩);19 fclose(in⟨addr A⟩);20 remove("egtry_c17_record.bin");2122 printf("id=%d points=%d\n", loaded(empty).id, loaded.points);23 return 0;24}outputid=42 points=85
bonus ← 0, original ← (empty), loaded ← (empty), out ← ⟨addr A⟩
8int main(void) {9 int bonus→ 0 = 0;10 struct Score original→ (empty) = {42, 80 + bonus0};11 struct Score loaded→ (empty) = {0, 0};1213 FILE *out→ ⟨addr A⟩ = fopen("egtry_c17_record.bin", "wb");14 fwrite(&original(empty), sizeof(original), 1, out⟨addr A⟩);15 fclose(out⟨addr A⟩);1617 FILE *in→ ⟨addr A⟩ = fopen("egtry_c17_record.bin", "rb");18 fread(&loaded(empty), sizeof(loaded), 1, in⟨addr A⟩);19 fclose(in⟨addr A⟩);20 remove("egtry_c17_record.bin");2122 printf("id=%d points=%d\n", loaded(empty).id, loaded.points);23 return 0;24}outputid=42 points=80
bonus ← 10, original ← (empty), loaded ← (empty), out ← ⟨addr A⟩
8int main(void) {9 int bonus→ 10 = 10;10 struct Score original→ (empty) = {42, 80 + bonus10};11 struct Score loaded→ (empty) = {0, 0};1213 FILE *out→ ⟨addr A⟩ = fopen("egtry_c17_record.bin", "wb");14 fwrite(&original(empty), sizeof(original), 1, out⟨addr A⟩);15 fclose(out⟨addr A⟩);1617 FILE *in→ ⟨addr A⟩ = fopen("egtry_c17_record.bin", "rb");18 fread(&loaded(empty), sizeof(loaded), 1, in⟨addr A⟩);19 fclose(in⟨addr A⟩);20 remove("egtry_c17_record.bin");2122 printf("id=%d points=%d\n", loaded(empty).id, loaded.points);23 return 0;24}outputid=42 points=90