标准io-stdio,封装后函数,man3
文件io,内核函数 man2
打开文件--fopen
读写--fread,fwrite,fgetc,fputc,fgets,fputs,fscanf,fprintf,sscanf,sprintf
定位--fseek,rewind,ftell
关闭文件--fclose,feof
文件分为两类
一类为文本文件,即ascii码流文件; ---用vim和记事本打开能看懂是文本文件---fgets,fgetc适用于文本文件;
另一类是二进制文件;-------------看不懂乱码是二进制文件;
fopen 路径 参数
r 只读,文件必须存在
r+ 读写,文件必须存在
w 只写,文件不存在创建,在则清空
w+ 读写,文件不存在创建,在则清空
a 只写 文件存在追加,文件不存在创建
a+ 读写
windows系统中处理二进制文件要加b
Rb rb+ wb wb+
打开不关闭会内存泄漏,打开自动申请堆区内存,把文件从物理内存映射过去
文件创建失败
1.权限不够
2.磁盘满了
fread fwrite 可以处理任何文件
标准IO:
ANSI封装的一组基于文件IO的一组用于输入输出的函数库
<stdio.h>
I : input 输入 → 默认设备是stdin
O: output 输出 → 默认设备是stdout
标准IO读写文件的框架
打开 → 读/写 → 定位 → 关闭
fopen fgetc/fputc fseek fclose
fgets/fputs ftell feof
fread/fwrite rewind
fscanf/fprintf
sscanf/sprintf
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
FILE *fopen(const char *pathname,const char *mode);
//功能 以指定的方式打开指定的文件
//参数 pathname 文件名
// mode 打开方式
//返回值 成功: 文件流指针
// 失败: NULL,并带出错误编码
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
| mode | 含义 |
| "r" | 只读,文件必须存在,不存在打开失败 |
| "r+" | 读写,文件必须存在,不存在打开失败 |
| "w" | 只写,文件存在则清空,不存在则创建 |
| "w+" | 读写,文件存在则清空,不存在则创建 |
| "a" | 只写,文件存在则追加,不存在则创建 |
| "a+" | 读写,文件存在则追加,不存在则创建 |
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
void fclose(FILE *stream);
//功能:关闭文件
//参数:stream 文件流指针
//返回值:成功 0
// 失败 EOF
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
int fgetc(FILE *stream);
//功能:从stream中读取一个字符
//参数:stream 文件流指针
//返回值:成功 读取字符的ascii值
// 失败 EOF
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
int fputc(int c,FILE *stream);
//功能:将字符c写到stream所指向的文件中
//参数: c 输出的字符
// stream 文件流指针
//返回值:成功 输出字符的ascii值
// 失败 EOF
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
char *fgets(char *s,int size,FILE *stream);
//功能 从指定文件中读取size字节的内容,存储到s所指向的内存中
//参数 s 存储数据的内存首地址
// size 读取数据的字节大小
// stream 文件流指针
//返回值 成功 s
// 失败 NULL
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
int fputs(const char *s, FILE *stream);
//功能 将s所指向的字符串输出到文件中
//参数 s 存储数据的内存首地址
// stream 文件流指针
//返回值 成功 >=0的数字
// 失败 EOF
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
int fscanf(FILE *stream,const char *format,...);
//功能:从stream指向的文件中按照format格式读取数据
//参数:stream 文件流指针 format指定个格式
//返回值:成功读取项目的个数
失败 -1
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
int sscanf(char *s,const char *format,...);
//功能:从s指向的内存中按照format格式读取数据
//参数:stream 文件流指针 format指定个格式
//返回值:成功读取项目的个数
失败 -1
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
int fprintf(FILE *stream,const char *format,...);
//功能:将数据按照format格式,输出到指定的stream文件流中
//参数:stream 文件流指针 format指定个格式
//返回值:成功写入项目的个数
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
int sprintf(char *s,const char *format,...);
//功能:将数据按照format格式,输出到指定的s内存区域中
//参数:s 内存首地址 format指定个格式
//返回值:成功写入项目的个数
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
size_t fread(void *ptr,size_t size,size_t nmemb,FILE *stream);
//功能:从文件流指针stream所指向的文件中读取nmemb个项目,每个项目大小
// size字节,并存放到ptr指针指向的内存区域中
//参数: ptr 存储数据的内存首地址
// size 一个项目的大小
// nmemb 项目个数
// stream 文件流指针
//返回值:<= nmemb的个数
失败返回0
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
size_t fwrite(const void *ptr,size_t size,size_t nmemb,FILE *stream);
//功能:将ptr指针指向的数据,按照nmemb个项目,每个项目大小size,输出到
// stream所指向的文件中
//参数: ptr 存储数据的内存首地址
// size 一个项目的大小
// nmemb 项目个数
// stream 文件流指针
//返回值:<= nmemb的个数
失败返回0
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
int fseek(FILE *stream,long offset,int whence);
//功能:将文件流指针从whence位置偏移offset个字节
//参数:stream 文件流指针
// offset 偏移量 <0向文件开头偏移 >0向文件结尾偏移
// whence 指定位置
// SEEK_SET 文件开头 SEEK_CUR 当前位置 SEEK_END文件结尾
//返回值:成功 0
// 失败 -1
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
long ftell(FILE *stream);
//功能:得到当前文件指示器的偏移量
//参数:文件流指针 stream
//返回值:文件指示器距离文件开头的偏移量
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
void rewind(FILE*stream);
//功能:将文件指示器偏移到文件开头
//参数:文件流指针 stream
//返回值:无
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
使用前需要指一下
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
int feof(FILE *stream);
//功能:判断是否到达文件结尾
//参数:文件流指针 stream
//返回值:到达结尾 非0
// 未到达结尾 0
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~