Linux中没有O_BINARY和O_TEXT标志?

在Linux中使用系统级IO时,我注意到编译器识别出O_RDONLYO_RDWR标志,但它对O_BINARYO_TEXT标志的含义O_TEXT

这是Linux的事吗?

Linux,以及几乎所有Unix的风格,都不区分二进制文件和文本文件。 因此,没有具有该名称的标准常量。 如果要将它们包含在代码中以便于移植,可以在Linux中手动将常量定义为零。

http://unix.derkeiler.com/Newsgroups/comp.unix.programmer/2007-03/msg00147.html

在C语言及其标准库的层面上,没有O_BINARYO_TEXT标志这样的东西。 通过添加fopen函数的mode参数的b说明符来选择二进制或文本模式。 当然,说明符本身是由所有C实现支持的,但是在POSIX平台上,这个说明符没有效果:根据POSIX规范,文本模式与二进制模式相同。

毫不奇怪,如果您深入研究非标准平台特定的Unix I / O函数的级别,您会发现它们不知道该文本/二进制文件的区别。

这是一个* nix的事情。 * nix操作系统不对“文本”文件上的I / O进行自动换行转换,因此O_TEXT和O_BINARY标志没有意义。

在Unix下,二进制文件和文本文件之间的操作系统级别没有区别。 文本文件只有受限制的内容。 对于Windows也是如此,但C用于行尾的约定与Unix使用的约定相同,而Windows使用CR / LF对(在某些上下文中使用明确的文件结束标记,但处理即使在我上次检查的系统程序中也不一致,因此需要映射以遵守C规定的约定。

Windows使用\ r \ n作为行结尾,Linux(和其他类Unix相似)只使用\ n。 在Windows中,读取O_BINARY为您提供原始数据,可能是奇数行结尾和所有,而O_TEXT标准化行结尾,因此您的C代码只能看到一个字符。

在Linux等人之下,没有必要区分文本和二进制文件,因为数据只有一个字符,所以标记是不必要的。