Endian-independent binary IO utilities for C
1#include <bini.c>
2
3typedef struct bini_stream bstream;
4
5struct data { int life, max, min, zero; };
6
7void write(struct data d)
8{
9 FILE *fp;
10 bstream *bs = bini_new();
11
12 bini_wi(bs, d.life);
13 bini_wi(bs, d.max);
14 bini_wi(bs, d.min);
15 bini_wi(bs, d.zero);
16
17 fp = fopen("fileio.bin", "wb");
18 if (!fp)
19 {
20 fprintf(stderr, "failed to open fileio.bin\n");
21 exit(1);
22 }
23 bini_fwrite(bs, 1, bs->len, fp);
24 fclose(fp);
25
26 bini_close(bs);
27}
28
29void read(struct data *d)
30{
31 FILE *fp;
32 bstream *bs = bini_new();
33
34 fp = fopen("fileio.bin", "rb");
35 if (!fp)
36 {
37 fprintf(stderr, "failed to open fileio.bin\n");
38 exit(1);
39 }
40 bini_fread(bs, 1, sizeof(*d), fp);
41 fclose(fp);
42
43 bini_dump(stderr, bs);
44
45 d->life = bini_ri(bs);
46 d->max = bini_ri(bs);
47 d->min = bini_ri(bs);
48 d->zero = bini_ri(bs);
49
50 printf("life=%d\n", d->life);
51 printf("max i32=%d\n", d->max);
52 printf("min i32=%d\n", d->min);
53 printf("zero=%d\n", d->zero);
54
55 bini_close(bs);
56}
57
58int main(void)
59{
60 struct data d = { 42, INT32_MAX, INT32_MIN, 0 };
61 write(d);
62 read(&d);
63}