在Linux中使用系统级IO时,我注意到编译器识别出O_RDONLY
和O_RDWR
标志,但它对O_BINARY
和O_TEXT
标志的含义O_TEXT
。
这是Linux的事吗?
Linux,以及几乎所有Unix的风格,都不区分二进制文件和文本文件。 因此,没有具有该名称的标准常量。 如果要将它们包含在代码中以便于移植,可以在Linux中手动将常量定义为零。
在C语言及其标准库的层面上,没有O_BINARY
和O_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等人之下,没有必要区分文本和二进制文件,因为数据只有一个字符,所以标记是不必要的。
以上就是c/c++开发分享Linux中没有O_BINARY和O_TEXT标志?相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/c-cdevelopment/560742.html