2017-04-25 50 views
0

に構造体にファイルからの読み込み:ライティング/ Iは、以下の構造体を持っていると言うことができます構造体

s2は私が作ったいくつかの他の構造体である
typedef struct s1 { 
    int field1; 
    int field2; 
    struct s2 otherStruct; 
}; 

:私は

を使用している場合

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

はい、それは同じタイプのマシン(同じendianness)に戻って読んでも動作します – pm100

+0

@MichaelWalz 'read'と' write'関数が書かれているように構造体をバックトラックできるかどうかわかりませんでした – ChikChak

答えて

2

同じコンパイラでコードをコンパイルし、同じコンパイラがフラグを立てて同じマシンで実行し、構造体の定義を決して変更しない場合、これは機能します。何かを変えれば、あなたはゴミを読むでしょう。

この問題をより弾力的で移植性のある方法で解決するには、Google's protobufsまたはCap'n protoを検討してください。

関連する問題