内核文件系统API之put_unused_fd

本文详细介绍了Linux系统中文件描述符(fd)的管理方法,包括如何通过`put_unused_fd`函数将不再使用的文件描述符从文件系统的bitmap中清除。文章深入解析了相关内核源码,并展示了关键步骤。

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

void put_unused_fd(unsigned int fd)用于将形参对应的fd在其文件系统打开文件的bitmap中清零。
其源码分析如下:
void put_unused_fd(unsigned int fd)
{	#得到当前进程对应文件管理结构体
	struct files_struct *files = current->files;
	#操作bitmap时需要spinlock 锁保护
	spin_lock(&files->file_lock);
	#清理fd对应的bitmap
	__put_unused_fd(files, fd);
	spin_unlock(&files->file_lock);
}

static void __put_unused_fd(struct files_struct *files, unsigned int fd)
{
	#根据files_struct得到fdtable
	struct fdtable *fdt = files_fdtable(files);
	#清理fd对应的bitmap
	__clear_open_fd(fd, fdt);
	#如果fd小于next_fd,则将fd赋值给next_fd
	if (fd < files->next_fd)
		files->next_fd = fd;
}
static inline void __clear_open_fd(unsigned int fd, struct fdtable *fdt)
{
	#可以看到要关闭一个fd,需要清理两个bitmap。分别是open_fds和full_fds_bits
	__clear_bit(fd, fdt->open_fds);
	__clear_bit(fd / BITS_PER_LONG, fdt->full_fds_bits);
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值