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

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

相关文章

java常见报错及解决方案总结

《java常见报错及解决方案总结》:本文主要介绍Java编程中常见错误类型及示例,包括语法错误、空指针异常、数组下标越界、类型转换异常、文件未找到异常、除以零异常、非法线程操作异常、方法未定义异常... 目录1. 语法错误 (Syntax Errors)示例 1:解决方案:2. 空指针异常 (NullPoi

Java反转字符串的五种方法总结

《Java反转字符串的五种方法总结》:本文主要介绍五种在Java中反转字符串的方法,包括使用StringBuilder的reverse()方法、字符数组、自定义StringBuilder方法、直接... 目录前言方法一:使用StringBuilder的reverse()方法方法二:使用字符数组方法三:使用自

Python依赖库的几种离线安装方法总结

《Python依赖库的几种离线安装方法总结》:本文主要介绍如何在Python中使用pip工具进行依赖库的安装和管理,包括如何导出和导入依赖包列表、如何下载和安装单个或多个库包及其依赖,以及如何指定... 目录前言一、如何copy一个python环境二、如何下载一个包及其依赖并安装三、如何导出requirem

Mysql中InnoDB与MyISAM索引差异详解(最新整理)

《Mysql中InnoDB与MyISAM索引差异详解(最新整理)》InnoDB和MyISAM在索引实现和特性上有差异,包括聚集索引、非聚集索引、事务支持、并发控制、覆盖索引、主键约束、外键支持和物理存... 目录1. 索引类型与数据存储方式InnoDBMyISAM2. 事务与并发控制InnoDBMyISAM

StarRocks索引详解(最新整理)

《StarRocks索引详解(最新整理)》StarRocks支持多种索引类型,包括主键索引、前缀索引、Bitmap索引和Bloomfilter索引,这些索引类型适用于不同场景,如唯一性约束、减少索引空... 目录1. 主键索引(Primary Key Index)2. 前缀索引(Prefix Index /

MySQL进阶之路索引失效的11种情况详析

《MySQL进阶之路索引失效的11种情况详析》:本文主要介绍MySQL查询优化中的11种常见情况,包括索引的使用和优化策略,通过这些策略,开发者可以显著提升查询性能,需要的朋友可以参考下... 目录前言图示1. 使用不等式操作符(!=, <, >)2. 使用 OR 连接多个条件3. 对索引字段进行计算操作4

Rust格式化输出方式总结

《Rust格式化输出方式总结》Rust提供了强大的格式化输出功能,通过std::fmt模块和相关的宏来实现,主要的输出宏包括println!和format!,它们支持多种格式化占位符,如{}、{:?}... 目录Rust格式化输出方式基本的格式化输出格式化占位符Format 特性总结Rust格式化输出方式

Python中连接不同数据库的方法总结

《Python中连接不同数据库的方法总结》在数据驱动的现代应用开发中,Python凭借其丰富的库和强大的生态系统,成为连接各种数据库的理想编程语言,下面我们就来看看如何使用Python实现连接常用的几... 目录一、连接mysql数据库二、连接PostgreSQL数据库三、连接SQLite数据库四、连接Mo

Java实现Elasticsearch查询当前索引全部数据的完整代码

《Java实现Elasticsearch查询当前索引全部数据的完整代码》:本文主要介绍如何在Java中实现查询Elasticsearch索引中指定条件下的全部数据,通过设置滚动查询参数(scrol... 目录需求背景通常情况Java 实现查询 Elasticsearch 全部数据写在最后需求背景通常情况下

Pandas中多重索引技巧的实现

《Pandas中多重索引技巧的实现》Pandas中的多重索引功能强大,适用于处理多维数据,本文就来介绍一下多重索引技巧,具有一定的参考价值,感兴趣的可以了解一下... 目录1.多重索引概述2.多重索引的基本操作2.1 选择和切片多重索引2.2 交换层级与重设索引3.多重索引的高级操作3.1 多重索引的分组聚