2017-04-25 151 views
0

可以说我有以下结构:写入/从一个文件读入结构的结构

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的所有字段吗?另外,它会将它全部读回正确吗?

+1

@ChikChak为什么你认为它不应该工作? –

+1

是的,它会工作,只要你回读到相同类型的机器(相同的字母顺序) – pm100

+0

@MichaelWalz我不确定'read'和'write'函数是否可以“回溯”结构 – ChikChak

回答

2

如果您使用相同的编译器编译代码,使用相同的编译器标志并在同一台机器上运行它,并且永远不会更改结构的定义,这将起作用。改变任何东西,它会读垃圾。

要以更灵活和便携的方式解决此问题,请考虑Google's protobufsCap'n proto