Linux open系统调用流程(1)

本文详细介绍了Linux内核中open系统调用的流程,从通过sys_open函数开始,接着调用get_unused_fd获取未使用的文件描述符,然后使用do_filp_open构建并填充文件对象,最后通过fd_install将文件对象与进程的files_struct结构关联。整个过程旨在理解Linux内核如何处理文件打开操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.概述

我们知道,Linux把设备看成特殊的文件,称为设备文件。在操作文件之前,首先必须打开文件,打开文件的函数是通过open系统调用来实现的。而简单的文件打开操作,在Linux内核实现却是非常的复杂。open函数打开原理就是将进程files_struct结构体和文件对象file相关联。那么具体是怎么实现的呢?让我们一起走进Linux内核文件打开流程。

2. 首先,通过系统调用sys_open函数:

//打开文件的系统调用
asmlinkage long sys_open(const char __user *filename, int flags, int mode)
{
	long ret;

	if (force_o_largefile())
		flags |= O_LARGEFILE;
	//调用do_sys_open函数
	ret = do_sys_open(AT_FDCWD, filename, flags, mode);
	/* avoid REGPARM breakage on x86: */
	prevent_tail_call(ret);
	return ret;
}

这个函数进行了简单的处理,调用do_sys_open函数:

long do_sys_open(int dfd, const char __user *filename, int flags, int mode)
{
	/*将从用户空间传入的路径名复制到内核空间*/
	char *tmp = getname(filename);
	int fd = PTR_ERR(tmp);

	if (!IS_ERR(tmp)) {
		/*得到一个没有使用的文件描述符*/
		fd = get_unused_fd();
		if (fd >= 0) {
			/*file对象是文件对象,存在于内存,所以没有回写,f_op被赋值*/
			struct file *f = do_filp_o
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值