作为学习练习,我尝试用 C 语言为 Windows 和 GNU/Linux 操作系统编写一个平台层。
我目前有兴趣实现一个以提供的模式在主机平台上打开文件的功能,类似于
fopen
中的 <stdio.h>
。我知道有来自 CreateFile
的 Windows API 函数 <fileapi.h>
,以及来自 open
的 GNU 函数 <fcntl.h>
;我想我可以使用它们从磁盘打开文件进行读取或写入。但是,fopen
还提供了以二进制模式与文本模式打开文件之间的模式选择。我不完全理解这些之间的区别在幕后是如何工作的;我将如何在我的版本中实现此功能?
在 GNU/Linux(以及所有其他 POSIX 平台)上,文本模式和二进制模式没有区别。
但是,在 Microsoft Windows 上,文本文件通常使用
\r\n
(回车符后跟换行符)作为行结尾。当以文本模式打开文件时,\r\n
会被简单地翻译为 \n
。这种转换不会在二进制模式下发生。此外,字节值 0x1A
在文本模式下被解释为文件末尾,但在二进制模式下则不然。