Linux虚拟文件系统之文件读取(sys_read())
在文件成功打开之后,进程将使用内核提供的read和write系统调用,来读取或修改文件的数据。内核中文件读写操作的系统调用实现基本都一样,下面我们看看文件的读取。
- /*sys_read()*/
- SYSCALL_DEFINE3(read, unsigned int, fd, char __user *, buf, size_t, count)
- {
- struct file *file;
- ssize_t ret = -EBADF;
- int fput_needed;
- /*从fd中获取相应文件对象地址*/
- file = fget_light(fd, &fput_needed);
- if (file) {
- /*获取文件访问指针*/
- loff_t pos = file_pos_read(file);</pre><pre name="code" class="cpp"><span style="white-space:pre"> </span>/*实现*/
- ret = vfs_read(file, buf, count, &pos);
- /*位置指针移动*/
- file_pos_write(file, pos);
- /*释放文件对象*/
- fput_light(file, fput_needed);
- }
- /*返回读取的字节数*/
- return ret;
- }
- 读取实现,返回读取字节数
- ssize_t vfs_read(struct file *file, char __user *buf, size_t count, loff_t *pos)
- {
- ssize_t ret;
- /*如果标志中不允许所请求的访问,则返回*/
- if (!(file->f_mode & FMODE_READ))
- return -EBADF;
- /*如果没有相关的操作,则返回*/
- if (!file->f_op || (!file->f_op->read && !file->f_op->aio_read))
- return -EINVAL;
- /*检查参数*/
- if (unlikely(!access_ok(VERIFY_WRITE, buf, count)))
- return -EFAULT;
- /*对要访问的文件部分检查是否有冲突的强制锁*/
- ret = rw_verify_area(READ, file, pos, count);
- if (ret >= 0) {
- count = ret;
- /*下面的方法返回实际传送的字节数,文件指针被适当的修改*/
- if (file->f_op->read)/*如果定义,则用他来传送数据*/
- ret = file->f_op->read(file, buf, count, pos);
- else
- /*通用读取例程*/
- ret = do_sync_read(file, buf, count, pos);
- if (ret > 0) {
- fsnotify_access(file->f_path.dentry);
- add_rchar(current, ret);
- }
- inc_syscr(current);
- }
- /*返回实际传送字节数*/
- return ret;
- }
Linux虚拟文件系统之文件读取(sys_read())相关推荐
- 网络与IO知识扫盲(一):Linux虚拟文件系统,文件描述符,IO重定向
系统IO原理 在 Linux 中: VFS(Virtual Filesystem Switch):虚拟文件系统,是一个目录树.树上不同的节点可以映射到物理的文件地址,可以挂载. 相当于一个解耦层,在具 ...
- Linux虚拟文件系统、文件描述符、管道
在Linux中,所有内容都是以文件的形式保存和管理的,即一切皆文件,普通文件是文件,目录(Windows下称为文件夹)是文件,硬件设备(键盘.监视器.硬盘.打印机等)都是文件,就连套接字(socket ...
- linux 目录防篡改,一种基于Linux虚拟文件系统的防篡改方法及系统的制作方法
一种基于Linux虚拟文件系统的防篡改方法及系统的制作方法 [技术领域] [0001]本发明涉及文件防护技术领域,特别涉及一种基于Linux虚拟文件系统的防篡改方法及系统. [背景技术] [0002] ...
- Linux虚拟文件系统:数据结构与文件系统注册、文件打开读写
数据结构 超级块 - super_block 索引节点 - inode 目录项 - dentry 文件结构 - file 虚拟文件系统实现 注册文件系统 - register_filesystem 打 ...
- Linux虚拟文件系统
从文件 I/O 看 Linux 的虚拟文件系统 1 引言 Linux 中允许众多不同的文件系统共存,如 ext2, ext3, vfat 等.通过使用同一套文件 I/O 系统 调用即可对 Linux ...
- Linux 虚拟文件系统四大对象:超级块、inode、dentry、file之间关系
一:文件系统 1. 什么是文件系统? 操作系统中负责管理和存储文件信息的软件机构称为文件管理系统,简称文件系统. 通常文件系统是用于存储和组织文件的一种机制,便于对文件进行方便的查找与访问. 文件系统 ...
- linux虚拟文件系统浅析
linux虚拟文件系统浅析 虚拟文件系统(VFS) 在我看来, "虚拟"二字主要有两层含义: 1, 在同一个目录结构中, 可以挂载着若干种不同的文件系统. VFS隐藏了它们的实现细 ...
- Linux 虚拟文件系统(一)概述
Linux 虚拟文件系统(一)概述 tags: Linux源码 Linux 虚拟文件系统一概述 文章梗概 正文 文件系统 虚拟文件系统架构 虚拟文件系统如何知道可用的文件系统有哪些的 不太喜欢的环节 ...
- linux 文件系统 vfs,linux虚拟文件系统vfs
<操作系统>课程设计报告课程设计题目:操作系统课程设计 设计时间:2016/1/10一. 课程设计目的与要求需要完成的内容:(1) 安装虚拟机:Vmware.Vmware palyer ( ...
- linux 创建 虚拟文件系统设备 文件节点 使用 proc_create 实例 简介
proc虚拟文件系统也可以创建虚拟文件节点,实现用户空间与内核空间的交互.在驱动中创建节点,可以实现对硬件的控制.proc_create函数原型(在kernel-3.10/include/linux/ ...
最新文章
- 为什么优秀的程序员都成了无能的领导?
- linux 进程 地址空间 内存分布 简介
- Python教程:os 与 sys 模块详细用法
- java+testng接口测试入门
- SFTP多用户权限 linux环境 一站式解决方案
- python安装不上怎么办_python依赖安装失败怎么办
- 单例模式应用场景_面试:请你谈谈单例模式的优缺点,注意事项,使用场景
- ROS——RPLIDAR A1 SDK详解
- 实验02 使用网络模拟器Packet Tracer
- 2020快手上市招股书
- python之shapely库的使用
- 行业权威来揭秘,商用PC为什么首选12代酷睿
- 无代码开发大众化,摆脱Excel轻松管理企业数据
- entity framework core mysql,DotNet Core下使用 EntityFrameworkCore 操作MySQL (一)
- 已解决TypeError: Descriptors cannot not be created directly.
- 数据库设计学习①:数据库设计简介
- 【古琴】初学者选择练习琴的六条准则
- 基础工业工程一些知识点 易树平第二版
- Web3时代加密元宇宙才是唯一可行的道路
- WARNING: Unknown module: java.rmi specified to --add-opens如何解决