inode file 浅析
在open()
inode 简介
1 inode 是 UNIX 操作系统中的一种数据结构,它包含了与文件系统中各个文件相关的一些重要信息。
2 inode或叫i节点 是指对文件的索引。文件是放在磁盘或flash上,就要编个目录,来说明文件的属性,如:在什么地方、大小等。便于操作系统用来找和管理。
3 在linux中,即一个文件对应一个inode,inode结构表示一个具体的文件.
4 #ls -i 或 ll -i 可以看到文件节点。inode 相同的文件是硬链接文件
file 简介
1 file 是一个文件描述符(file descriptor)。表示打开的文件描述符.
2 当一个文件被打开时,就产生一个文件描述符,多次打开就产生多个file,一一对应。
3 他记录了文件的当前位移量,文件位移量等数据,为每一个打开文件的操作服务。
4 它由内核在open时创建,可以传递给任何函数,直到最后关闭,由内核释放这个数据结构。
所以一个i节点可以有0个或多个文件描述符。多个文件描述符可以对应一个i节点。
struct inode
{
struct list_headi_list;
unsigned longi_ino; // 每一个inode都有一个序号
atomic_t i_count; // reference count,以确保如果某个结构正在使用,它不会被不小心释放掉
kdev_t i_dev; //*inode所在的device代码
umode_t i_mode; // inode的权限
nlink_t i_nlink; // hard link的个数
uid_t i_uid; // inode拥有者的id
gid_t i_gid; // inode所属的群组id
kdev_t i_rdev; //*如果inode代表的是device的话,那此字段将记录device的代码
off_t i_size; // inode所代表的档案大小
time_t i_ctime; // inode的产生时间
unsigned long i_state; // inode目前的状态,可以是I_DIRTY,I_LOCK和 I_FREEING的OR组合
...
};
struct file
{
struct path f_path;
const struct file_operations *f_op; //该操作 是定义文件关联的操作的。内核在执行open时对这个 指针赋值。
atomic_long_t f_count;
unsigned int f_flags; //该成员是文件标志。
loff_t f_pos;
unsigned int f_uid, f_gid;
void *private_data; //该成员是系统调用时保存状态信息非常有用的资源。
struct address_space *f_mapping;
...
};