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.

Discussion (0)