DEV Community

Noah11012
Noah11012

Posted on

Reading and Writing Files in C: Part 5

Just as I promised, we will write and subsequently read back a C structure! One caveat though: you need to know about binary files. You can learn more in the previous article.

For testing, the following structure will be used:

struct TestStruct { int a; double b; }; 

First, a connection to a file, specifically, a binary file is needed. Next, we create an instance of TestStruct and set our desired values. Finally, using fwrite() to write the structure into the file.

#include <stdio.h>  typedef struct { int a; double b; } TestStruct; int main(void) { FILE *file = fopen("test", "wb"); TestStruct ts; ts.a = 105; ts.b = 194.543; fwrite(&ts, sizeof(TestStruct), 1, file); fclose(file); } 

Output:

~/Desktop  clang main.c ~/Desktop  ./a.out ~/Desktop  cat test i!VL7A`Qh@% ~/Desktop  

Trying to output a file that is saved with a C structure results in garbage.

Let's now read back in the data and see if everything is still correct.

#include <stdio.h>  typedef struct { int a; double b; } TestStruct; int main(void) { FILE *file = fopen("test", "rb"); TestStruct ts; fread(&ts, sizeof(TestStruct), 1, file); fclose(file); printf("ts.a = %d\nts.b = %f\n", ts.a, ts.b); } 

Output:

~/Desktop  clang main.c ~/Desktop  ./a.out ts.a = 105 ts.b = 194.543000 ~/Desktop  

Everything was written and read properly.

Next

This is a short article and there is more to explore but I feel everything that was taught in this series will provide many people with adequate knowledge to accomplish basic and more difficult problems relating to files.

Top comments (0)