Write raw struct contents (bytes) to a file in C. Confused about actual size written
Posted
by
d11wtq
on Stack Overflow
See other posts from Stack Overflow
or by d11wtq
Published on 2012-04-14T11:16:50Z
Indexed on
2012/04/14
11:28 UTC
Read the original article
Hit count: 264
Basic question, but I expected this struct to occupy 13 bytes of space (1 for the char, 12 for the 3 unsigned ints). Instead, sizeof(ESPR_REL_HEADER)
gives me 16 bytes.
typedef struct {
unsigned char version;
unsigned int root_node_num;
unsigned int node_size;
unsigned int node_count;
} ESPR_REL_HEADER;
What I'm trying to do is initialize this struct with some values and write the data it contains (the raw bytes) to the start of a file, so that when I open this file I later I can reconstruct this struct and gain some meta data about what the rest of the file contains.
I'm initializing the struct and writing it to the file like this:
int esprime_write_btree_header(FILE * fp, unsigned int node_size) {
ESPR_REL_HEADER header = {
.version = 1,
.root_node_num = 0,
.node_size = node_size,
.node_count = 1
};
return fwrite(&header, sizeof(ESPR_REL_HEADER), 1, fp);
}
Where node_size
is currently 4 while I experiment.
The file contains the following data after I write the struct to it:
-bash$ hexdump test.dat
0000000 01 bf f9 8b 00 00 00 00 04 00 00 00 01 00 00 00
0000010
I expect it to actually contain:
-bash$ hexdump test.dat
0000000 01 00 00 00 00 04 00 00 00 01 00 00 00
0000010
Excuse the newbiness. I am trying to learn :) How do I efficiently write just the data components of my struct to a file?
© Stack Overflow or respective owner