linux内核file结构

Linux内核中的file结构体并不表示物理文件,而是用于管理进程与文件的交互。当进程打开文件时,内核创建file结构体,并将其添加到task_struct的链表中。file结构体包含了如文件操作函数集合、文件位置、权限模式和预读取状态等关键信息,用于实现文件的读写、控制和其他操作。
摘要由CSDN通过智能技术生成
linux内核中file结构体并不是物理上存在于硬盘上的,而是用于描述进程与文件的关系和操作的。每当进程打开一个文件的时候,linux内核就会建立一个file结构体,而task_struct里的指向file的链表就会添加一个已经打开的文件。
文件定义在include/linux/fs.h,定义如下,为了方便观看,直接在代码里以注释格式解析。。
struct file {
	/*
	 * fu_list 在文件书调用后就会不被使用,改用fu_rcuhead
	 */
	union {
		struct list_head	fu_list;
		struct rcu_head 	fu_rcuhead;
	} f_u;
	struct path		f_path; /* 描述文件路径的结构体 */
	/* 方便书写,格式统一 */
#define f_dentry	f_path.dentry
#define f_vfsmnt	f_path.mnt
	const struct file_operations	*f_op;/* 文件操作函数集合,比如读写,ioctl等 */
	atomic_t		f_count;/* 文件引用计数,当小于零的时候就释放 */
	unsigned int 		f_flags;/* 文件状态位 */
	mode_t			f_mode;/* 文件打开模式 */
	loff_t			f_pos; /* 文件读写的位置 */
	struct fown_struct	f_owner;/* 此结构体被哪个拥有 */
	unsigned int		f_uid, f_gid;/* 对应打开进程的用户id和用户组id */
	struct file_ra_state	f_ra;/* 文件预读取 */


	unsigned long		f_version;/* 版本 */
#ifdef CONFIG_SECURITY
	void			*f_security;/* 安全作用的指针 */
#endif
	/* 私有数据 */
	void			*private_data;


#ifdef CONFIG_EPOLL
	/* 被fs/eventpoll.c里使用把所有的钩子连接到这个文件 */
	struct list_head	f_ep_links;
	spinlock_t		f_ep_lock;
#endif 
	/* mapping只想一个address_space结构体,用作读写缓存 */
	struct address_space	*f_mapping;
};

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值