Endian-independent binary IO utilities for C
at main 1.0 kB view raw
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}