1、fopen 文件打开

1
2
3
4
5
6
7
8
9
10
11
12
13
#include <stdio.h>
FILE *fopen(const char *path, const char *mode);
参数:
const char *path:带路径文件名
const char *mode:
"r":只读方式打开,文件必须存在
"r+":读写方式打开,文件必须存在
"w":只写方式打开,文件存在就清空文件内容,文件不存在可以创建
"w+":读写方式打开,文件存在就清空文件内容,文件不存在可以创建
"a":只写方式打开,文件存在那么文件访问位置为尾部,追加写入,文件不存在则创建
"a+":读写方式打开,文件存在那么文件访问位置为尾部,追加写入,文件不存在则创建
返回值:
成功打开的文件结构体指针,失败返回NULL

2、fwrite 写文件

1
2
3
4
5
6
7
8
size_t fwrite(const void *ptr, size_t size, size_t nmemb,FILE *stream);
参数:
const void *ptr:源数据内存
size_t size:想要写入的一块内容的大小
size_t nmemb:一次准备写几块
FILE *stream:要写的文件指针
返回值:
成功返回nmemb,异常返回小于nmemb

3、fread 读取文件内容

1
2
3
4
5
6
7
8
size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream);
参数:
void *ptr:用来存放读取数据的内存
size_t size:想要读取的一块内容的大小
size_t nmemb:一次准备读几块
FILE *stream:要读取的文件指针
返回值:
成功返回nmemb,异常返回小于nmemb

4、文件偏移量相关函数

4.1fseek 设置文件偏移量

1
2
3
4
5
int fseek(FILE *stream, long offset, int whence);
参数:
stream:需要设置偏移量的文件指针
offset:新位置偏移量相对基准点的偏移
whence:基准点

4.2ftell 获取文件当前偏移量

1
2
3
long ftell(FILE *stream);
返回值:
成功返回当前位置偏移量,失败返回-1

4.3rewind 设置当前偏移量到文件开头

1
void rewind(FILE *stream);

5、判断文件访问到末尾还是错误

1
2
3
4
5
int feof(FILE *stream);//判断是否到文件末尾
//如果文件已到达末尾返回真,否则返回假

int ferror(FILE *stream);//判断文件操作是否遇到错误
//如果文件遇到错误则返回真,否则返回假

6、mmap 内存映射

1
2
3
4
5
6
7
8
9
#include <sys/mman.h>
void *mmap(void *addr, size_t length, int prot, int flags,int fd, off_t offset);
参数:
addr:
int munmap(void *addr, size_t length);//解除映射

#include <string.h>
void *memset(void *s, int c, size_t n);//内存赋值
void *memcpy(void *dest, const void *src, size_t n);//内存拷贝

7、一次读写一个字符的数据

7.1获取字符

1
2
3
4
int fgetc(FILE *stream);//函数
int getc(FILE *stream);//宏
int getchar(void); //从标准输入设备读取一个字符
返回值:成功:读取到的字符 失败:EOF

7.2写入字符

1
2
3
4
int fputc(int c, FILE *stream);
int putc(int c, FILE *stream);
int putchar(int c); //从标准输出设备输出一个字符
返回值:成功:写入到的字符 失败:EOF

8、一次读写一行数据

8.1获取数据

1
2
3
char *fgets(char *s, int size, FILE *stream);
char *gets(char *s);
返回值:成功:自定义缓冲区指针s 失败:NULL

8.2写入数据

1
2
3
int fputs(const char *s, FILE *stream);
int puts(const char *s);
返回值:成功:非负整数 失败:EOF

9、检测文件是否存在函数access

1
2
3
//检查文件是否存在,是否有读、写、执行权限
// 如果检查存在,那么就返回0,否者返回-1
int access(const char *pathname, int mode);

10、格式化IO函数

10.1读取数据:从指定文件或内存中读取格式化数据

1
2
3
int fscanf(FILE *restrict stream, const char *restrict format, ... );
int scanf(const char *restrict format, ... );
int sscanf(const char *restrict s, const char *restrict format, ... );

10.2写入数据:将格式化数据写入指定的文件或内存

1
2
3
4
int fprintf(FILE *restrict stream, const char *restrict format, ...);
int printf(const char *restrict format, ...);
int snprintf(char *restrict s, size_t n,const char *restrict format, ...);
int sprintf(char *restrict s, const char *restrict format, ...);

11、标准IO缓冲区控制

1
2
3
4
5
6
7
8
void setbuf(FILE *stream, char *buf); 
void setbuffer(FILE *stream, char *buf, size_t size);
void setlinebuf(FILE *stream);
int setvbuf(FILE *stream, char *buf, int mode, size_t size);
stream:文件指针
buf:缓冲区地址,如果为NULL,那么无缓冲
mode:缓冲模式,_IONBF unbuffered, _IOLBF line buffered , _IOFBF fully buffered
size:缓冲器大小