在C中,fread函数是这样的:
size_t fread(void *buf, size_t max, FILE *file);
通常将char *数组用作buf。人们通常认为char = 8位。但是,如果它不是真的怎么办?如果在10位字节系统上读取以8位字节系统写入的文件,会发生什么?在具有不同大小字节的系统之间是否有关于文件和网络流的可移植性的单一标准?最重要的是,如何在这方面编写可移植代码?
答案 0 :(得分:3)
关于网络通信,物理访问协议(如以太网)定义了“信息单元”中的位数,并且由实现将其映射到适当的类型。因此,对于网络通信,支持奇怪的架构没有问题。
对于文件访问,如果你想支持奇怪的架构,东西会变得更有趣,因为没有标准可供参考,甚至将文件放在系统上的方法也可能影响你如何访问它们。 幸运的是,目前使用的唯一不支持8位字节的系统是DSP和类似的小型嵌入式系统,根本不支持文件系统,所以这个问题基本没有用。
答案 1 :(得分:1)
比特尺寸不是8的系统现在非常罕见。但是有些机器具有其他尺寸,并且不保证文件可以移植到这些机器上。
如果需要uberportability,那么你必须在你的文件中使用某种编码来处理char!= 8位。
你有什么想法可能必须在DEC 10或旧的IBM大型机上运行,在DSP或其他类似的东西,或者你只是要求“我想知道”的目的。如果是后者,我只会“忽视这个案子”。这是非常特殊的机器,没有8位字符 - 你很可能会遇到其他问题,而不是每个字符位使用系统上的“文件” - 比如如何在那里获取文件,因为你可能无法插入USB记忆棒或用FTP传输它(尽管后者可能是最有可能的一个)