linux内核中的文件描述符(三)--fd的回收
Kernel version:2.6.14
CPU architecture:ARM920T
Author:ce123(http://blog.csdn.net/ce123)
1.close函数
上图说明了close(fd)的执行过程,主要包括两部分:释放文件描述符fd,关闭文件file。
//fs/open.c
asmlinkage long sys_close(unsigned int fd)
{
struct file * filp;
struct files_struct *files = current->files;//获得当前进程的files结构
struct fdtable *fdt;
spin_lock(&files->file_lock);
fdt = files_fdtable(files);//通过进程的打开文件列表获得文件描述符位图结构
if (fd >= fdt->max_fds)
goto out_unlock;
filp = fdt->fd[fd];
if (!filp)
goto out_unlock;
rcu_assign_pointer(fdt->fd[fd], NULL);