就是将open弄明白
open.c的核心就是sys_open()函数 就是找到inode,将inode读出来
当用户空间程序用open系统调用打开一个文件的时候,内核对应的处理是sys_open函数:
fs/open.c
asmlinkage long sys_open(const char __user * filename, int flags, int mode)
{
char * tmp;
int fd, error;
#if BITS_PER_LONG != 32
flags |= O_LARGEFILE;
#endif
tmp = getname(filename);//从进程地址空间读取该文件的路径名
fd = PTR_ERR(tmp);
if (!IS_ERR(tmp)) {
fd = get_unused_fd();//调用get_unused_fd()在current->files->fd中查找一个空的位置。相应的索引存放在fd局部变量中
if (fd >= 0) {
//打开文件,将文件名转换成文件结构
struct file *f = filp_open(tmp, flags, mode);
//调用file_open()函数,传递他的参数为路径名、访问模式标志、以及许可权位掩码
error = PTR_ERR(f);
if (IS_ERR(f))
goto out_error;
fd_install(fd, f);
}
}
对于filp_open()文件打开函数,filp_open()的定义也在open.c文件中