在使用语言编写服务的时候不乏会遇到需要对文件进行操作的场景,Linux内核是用C语言写的,了解Linux之前先熟悉一下C语言文件操作接口,方便对比。
C语言文件操作接口
C语言文件描述
#ifndef _FILE_DEFINED |
|
struct _iobuf {
|
|
char *_ptr; //文件输入的下一个位置 |
|
int _cnt; //当前缓冲区的相对位置 |
|
char *_base; //指基础位置(即是文件的起始位置) |
|
int _flag; //文件标志 |
|
int _file; //文件描述符id |
|
int _charbuf; //检查缓冲区状况,如果无缓冲区则不读取 |
|
int _bufsiz; //文件缓冲区大小 |
|
char *_tmpfname; //临时文件名 |
|
}; |
|
typedef struct _iobuf FILE; |
|
#define _FILE_DEFINED |
|
#endif |
C语言对文件操作需要的数据都存在这样的数据结构里,C语言对文件操作时,用一个数据结构唯一标识一个文件流
fopen()
FILE* fopen(const char *path, const char *mode); |
返回值为文件流结构体指针,当打开失败时返回NULL指针。
对文件操作前需先打开文件,打开文件使用接口fopen()。
参数:
path: 文件路径,可以是相对路径也可以是绝对路径(默认为进程打开时路径)
mode: 打开方式
模式 | 含义 | 文件不存在时 |
---|---|---|
r | 只读 | 报错 |
w | 只写 | 创建文件 |
a | 追加只写 | 创建文件 |
rb | 二进制只读 | 报错 |
wb | 二进制只写 | 创建文件 |
ab | 二进制追加只写 | 创建文件 |
r+ | 读写 | 报错 |
w+ | 读写 | 创建文件 |
a+ | 追加读写 | 创建文件 |
rb+ | <