这本书Linux 编程入门(第三版) http://www.wrox.com/WileyCDA/WroxTitle/productCd-0764544977.html says
“请注意,不建议将 fread 和 fwrite 与结构化数据一起使用。部分问题是使用 fwrite 写入的文件可能无法在不同机器之间移植。”
这到底是什么意思?如果我想编写一个便携式结构化数据读取器或写入器,我应该使用什么调用?直接系统调用?
这本书明智地警告不要将文件中的字节块直接读取到数据结构中。
这样做的问题是,数据结构的各个元素之间可能存在未命名的填充字节,并且这些字节的数量和位置完全依赖于实现。
您仍然可以使用fread
and fwrite
调用从文件读取数据和向文件写入数据,但您应该单独读取和写入数据结构的每个元素,而不是一次读取或写入整个结构。
您还需要牢记其他可移植性问题。例如,各种数字类型具有依赖于实现的大小。为了可移植性,您可以使用中定义的类型stdint.h
标头。
浮点和无符号整数表示也可能存在差异,但大多数系统和文件格式现在分别使用 IEEE 754 和补码,因此这些类型的兼容性问题很少出现。只要确保您知道您的规格说明即可。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)