文件访问中的文本和二进制模式有什么区别吗?

时间:2014-09-13 12:37:57

标签: c linux unix file-io

如果我以文本模式而不是二进制模式打开文件有什么区别吗?因为我读到UNIX和Linux在文本和二进制文件之间没有区别。

1 个答案:

答案 0 :(得分:6)

在Linux上没有任何区别(至少在Ext4和大多数其他文件系统等本机文件系统上,使用通常的GNU libc)。

也许一些奇怪的文件系统可能有一个特定的标志来打开不同的二进制或文本文件。我不知道这样的文件系统。也许你可以编写一些FUSE文件系统来区分,也许在一个奇怪的自定义libc中有一些额外的fopen黑客

然而,C99 standard(至少第271页,n1256草案的第7.19.5.3节)明确提到文本与二进制模式,因此如果它的程序更容易移植到其他系统(如Windows)符合标准。

所以我的观点是你可能想尝试将模式字符串传递给fopen,以区分二进制文本模式和文本模式。 (我同意我不经常这样做)。它不会受伤。

Linux fopen(3)手册页明确说:

  

模式字符串也可以包含字母'b'作为最后一个          字符或作为两者中任何一个字符之间的字符 -          上面描述的字符串。这是严格的          与C89的兼容性并没有效果;所有人都忽略了'b'          符合POSIX标准的系统,包括Linux。 (其他系统可能会对待          文本文件和二进制文件不同,添加'b'可能是一个          如果您对二进制文件执行I / O并期望您的程序,那么这是个好主意          可以移植到非UNIX环境。)

当然,open(2)系统调用没有任何传输模式标志的方法。 (你可能需要一些私人 ioctl(2)