void driver_read_file(const char *filename)
{
struct file *pfile;
mm_segment_t old_fs;
char read_buf[100] = {0};
struct inode *inode;
int ret;
off_t fsize;
int pkg_size = 64;
int left;
int read_size;
pfile = filp_open(filename, O_RDONLY, 0);
if (IS_ERR(pfile)) {
pr_err("Open %s failed!\n", filename);
return;
}
old_fs = get_fs();
set_fs(KERNEL_DS);
inode = pfile->f_dentry->d_inode;
fsize = inode->i_size;
pr_err("file size: %ld bytes\n", fsize);
pr_err("file content: \n");
left = fsize;
while (left > 0) {
if (left > pkg_size) {
read_size = pkg_size;
}
else {
read_size = left;
}
ret = pfile->f_op->read(pfile, read_buf, read_size, &pfile->f_pos);
if (ret < 0) {
pr_err("read data failed, ret: %d\n", ret);
filp_close(pfile, NULL);
set_fs(old_fs);
return;
}
pr_err("%s\n", read_buf);
left -= read_size;
}
filp_close(pfile, NULL);
set_fs(old_fs);
}
<Linux> Linux Driver文件读取
最新推荐文章于 2024-02-10 07:00:00 发布