内核中操作文件函数与用户层read,write这样API不同,需要使用内核空间专用的一套函数。
文件API
struct file *filp_open(const char *filename, int flags, int mode);
打开文件
int filp_close(struct file *filp, fl_owner_t id);
关闭文件,参数id为POSIX线程ID,一般设NULL
struct file { struct path f_path; //文件路径 const struct file_operations *f_op; //文件操作结构,定义了读写等众多操作函数 spinlock_t f_lock; /* f_ep_links, f_flags, no IRQ */ ... }; /* * NOTE: * read, write, poll, fsync, readv, writev, unlocked_ioctl and compat_ioctl * can be called without the big kernel lock held in all filesystems. */ struct file_operations { struct module *owner; loff_t (*llseek) (struct file *, loff_t, int); ssize_t (*read) (struct file *, char __user *, size_t, loff_t *); //读 ssize_t (*write) (struct file *, const char __user *, size_t, loff_t *); //写 ... }
测试
static void read_file( void ) { char szBuff[210] = {}; mm_segment_t oldfs; // 打开文件 fp = filp_open("/etc/redis/test.conf",O_RDWR,0); if(!fp || IS_ERR(fp)) { printk(KERN_ALERT "fail to open test.conf\n"); return -1; } // read if(!fp->f_op || !fp->f_op->read) { printk(KERN_ALERT "Can't read file\n"); return -1; } oldfs = get_fs(); // 获取原先地址空间设置 set_fs(KERNEL_DS); // 设置为内核空间 if(fp->f_op->read(fp,szBuff,210,&fp->f_pos) == 0)// 执行fp的read函数 { printk(KERN_ERR "Error in read file\n"); return -1; } set_fs(oldfs);// 还原为原先地址空间设置 printk(KERN_ALERT "%s\n",szBuff); // 关闭文件 filp_close(fp); return 0; }
相关推荐
有时候需要在Linux kernel--大多是在需要调试的驱动程序--中读写文件数据。在kernel中操作文件没有标准库可用,需要利用kernel的一些函数,这些函数主要有:filp_open() filp_close(), vfs_read() vfs_write(),set_...
在linux驱动中如何打开其他设备驱动提供的接口进行读写,此文档详细讲解,我看它才弄出来的。
windows内核驱动条件下文件的创建、读、写等功能实现源码。适用于驱动调试和运行观察的日志打印输出,比Windbg和reaceview更方便。
linux 2.6内核下读写文件的简单实例。
Ring0内核层下读写文件实现文件复制
操作系统的主要功能是为管理硬件资源和为应用程序开发人员...一些容易发生安全问题的操作都被限制在只有内核模式下才可以执行,例如I/O操作,修改基址寄存器内容等。而连接用户模式和内核模式的接口称之为系统调用。
微软的内核模式如何访问和读写文件,这个是基本的原理介绍和应用举例。
如何在Linux内核中读写文件数据实现方法说明[摘要]有时候需要在Linuxkernel-大多是在需要调试的驱动程序-中读写文件数据。在kernel中操作文件没有标准库可用,需要利用kernel的一些函数,这些函数主要有:...
在编写Windows驱动程序的时候,往往使用debugview打印日志,单步跟踪驱动程序的执行情况,但是,有时候debugview的功能还不够,需要手动将驱动程序里的某些信息写入本地文件,该程序就是实现这个功能
Linux内核修改,通过修改linux内核可以对系统的所有读写操作 <br>进行监控,通过对这些读写操作的监控,可以获取系统中所有读 <br>写操作的详细信息。这种做法也叫做“加塞子”,通过“加塞子 <br>”可以...
摘要:为增强数据的机密性,在对存储读写流程优化的基础上提出一种内核级加密文件系统(KCFS),该内核级加密文件系统能克服加密应用程序的使用不便利性和用户级加密文
有时候需要在Linuxkernel-大多是在需要调试的驱动程序-中读写文件数据。在kernel中操作文件没有标准库可用,需要利用kernel的一些函数,这些函数主要有:filpopenofilpclose),vfsreadOvfswrite(),setfs0,getfs...
5 文件读写 199 5.1 系统调用VFS层的处理 200 5.2 第二扩展文件系统Ext2层的处理 201 5.2.1 Ext2的磁盘布局 202 5.2.2 Ext2的超级块对象 206 5.2.3 Ext2索引节点对象的创建 210 5.2.4 Ext2索引节点对象的读取 218 ...
本书从Windows内核编程出发,全面系统地介绍了串口、键盘、磁盘、文件系统、网络等相关的Windows内核模块的编程技术,以及基于这些技术实现的密码保护、防毒引擎、文件加密、网络嗅探、网络防火墙等信息安全软件的...
驱动开发之磁盘文件读写监控.sys驱动程序.zip
易语言驱动汇编核心库,内核模块(处理蓝屏,通信,文件读写)
编译一个NTFS内核模块,实现linux挂载NTFS文件系统并实现读写功能
这是我大三时操作系统实践>>课做的windows操作系统文件读写示例程序,MFC做的,希望能对某些朋友有所帮助
在 /proc 文件系统中,我们可以将对虚拟文件的读写作为与内核中实体进行通信的一种手段,但是与普通文件不同的是,这些虚拟文件的内容都是动态创建的。本文对 /proc 虚拟文件系统进行了介绍,并展示了它的用法。 ...
SysInternal的FileMon文件读写监视程序的源代码.zip