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);
}
内核文件系统API之put_unused_fd
最新推荐文章于 2023-06-04 10:38:01 发布