一、背景
有时候需要在Linux kernel(大多是在需要调试的驱动程序)中读写文件数据。在kernel中操作文件没有标准库可用,需要利用kernel的一些函数,这些函数主要有:filp_open()、filp_close()、vfs_read()、vfs_write()、set_fs()、get_fs()等,使用这些函数的时候需要包含头文件<linux/fs.h>和<asm/uaccess.h>
二、API
//filename:表明要打开或创建文件的名称,包含路径部分,在内核中打开文件需要注意打开文件的时机,很容易出现需要打开文件的驱动很早就加载并打开文件,但被打开的文件所在设备还没有挂载到文件系统中,会导致打开失败
//open_mode:文件打开方式,其取值与标准库中的open相应参数类似,可以取O_CREATE,O_RDWR,O_RDONLY,O_WRONLY等
//mode:创建文件时使用,设置创建文件的读写权限,其他情况可以忽略设为0
struct file* filp_open(const char *filename, int open_mode, int mode);
//用于查找形参filename代表的文件的属性信息,将其保存到形参stat中返回给用户
static inline int vfs_stat(const char __user filename, struct kstat stat);
//结构体kstat原型
struct kstat {
u64 ino;
dev_t dev;
umode_t mode;
unsigned int nlink;
kuid_t uid;
kgid_t gid;
loff_t size;
struct t