FILE *fopen(const char *file, const char *mode);
FILE *_fopen_r(void *reent, const char *file, const char *mode);
fopen 初始化读取或写入文件所需的数据结构。将文件名指定为 file 处的字符串,并将您对文件所需的访问类型指定为 mode 处的字符串。
备用函数 _fopen_r 是一个可重入版本。额外的参数 reent 是一个指向可重入结构的指针。
有三种基本的访问类型可用:读、写和追加。*mode 必须以以下三个字符 `r'、`w' 或 `a' 之一开头,以选择其中一种:r 打开文件进行读取;如果文件不存在,或者主机系统不允许您读取它,则操作将失败。w 打开文件从文件开头进行写入:实际上,这总是会创建一个新文件。如果您指定名称的文件已经存在,则其旧内容将被丢弃。a 打开文件以追加数据,即从文件末尾进行写入。当您以此方式打开文件时,所有数据始终写入当前文件末尾;您无法使用 fseek 更改此设置。
某些主机系统区分“二进制”文件和“文本”文件。此类系统可能会对写入以“文本”方式打开的文件或从中读取的数据执行数据转换。如果您的系统属于此类,那么您可以在上述三种模式中的任意一种后面附加一个 `b',以指定您正在以二进制文件的方式打开该文件(默认是以文本文件的方式打开文件)。
因此,`rb' 表示“读取二进制”;`wb' 表示“写入二进制”;`ab' 表示“追加二进制”。
为了提高 C 程序的可移植性,所有系统都接受 `b',无论它是否会产生影响。
最后,您可能需要对同一个文件进行读和写。您还可以在上述三种模式中的任意一种后面附加一个 `+',以允许这样做。(如果您想同时附加 `b' 和 `+',可以按任意顺序进行:例如,当用作模式字符串时,"rb+" 与 "r+b" 含义相同。)
使用 "r+"(或 "rb+")允许在不丢弃任何数据的情况下在现有文件中的任何位置进行读取和写入;使用 "w+"(或 "wb+")创建一个新文件(或首先丢弃旧文件中的所有数据),并允许在其中任何位置进行读取和写入;使用 "a+"(或 "ab+")允许在现有文件中的任何位置进行读取,但只能在末尾进行写入。### 返回值
fopen 返回一个文件指针,您可以将其用于其他文件操作,除非您请求的文件无法打开;在这种情况下,结果为 NULL。如果失败的原因是 mode 处的字符串无效,则 errno 将被设置为 EINVAL。
**权威来源**: BUSMASTER DITA help source `fopen.dita`, compiled into `BUSMASTER.CHM` with the application.