- stdin //标准输入流
- stdout //标准输出流
- stderr //标准错误输出流
用fopen创建一个文件指针
FILE *fopen(const char *path, const char *mode);
功能:创建一个文件指针
参数:
path : 文件路径 mode : 打开方式
返回值:返回一个文件指针
mode取值:
w :将文件长度截断为零,或者创建文本文件,用于写。流被定位于文件的开始。
w+ :打开文件,用于读写。如果文件不存在就创建它,否则将截断它。流被定位于文件的开始。
r :打开文本文件,用于读。流被定位于文件的开始。
r+ :打开文本文件,用于读写。流被定位于文件的开始。
a :打开文件,用于追加 (在文件尾写)。如果文件不存在就创建它。流被定位于文件的末尾。
a+ :打开文件,用于追加 (在文件尾写)。如果文件不存在就创建它。读文件的初始位置是文件的开始,但是输出总是被追加到文件的末尾。
总结 :带加号的都是可读可写,r只读不能创建文件,w只写并且会清空原有文件,a追加写入
r+可读可写,不能创建文件,读写流定位都在头,w+打开并清空文件,如果文件不存在则创建,读写流定位都在头
a+可读可写,文件不存在就创建文件,打开文件后写入流定位在末尾,读取流定位在头
// 以只读的方式打开文件
FILE *fp = fopen("./test.txt", "r");
对文件读取的方式
fgetc(按字符读取)
int fgetc(FILE *stream); 参数 stream:文件指针 功能 从流中读取下一个字符,并将其作为无符号char类型转换为整型 返回值 无符号char类型转换为整型返回, 在文件结束或错误结束时返回EOFfgets(按行读取)
char *fgets(char *s, int size, FILE *stream);
参数 s:要填充的字符串首地址 size:要读取的字符个数 stream:文件指针
功能 从流中最多读入一个小于size的字符,并将它们存储到s所指向的缓冲区中。读在EOF或换行符之后停止。如果一个换行符被读取,它将被存储到缓冲区中。结束空字节(' ')存储在缓冲区的最后一个字符之后。
返回值 成功时返回s,错误时返回NULL,文件结束或者没有读到任何字符时返回NULL。
对文件的写入方式
fputc(按字符写入)
int fputc(int c, FILE *stream);
参数 c:要写入文件的字符 stream:文件指针
功能 将字符串s写入流,而不终止空字节(' ')。
返回值 无符号char类型的字符,转换为int返回; 如果出现错误,返回EOF。
fputs(按行写入)
int fputs(const char *s, FILE *stream); 参数 s:要写入的字符串 stream:文件指针 功能 无符号char类型字符,转换为int返回;如果出现错误,返回EOF。 返回值 成功时返回一个非负数,错误时返回EOF。
#include输出错误信息函数perrorint main(int argc, char const *argv[]) { // 以读写的方式打开一个空文件 FILE *fp = fopen("./test.txt", "w+"); //将字符h写入文件 fputc('h', fp); //写入字符串 fputs("ello wouldnnihao beijing", fp); //释放文件 fclose(fp); fp = NULL; // 以只读的方式打开文件 fp = fopen("./test.txt", "r"); // 读取第一个字符 char ch = fgetc(fp); // 读取第一行字符 char s[20]; fgets(s, sizeof(s), fp); printf("ch = %cns = %sn", ch, s); }
perror(const char *s); 参数为字符串 返回值为空 功能是打印错误信息捕获错误代码errno 打印错误信息strerror
error是一个全局变量用于存储错误信息代码 char *strerror(int errnum); 功能 根据错误代码获取错误信息 返回值 返回错误信息的字符串 参数 错误代码文件状态函数feof() ferror()
int feof(FILE *stream);
功能:判断是否读取到文件末尾
参数:
stream:文件指针
返回值:
成功:非0,表示已经到文件末尾了
失败:0,表示没有到文件末尾
int ferror(FILE *stream);
功能:判断读函数是否执行失败
参数:
stream:文件指针
返回值:
成功:非0,读函数执行失败
失败:0,读函数执行成功



