C:“fopen”的二进制模式与文本模式是如何实现的?

问题描述 投票:0回答:1

作为学习练习,我尝试用 C 语言为 Windows 和 GNU/Linux 操作系统编写一个平台层。

我目前有兴趣实现一个以提供的模式在主机平台上打开文件的功能,类似于

fopen
中的
<stdio.h>
。我知道有来自
CreateFile
的 Windows API 函数
<fileapi.h>
,以及来自
open
的 GNU 函数
<fcntl.h>
;我想我可以使用它们从磁盘打开文件进行读取或写入。但是,
fopen
还提供了以二进制模式与文本模式打开文件之间的模式选择。我不完全理解这些之间的区别在幕后是如何工作的;我将如何在我的版本中实现此功能?

c file-io cross-platform libc
1个回答
0
投票

在 GNU/Linux(以及所有其他 POSIX 平台)上,文本模式和二进制模式没有区别。

但是,在 Microsoft Windows 上,文本文件通常使用

\r\n
(回车符后跟换行符)作为行结尾。当以文本模式打开文件时,
\r\n
会被简单地翻译为
\n
。这种转换不会在二进制模式下发生。此外,字节值
0x1A
在文本模式下被解释为文件末尾,但在二进制模式下则不然。

© www.soinside.com 2019 - 2024. All rights reserved.