这本书 Beginning Linux Programming (第三版) 中写道:
"请注意,不建议使用 fread 和 fwrite 处理结构化数据。问题的一部分在于,用 fwrite 写入的文件在不同机器之间可能是不可移植的。"
这句话具体意思是什么?如果我想编写一个可移植的结构化数据读写程序,应该使用哪些调用?直接使用系统调用吗?
这本书 Beginning Linux Programming (第三版) 中写道:
"请注意,不建议使用 fread 和 fwrite 处理结构化数据。问题的一部分在于,用 fwrite 写入的文件在不同机器之间可能是不可移植的。"
这句话具体意思是什么?如果我想编写一个可移植的结构化数据读写程序,应该使用哪些调用?直接使用系统调用吗?
数据序列化是你感兴趣的话题。
它涉及变量的大小,编码(字符串可能是utf-8、utf16等),以及字节序(大端、小端)。
为了实现可移植性解决方案,我建议你看看Google Protocol Buffers和Thrift。
struct A { int i; char c; };
,你需要两个fread调用(一个用于i,另一个用于c),而不是一个(用于整个结构体)。关于可移植整数类型的要点在于,你不依赖于int
使用的特定位数(这可以因平台甚至编译器设置而异)。 - Roger Pate