一、文件的打开
文件的打开一共有三个函数,分别是fopen()、fdopen()、fropen(),函数原型如下:
FILE *fopen(const char *path, const char *mode);
FILE *fdopen(int fd, const char *mode);
FILE *freopen(const char *path, const char *mode, FILE *stream);
三个文件打开函数都需要引用标准输入输出头文件:#include <stdio.h>
函数的说明:
1、fopen()函数打开文件,该文件名称为参数path输入的字符串,同时把他和流关联起来。参数mode表示的是打开文件的模式,集采用什么模式打开文件。具体如下:
r :采用只读的方式打开文件,流位于文件的开头。
r+ :采用读写的方式打开文件,流位于文件的开头。
w :将文件截断为零长度(就是会把文件内容都清空,然后流定位在文件开头,打开文件后的读写操作都从文件开头进行)或创建文本文件以进行写入,流位于文件的开头。
w+ :采用读写方式打开,如果文件不存在,将创建该文件,否则将截断该文件(就是会把文件内容都清空)。流位于文件的开头。
a :打开以附加(在文件末尾写入)。如果文件不存在,将创建该文件,流位于文件的结尾。
a+ :打开以进行读取和附加(在文件末尾写入)。如果文件不存在,将创建该文件,在读取文件时,流位于文件的开头,但是在写文件时,流位于文件的结尾。
注意:使用附加方式打开文件(mode = "a"),会使得所有对该流的写入操作都会从文件结尾开始,就像是在每次写操作之前调用了fseek(stream, 0, SEEK_END);操作一样
2、fdopen()函数作用是将流与现有的文件描述符fd相关联。并且函数设置的打开方式mode,需要和文件描述符fd设置的打开方式兼容,同时函数返回一个指向该流的文件指针。
采用mode = "w" 或 "w+" 打开文件时,不会导致文件截断(即在采用者两个模式的时候文件不会像使用fopen函数一样将文件原有内容清空)
3、fropen()函数打开文件,该文件名称为参数path输入的字符串,mode为文件打开方式(r,r+,w,w+,a,a+),stream表示文件指针,一般使用标准流文件(stdin/stdout/stderr),可以用于标准流的重定向。
返回值:
fopen()、fdopen、fropen函数打开文件成功时,都是返回一个文件指针,失败返回NULL,并且会设置errno以指示错误。
二、文件的关闭
文件的关闭函数fclose()函数,函数原型如下:
int fclose(FILE *fp);
函数说明:
fclose()函数调用fflush()函数刷新流,同时关闭基础的文件描述符。
返回值:
成功完成后,返回0。否则,将返回EOF并设置errno以指示错误。
一下是文件的打开和关闭操作:
现象:
本文参考Linux官方函数说明文档。