文件、描述符与索引节点总结

2024-06-15 07:18
文章标签 总结 索引 节点 描述符

本文主要是介绍文件、描述符与索引节点总结,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Linux对文件的内容和描述符文件的信息给出了清楚地区分:

除了文件设备文件和特殊的文件系统,每个文件都由字符序列组成,文件内容不包含任何控制字符

 

文件系统处理文件需要的所有信息包含在inode数据结构里面,每个文件都有自己的索引节点,文件系统使用索引节点来标志文件

struct inode

{

struct hlist_head i_hash; 散列表

struct list_head   i_list; 索引节点链表

struct list_head i_sb_list; 超级块链表

struct list_head i_dentry; 目录项链表

unsigned  long i_ino; 节点号

atomic_t i_count; 引用计数

unsigned int i_nlink; 硬链接数

uid_t i_uid; 使用者id

gid_t i_gid; 使用组id

kdev_t i_rdev; 实际设备标识符

u64 i_version; 版本号

loff_t i_size; 字节为单位的文件大小

seqcount_t i_size_seqcount; 对i_size进行串行计数

struct  timespec  iatime; 最后访问时间

struct  timespec  imtime; 最后修改实际

struct  timespec  ictime; 最后改变时间

unsigned  int  i_blkbits; 以位为单位的块大小

blkcnt_t i_blocks; 文件块数

unsigned short i_bytes; 使用的字节数

umode_t i_mode; 访问权限

spinlock_t i_lock; 自旋锁

struct rw_semaphore i_alloc_sem; 嵌入i_sem内部

struct semaphore  i_sem; 索引节点信号量

struct inode_operations *i_op; 索引节点操作表

struct file_operations  *i_fop; 缺省的索引节点操作

struct super_block *i_sb; 相关超级块

struct file_lock *i_flock; 文件锁链表

struct address_space *i_mapping; 相关地址映射

struct address_space i_data; 设备地址映射

struct dquot *i_dquot[MAXQUOTAS];索引节点磁盘限额

struct list_head i_devices; 块设备链表

union

{

struct pipe_inode_info *i_pipe; 管道信息

struct block_device *i_bdev; 块设备驱动

struct  cdev *i_cdev; 字符设备驱动

};

unsigned long i_dnotify_mask; 目录通知掩码

struct dnotify_struct *idnotify; 目录通知

struct list_head inotify_watches; 索引节点通知监测链表

struct mutex inotify_mutex 保护inotify_watches

unsigned  long i_state; 状态标志

unsigned  long dirtied_when; 第一次能脏数据时间

unsigned  int  i_flags; 文件系统标志

atomic_t i_writecount; 写着计数

void *i_security; 安全模块

void *i_private fs私有指针

};

虽然文件系统及内核函数对索引节点的处理可能随系统而异。但是他们必须至少提供POSIX标准制定的一些特性:

1,文件类型

2,与文件相关的硬链接个数

3,以字节为单位的文件长度

4,设备标识符(包含文件的设备的标识符)

5,在文件系统中标志文件的索引节点

6,文件拥有者的UID

7,文件的用户组ID

8,几个时间戳,表征索引节点状态改变的时间、最好访问时间及修改时间

9,访问权限和文件模式

 

文件的潜在用户三种类型:

  1,作为文件所有者用户

  2,同组用户,不包括所有者

  3,所有剩下的用户

文件权限的三种附加标记:

suid(set user ID)

  进程执行一个文件时通常保持进程拥有者的UID。然而,如果设置了可执行suid的标志位,进程就获得了该文件拥有者的UID

sgid(set group ID)

  进程执行一个文件时保持进程组的用户组ID。然而,如果设置了可执行文件sgid的标志位,进程就获得了该文件用户组的ID

sticky

  设置了sticky标志位的可执行文件相当于想内核发出了一个请求,当程序执行结束以后,依然将它保留在内存(已过时)

 

 

 

当文件由一个进程创建时,文件拥有者的ID就是该进程的UID。

而其用户组ID可以是进程创建者的ID,也可以是父目录的ID,这取决于父目录sgid标志位的值

 

当用户访问一个普通文件或目录文件内容时,实际上市访问存储在硬盘块设备上的一些数据结构。因此,文件系统是硬盘分区物理组织的用户级视图

一个打开的文件对象包括:

  文件操作的一些数据结构,如指定文件打开的一组标志,表示文件当前位置的偏移量字段

  进程可以调用的一些内核函数指针

 

