2012-12-22 56 views
1

在C中的文件和网络的可移植性,fread函数是这样的:不同字节大小

size_t fread(void *buf, size_t max, FILE *file); 

一般字符*阵列用作buf中。人们通常假定char = 8位。但如果它不是真的呢?如果在10位字节系统上读取以8位字节系统写入的文件,会发生什么情况?文件和网络流在具有不同大小的字节的系统之间的可移植性是否有任何单一标准?最重要的是,如何在这方面编写可移植代码?

+1

大概8位字节只是加宽到10位加个零作为个MSb,因为它是在这些“奇怪”系统的最大利益是与使用8位字节的世界其他地区的兼容。另外,AFAIK所有这些系统都是“奇怪的”系统(DSP,旧的大型机......),它们通常不处理“常规”机器产生的“常规”文件。 –

+0

对int类型使用新建议的类型定义:uint8_t – stdcall

+0

我刚刚收到关于其他问题的答案,即只有在机器直接支持这些类型定义时才可以使用这些类型定义。 – lamefun

回答

1

这些日子里比特尺寸不是8的系统是非常罕见的。但也有其他尺寸的机器,并且文件不保证可以移动到这些机器上。

如果uberportability是必需的,那么你将不得不在你的文件中应对char!= 8位的某种编码。

你有什么想法可能需要运行在DEC 10或真正旧的IBM大型机,DSP或其他类似的东西,或者你只是想要“我想知道”的目的。如果是后者,我会“忽略这个案子”。这是非常特殊的机器,没有8位字符 - 而且你很可能会有其他问题,比每个字符的位来使用系统上的“文件” - 就像如何在那里得到文件,因为你可能无法在一个USB记忆棒,插或者FTP传输它(尽管后者也许是最有可能的一个)

3

关于网络通信,物理访问协议(如以太网)确定有多少位有进入一个“信息单元”,并且实施将其映射到适当的类型。所以,对于网络通信来说,支持奇怪的体系结构没有问题。

对于文件访问,如果你想支持怪异的体系结构,东西变得更有趣,因为没有标准可以引用,甚至将文件放在系统上的方法可能会影响你如何访问它们。 幸运的是,目前唯一不支持8位字节的系统是DSP和类似的小型嵌入式系统,根本不支持文件系统,所以这个问题基本没有实际意义。