假设我有以下结构:
typedef struct s1 {
int field1;
int field2;
struct s2 otherStruct;
};
s2
是我做的其他结构:
typedef struct s2 {
double field1;
char unit;
};
如果我使用
s1 s;
s.field1 = 1;
s.field2 = 2;
s.otherStruct.field1 = 42;
s.otherStruct.unit = '!';
write(file_descriptor, &s, sizeof(s));
然后是:
read(file_descriptor, &s, sizeof(s));
会起作用吗?我的意思是,当我尝试将s
写入文件时,它会正确地写出s
的所有字段吗?此外,它会正确读回所有内容吗?
答案 0 :(得分:2)
如果您使用相同的编译器编译代码,相同的编译器标记,并在同一台机器上运行它,并且永远不会更改结构的定义,这将有效。改变一切,你会读垃圾。
要以更具弹性和便携性的方式解决此问题,请考虑Google's protobufs或Cap'n proto。