fopen()函数

作者:追风剑情 发布于:2020-3-25 10:32 分类:C

该函数声明在stdio.h中

FILE* fp = fopen(“文件路径”, "打开模式");

fopen()的模式字符串
模式字符串 含义
"r" 以读模式打开文件
"w" 以写模式打开文件,把现有文件的长度截为0,如果文件不存在,则创建一个新文件
"a" 以写模式打开文件,在现有文件末尾添加内容,如果文件不存在,则创建一个新文件
"r+" 以更新模式打开文件(即可以读写文件)
"w+" 以更新模式打开文件(即,读和写),如果文件存在,则将其长度截为0;如果文件不存在,则创建一个新文件
"a+" 以更新模式打开文件(即,读和写),在现有文件的末尾添加内容,如果文件不存在则创建一个新文件;可以读整个文件,但是只能从末尾添加内容
"rb"、"wb"、"ab"、"ab+"、"a+b"、
"wb+"、"w+b"、"ab+"、"a+b"
与上一个模式类似,但是以二进制模式而不是文本模式打开
"wx"、"wbx"、"w+x"、"wb+x"或"w+bx" (C11)类似非x模式,但是如果文件已存在或以独占模式打开文件,则打开文件失败

像UNIX和Linux这样只有一种文件类型的系统,带b字母的模式和不带b字母的模式相同。

新的C11新增了带x字母的模式,与以前的写模式相比具有更多特性。第一,如果以传统的一种写模式打开一个现有文件,fopen()会把该文件的长度截为0,这样就丢失了该文件的内容。但是使用带x字母的写模式,即使fopen()操作失败,原文件的内容也不会被删除。第二,如果环境允许,x模式的独占特性使得其他程序或线程无法访问正在被打开的文件。


警告  如果使用任何一种“w”模式(不带x字母)打开一个现有文件,该文件的内容会被删除,以便程序在一个空白文件中开始操作。然而,如果使用带x字母的任何一种模式,将无法打开一个现有文件。


程序成功打开文件后,fopen()将返回文件指针(file pointer),其他I/O函数可以使用这个指针指定该文件。文件指针的类型是指向FILE的指针,FILE是一个定义在stdio.h中的派生类型。文件指针并不指向实际的文件,它指向一个包含文件信息的数据对象,其中包含操作文件I/O函数所用的缓冲区信息。因为标准库中的I/O函数使用缓冲区,所以它们不仅要知道缓冲区的位置,还要知道缓冲区被填充的程序以及操作哪一个文件。标准I/O函数根据这些信息在必要时决定再次填充或清空缓冲区。文件指针指向的数据对象包含了这些信息(该数据对象是一个C结构)。

标准文件和相关联的文件指针
标准文件 文件指针 通常使用的设备
标准输入 stdin 键盘
标准输出 stdout 显示器
标准错误 stderr 显示器

标签: C语言

Powered by emlog  蜀ICP备18021003号   sitemap

川公网安备 51019002001593号