`
tcspecial
  • 浏览: 914938 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

内核下读写文件

阅读更多

内核中操作文件函数与用户层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内核中读写文件数据方式详解

    ### Linux内核中读写文件数据方式详解 #### 概述 在Linux内核开发过程中,经常需要在内核环境中读写文件数据,特别是在调试驱动程序时。由于内核环境中无法直接使用标准库,因此必须借助内核提供的特定API来进行...

    Linux内核中读写文件数据的方法

    在Linux内核编程中,有时候需要直接在内核空间中读写文件,这通常发生在调试驱动程序时。由于内核环境中没有标准C库的支持,必须使用内核提供的特定函数来实现这一目标。以下是对主要涉及的函数的详细解释: 1. **...

    windows内核驱动读写文件

    windows内核驱动条件下文件的创建、读、写等功能实现源码。适用于驱动调试和运行观察的日志打印输出,比Windbg和reaceview更方便。

    精选_Ring0内核层下读写文件实现文件复制_源码打包

    首先,理解在Ring0下读写文件的机制至关重要。在操作系统中,文件操作通常通过系统调用来完成,这些调用会被内核处理。在Ring0层,可以直接调用内核函数,无需通过用户态到内核态的切换,因此速度更快。具体来说,这...

    从内核文件系统看文件读写过程.docx

    ### 从内核文件系统视角探究文件读写过程 #### 一、系统调用机制及其在文件操作中的应用 在现代操作系统中,为了确保资源的安全管理和高效利用,引入了“用户模式”与“内核模式”的概念。这两种模式分别对应着...

    Linux-kernel-file-IO.rar_Linux IO_linux 文件读写_linux读写文件_文件io_简单内核

    本节将详细探讨Linux内核中的文件I/O机制以及如何在内核中实现简单的文件读写操作。 1. **文件描述符**:在Linux中,每个打开的文件都由一个文件描述符表示。文件描述符是一个非负整数,应用程序通过这个标识来访问...

    Windows驱动编程视频教程-内核模式下的文件操作

    2. **内核模式文件操作**:内核模式下的文件操作比用户模式更底层,它可以直接调用NTFS(New Technology File System)等文件系统的内核接口,实现读写、创建、删除、重命名等操作。这些操作需要正确管理和同步,以...

    android文件读写权限

    在Android应用开发中,文件读写权限是至关重要的一个环节,因为这关乎到应用程序能否正常地存储和访问数据。Android操作系统采用严格的权限管理系统,确保应用只能在其被授权的范围内操作。下面将详细介绍Android中...

    APIHook钩子文件监控 监控指定目录下文件的读写和修改.zip

    在本压缩包中,包含的文件主要是C++源代码及相关项目配置文件,用于实现一个APIHook钩子文件监控系统,该系统能够监控指定目录下的文件读写和修改操作。 1. **APIHook原理**: APIHook是通过拦截系统API调用来改变...

    内核移植及根文件系统制作(图解)

    8. **修改权限**:根据需要,对文件和目录设置适当的读写执行权限,确保系统安全且正常运行。 9. **创建 cramfs 文件系统**:将制作好的根文件系统打包成cramfs格式,以便于在nand flash上存储。 10. **下载并写入...

    CentOS读写ntfs内核

    ntfs-3g的一个优势是,我们可以在不编辑此文件的情况下,直接读写NTFS分区,这对于临时连接的移动硬盘或者USB设备非常方便。 6. **手动挂载**:通常,Linux需要手动挂载非原生支持的文件系统。但是ntfs-3g允许用户...

    如何在Linux内核中读写文件数据实现方法说明-综合文档

    如何在Linux内核中读写文件数据实现方法说明[摘要]有时候需要在Linuxkernel-大多是在需要调试的驱动程序-中读写文件数据。在kernel中操作文件没有标准库可用,需要利用kernel的一些函数,这些函数主要有:...

    疯狂内核之——虚拟文件系统

    页面高速缓存(page cache)是Linux内核中的一个重要组成部分,它主要用于提高文件读写操作的速度。 **4.1 页高速缓存数据结构** - **4.1.1 address_space对象**:表示文件的内存映射,包含了与文件相关的所有页面。...

    开发windows驱动程序,实现监控文件读写操作.zip

    总的来说,开发Windows驱动程序来监控文件读写操作涉及的知识点广泛,包括驱动编程基础、文件系统原理、IRP处理以及内核模式编程。理解并掌握这些内容,开发者可以创建出能够有效监控系统文件活动的驱动程序。

    基于读写优化的内核级加密文件系统_裴灿浩1

    在这一背景下,裴灿浩等人提出了【基于读写优化的内核级加密文件系统】(KCFS),以期提供更为高效和便捷的数据加密服务,从而增强数据的机密性。KCFS 旨在解决传统加密应用程序操作繁琐和用户级加密文件系统性能低下...

    Windows内核模块中的写文件操作

    在编写Windows驱动程序的时候,往往使用debugview打印日志,单步跟踪驱动程序的执行情况,但是,有时候debugview的功能还不够,需要手动将驱动程序里的某些信息写入本地文件,该程序就是实现这个功能

    linux内核修改,监控系统所有读写操作

    Linux内核修改,通过修改linux内核可以对系统的所有读写操作 <br>进行监控,通过对这些读写操作的监控,可以获取系统中所有读 <br>写操作的详细信息。这种做法也叫做“加塞子”,通过“加塞子 <br>”可以...

    vc监控win9x下文件的读写.visual c++

    在Windows 9x系统环境下,使用Visual C++进行文件监控是一项技术挑战,因为这些较旧的操作系统使用的是不同的内核模型。在这个项目中,我们主要关注如何利用VC++的编程能力来实现对文件读写操作的监控。以下是一些...

    LINUX内核探秘:深入解析文件系统和设备驱动

    《LINUX内核探秘:深入解析文件系统和设备驱动》一书,是关于Linux操作系统内核中核心组件——文件系统和设备驱动的深度解析。Linux文件系统是操作系统与硬件之间的重要桥梁,它负责管理存储设备上的数据,而设备...

    android读写文件

    Android采用Linux内核,因此其文件系统遵循POSIX标准。应用程序可以访问外部存储(如SD卡)和内部存储(应用私有目录)。在Android 6.0(API级别23)及以上版本,外部存储的读写需获取相应的权限。 二、内部存储的...

Global site tag (gtag.js) - Google Analytics