下面是一段内核中读取文件的代码
使用到函数
filp_open
vfs_read
文件读取代码
char* file_read(const char * file_path)
{
struct file *file = NULL;
struct inode *inode = NULL;
char *file_buf;
loff_t fsize;
loff_t *pos;
mm_segment_t old_fs;
static char error[] = "none";
file = filp_open(file_path,O_RDWR,0664);
if (IS_ERR(file))
{
return error;
}
inode = file->f_dentry->d_inode;
fsize = inode->i_size;
old_fs = get_fs();
set_fs(KERNEL_DS);
pos = &(file->f_pos);
file_buf = (char *)kmalloc(fsize+1,GFP_KERNEL);
vfs_read(file, file_buf, fsize, pos);
filp_close(file, NULL);
set_fs(old_fs);
return file_buf;
}
内核代码中使用:
if(strstr(file_read("/sdcard/1.txt"),"test"))
{
///sdcard/1.txt中包含字符串test
......
}
判断文件是否存在代码
int check_file_exists(const char *file_path) {
struct file *file = NULL;
file = filp_open(file_path,O_RDWR,0664);
if (IS_ERR(file))
{
return -5;
}
return 0;
}
内核代码中使用:
if(check_file_exists("/sdcard/.tea/fstatatappuid.txt") == 0)
{
//文件存在
}