ANSI_C 文件管理
- 主要是文件库,ANSI_C 封装了文件系统的调用,是linux c最基本的文件编程
文件指针和流
- 文件是一个永久储存,有序有名称的字节组成的集合
- 指针FILE,可以对文件进行读写,关闭的操作。文件操作都是基于
流
这个概念的,当文件打开之后,流就和文件绑定在一起 - 文件储存方式
文件以文本方式储存
ASCII文件,每个字节储存ASCII码,储存量大,操作及其的慢
文本以二进制的方式储存
linux储存文件的方式
-
进程三个模式
- 标准输入
外设的输入,默认键盘读取数据 - 标准输出
文件的输出,默认输出到屏幕 - 标准错误
默认是向屏幕输出数据
- 标准输入
-
缓冲机制
全缓冲
等缓冲区写满之后才会把数据写进磁盘
行缓冲
好行为单位进行缓冲处理,遇到换行符进行操作比如标准输入输出
不缓冲
直接调用`write()`函数写到设备上
缓冲函数
void setbuf(FILE *fp,char *buf); /* @description:打开或者关闭io流实用的缓冲 @param:buf指向一个缓存区,打开全缓存,关闭NULL */ int setvbuf(FILE *fp,int mode,size_t size);
打开,关闭文件
FILE *fopen(const char *path,const char *mode);
## 返回是一个文件指针,创建文件失败返回null
int fclose(FILE * stream);
mode参数 | 对应功能 |
---|---|
r | 读打开文件 |
w | 写打开文件,文件长度为0 |
a | 文件结尾添加打开 |
r+ | 读和写打开 |
w+ | 写打开文件 |
a+ | 文件结尾读写文件 |
读写文件
有三种文件读写方式
## 以字符为单位的读写函数
## 三个读函数
int getc(FILE *stream);
int fgetc(FILE *stream);
// 这两个函数作用是相同的,返回一个读取的字符
int getchar(void);
// 三个写函数
int putc(int c,FILE *stream);
int fputc(int c,FILE *stream);
int putchar(int c);
// 以行为单位的读写函数
char *fgets(char *s,int size.FILE *stream);
char *get(char *s);
// 标准输入一行字符串,size为字符个书
// 第二个函数尽量不用,会有漏洞
int fputs(const char *s,FILE *stream);
int puts(const char *s);
// 后面的函数会在写一段字符之后换行
// 成块数据的文件读写函数
因为上述函数会遇到full会终止,而且需要多次循环
size_t fread(void *ptr,size_t size,size_t nmemb,FILE *stream);
/*
ptr 内存中存放数据块的地址
size 数据块大小
nmemb 数据块数量
读写成功返回数据块个数
*/
文件流定位
- 在读写文件时候,每个文件都会维护一个文件流指针,这个指针表示文件写的位置,指向文件最开头,当用户要修改数据时候,要不停改变文件流定位
对应函数
int fseek(FILE *stream,long offset,int whence);
long ftell(FILE *stream);
void rewind(FILE *stream)