DEV Community

Noah11012
Noah11012

Posted on

5 2

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.

Heroku

This site is built on Heroku

Join the ranks of developers at Salesforce, Airbase, DEV, and more who deploy their mission critical applications on Heroku. Sign up today and launch your first app!

Get Started

Top comments (0)

Postmark Image

Speedy emails, satisfied customers

Are delayed transactional emails costing you user satisfaction? Postmark delivers your emails almost instantly, keeping your customers happy and connected.

Sign up