【Linux】File 结构体,和 fd 的关系

本文详细探讨了Linux系统中File结构体的概念及其与文件描述符(fd)之间的联系。通过理解File结构体的内部工作原理,可以更好地了解内核如何管理和操作文件。文件描述符作为进程与打开文件交互的抽象接口,在系统调用中扮演关键角色。深入分析了File结构体的成员变量,包括文件位置指针、缓冲区管理等,阐述它们如何影响文件I/O操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. struct file
  struct file 结构体在 include/linux/fs.h 中定义。文件结构体代表一个打开的文件,系统中每个打开的文件在内核空间都有一个关联的 struct file。它由内核在打开文件时创
建,并传递给在文件上进行操作的任何函数。在文件的所有实例都关闭后,内核释放这个数据结构。在内核创建和驱动源码中,struct file 的指针通常被命名为 file 或 filp 
 
下面我们来展示 struct file  最重要的成员:

1)mode_t  f_mode
   文件模式确定文件是可读的或者可写的(或者都是),通过 位FMODE_READ和 FMODE_WRITE。 

2)loff_t  f_pos
   当前读写位置, loff_t 在所有平台都是 64 位( 在 gcc术语里是 long long)。 驱动可以读这个值,如果它需要知道文件中的当前位置,但是正常地不应该改变它;读和写应当使用它们作为最后参数而收到的指针来更新一个位置,代替直接作用于 filp->f_pos。这个规则的一个例外是在 lseek  方法中,它的目的就是改变文件位置。

3)unsigned  int  f_flags
   这些是文件标志,例如 O_RDONLY,O_NONBLOCK,和 O_SYNC。驱动应当检查 O_NONBLOCK  标志来看是否是请求非阻塞操作;其他标志很少使用。特别地,应当检查读/写许可,使用 f_mode 而不是 f_flags。所有的标志在头文件 <linux/fcntl.h> 中定义。

4)struct file_operations  *f_op
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值