POSIX语义所支持的特性:

文件描述符表示进程与打开文件之间的交互,而打开文件对象包含了与这种交互相关的数据。同一个打开文件对象也行由

同一个进程中的几个文件描述符标志

几个进程也许同时打开同一文件

这篇关于文件、描述符与索引节点总结的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1062780

相关文章

oracle数据库索引失效的问题及解决

《oracle数据库索引失效的问题及解决》本文总结了在Oracle数据库中索引失效的一些常见场景,包括使用isnull、isnotnull、!=、、、函数处理、like前置%查询以及范围索引和等值索引... 目录oracle数据库索引失效问题场景环境索引失效情况及验证结论一结论二结论三结论四结论五总结ora

Android数据库Room的实际使用过程总结

《Android数据库Room的实际使用过程总结》这篇文章主要给大家介绍了关于Android数据库Room的实际使用过程,详细介绍了如何创建实体类、数据访问对象(DAO)和数据库抽象类,需要的朋友可以... 目录前言一、Room的基本使用1.项目配置2.创建实体类(Entity)3.创建数据访问对象(DAO

Python中列表的高级索引技巧分享

《Python中列表的高级索引技巧分享》列表是Python中最常用的数据结构之一,它允许你存储多个元素,并且可以通过索引来访问这些元素,本文将带你深入了解Python列表的高级索引技巧,希望对... 目录1.基本索引2.切片3.负数索引切片4.步长5.多维列表6.列表解析7.切片赋值8.删除元素9.反转列表

Java向kettle8.0传递参数的方式总结

《Java向kettle8.0传递参数的方式总结》介绍了如何在Kettle中传递参数到转换和作业中,包括设置全局properties、使用TransMeta和JobMeta的parameterValu... 目录1.传递参数到转换中2.传递参数到作业中总结1.传递参数到转换中1.1. 通过设置Trans的

MySQL的索引失效的原因实例及解决方案

《MySQL的索引失效的原因实例及解决方案》这篇文章主要讨论了MySQL索引失效的常见原因及其解决方案,它涵盖了数据类型不匹配、隐式转换、函数或表达式、范围查询、LIKE查询、OR条件、全表扫描、索引... 目录1. 数据类型不匹配2. 隐式转换3. 函数或表达式4. 范围查询之后的列5. like 查询6

C# Task Cancellation使用总结

《C#TaskCancellation使用总结》本文主要介绍了在使用CancellationTokenSource取消任务时的行为,以及如何使用Task的ContinueWith方法来处理任务的延... 目录C# Task Cancellation总结1、调用cancellationTokenSource.

PostgreSQL如何查询表结构和索引信息

《PostgreSQL如何查询表结构和索引信息》文章介绍了在PostgreSQL中查询表结构和索引信息的几种方法,包括使用`d`元命令、系统数据字典查询以及使用可视化工具DBeaver... 目录前言使用\d元命令查看表字段信息和索引信息通过系统数据字典查询表结构通过系统数据字典查询索引信息查询所有的表名可

HarmonyOS学习(七)——UI(五)常用布局总结

自适应布局 1.1、线性布局(LinearLayout) 通过线性容器Row和Column实现线性布局。Column容器内的子组件按照垂直方向排列,Row组件中的子组件按照水平方向排列。 属性说明space通过space参数设置主轴上子组件的间距,达到各子组件在排列上的等间距效果alignItems设置子组件在交叉轴上的对齐方式,且在各类尺寸屏幕上表现一致,其中交叉轴为垂直时,取值为Vert

【前端学习】AntV G6-08 深入图形与图形分组、自定义节点、节点动画(下)

【课程链接】 AntV G6:深入图形与图形分组、自定义节点、节点动画(下)_哔哩哔哩_bilibili 本章十吾老师讲解了一个复杂的自定义节点中,应该怎样去计算和绘制图形,如何给一个图形制作不间断的动画,以及在鼠标事件之后产生动画。(有点难,需要好好理解) <!DOCTYPE html><html><head><meta charset="UTF-8"><title>06

学习hash总结

2014/1/29/   最近刚开始学hash,名字很陌生,但是hash的思想却很熟悉,以前早就做过此类的题,但是不知道这就是hash思想而已,说白了hash就是一个映射,往往灵活利用数组的下标来实现算法,hash的作用:1、判重;2、统计次数;