2017-04-25 110 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