C语言引入流的概念对文件操作的底层细节进行封装,使得程序员可以更加注重顶层逻辑而不必直接面对不同的硬件进行编程,简化了程序设计。
-
文件指针
系统会为每一个打开的文件创建一个结构体变量,里面记录了与这个文件有关的各种信息,并且使用一个结构体指针指向这块内存,系统通过这个指针来维护这个文件相关信息,这个指针就是文件指针。这个结构体类型被重命名为FILE,所以文件指针的类型就是FILE*。
例如,VS2013下stdio.h头文件中就有相关定义:
struct _iobuf {
char *_ptr;
int _cnt;
char *_base;
int _flag;
int _file;
int _charbuf;
int _bufsiz;
char *_tmpfname;
};
typedef struct _iobuf FILE;
文件操作函数通过文件指针来实现对与之关联的文件的读写控制。
-
文件的打开
fopen函数:
FILE * fopen ( const char * filename, const char * mode );
其中filename是文件名,mode是打开模式,它们都是字符串。
文件名在不同操作系统下有不同的要求,比如最大长度,某些字符不能用作文件名,大小写是否敏感等等。
模式字符串用来控制是以什么样的方式打开,比如是读还是写,或者是既读又写,