我们在调试linux内核驱动程序时或者某些特殊场景下,需要直接读写文件,但是我们不适合直接使用系统调用sys_open(),sys_read(),sys_write()等.我们可以利用其它内核函数来实现,filp_open() ,filp_close(), vfs_read()vfs_write()等,这些函数在linux/fs.h和asm/uaccess.h头文件中声明。
1. 打开文件
strcut file* filp_open(const char* filename, int open_mode, int mode);
该函数返回strcut file*结构指针,该返回值用IS_ERR()来检验其有效性。
参数说明
filename: 表明要打开或创建文件的名称(包括路径部分)。
open_mode: 文件的打开方式,其取值与标准库中的open相应参数类似,可以取O_CREAT,O_RDWR,O_RDONLY等。
mode: 创建文件时使用,设置创建文件的读写权限,其它情况可以匆略设为0
我们通过分析linux kernel源代码可以发现,系统调用sys_open()的实现如下:
SYSCALL_DEFINE3(open, const char __user *, filename, int, flags, umode_t, mode)
{
long ret;
if (force_o_largefile())
flags |= O_LARGEFILE;
ret = do_sys_open(AT_FDC
{
long ret;
if (force_o_largefile())
flags |= O_LARGEFILE;
ret = do_sys_open(AT_FDC