linux内核read操作源代码分析

read操作是任何操作系统里的基本操作,我们来看一下在linux内核里,read文件是怎样实现的。
read函数在用户空间是由read系统调用实现的,由编译器编译成软中断int 0x80来进入内核空间,然后在中端门上进入函数sys_read,从而进入内核空间执行read操作。
sys_read函数定义在fs/read_write.c文件,定义如下
asmlinkage ssize_t sys_read(unsigned int fd, char __user * buf, size_t count)
{
	struct file *file;/*文件指针*/
	ssize_t ret = -EBADF;
	int fput_needed;


	/*轻量级的由文件描述符得到文件指针函数*/
	file = fget_light(fd, &fput_needed);
	if (file) {
		/*file结构体里的指示文件读写位置的int变量读取*/
		loff_t pos = file_pos_read(file);
		/*vfs虚拟文件系统实现read操作的地方*/
		ret = vfs_read(file, buf, count, &pos);
		/*file结构体里的指示文件读写位置的int变量写入*/
		file_pos_write(file, pos);
		/*释放file结构体指针*/
		fput_light(file, fput_needed);
	}


	return ret;
}

首先看看file_pos_read和file_pos_write函数吧,定义如下
static inline loff_t file_pos_read(struct file *file)
{
	return file->f_pos;
}
static inline v
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值