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

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

相关文章

JavaSE正则表达式用法总结大全

《JavaSE正则表达式用法总结大全》正则表达式就是由一些特定的字符组成,代表的是一个规则,:本文主要介绍JavaSE正则表达式用法的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下... 目录常用的正则表达式匹配符正则表China编程达式常用的类Pattern类Matcher类PatternSynta

MySQL之InnoDB存储引擎中的索引用法及说明

《MySQL之InnoDB存储引擎中的索引用法及说明》:本文主要介绍MySQL之InnoDB存储引擎中的索引用法及说明,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录1、背景2、准备3、正篇【1】存储用户记录的数据页【2】存储目录项记录的数据页【3】聚簇索引【4】二

全面解析MySQL索引长度限制问题与解决方案

《全面解析MySQL索引长度限制问题与解决方案》MySQL对索引长度设限是为了保持高效的数据检索性能,这个限制不是MySQL的缺陷,而是数据库设计中的权衡结果,下面我们就来看看如何解决这一问题吧... 目录引言:为什么会有索引键长度问题?一、问题根源深度解析mysql索引长度限制原理实际场景示例二、五大解决

C++链表的虚拟头节点实现细节及注意事项

《C++链表的虚拟头节点实现细节及注意事项》虚拟头节点是链表操作中极为实用的设计技巧,它通过在链表真实头部前添加一个特殊节点,有效简化边界条件处理,:本文主要介绍C++链表的虚拟头节点实现细节及注... 目录C++链表虚拟头节点(Dummy Head)一、虚拟头节点的本质与核心作用1. 定义2. 核心价值二

MySQL中的索引结构和分类实战案例详解

《MySQL中的索引结构和分类实战案例详解》本文详解MySQL索引结构与分类,涵盖B树、B+树、哈希及全文索引,分析其原理与优劣势,并结合实战案例探讨创建、管理及优化技巧,助力提升查询性能,感兴趣的朋... 目录一、索引概述1.1 索引的定义与作用1.2 索引的基本原理二、索引结构详解2.1 B树索引2.2

python3如何找到字典的下标index、获取list中指定元素的位置索引

《python3如何找到字典的下标index、获取list中指定元素的位置索引》:本文主要介绍python3如何找到字典的下标index、获取list中指定元素的位置索引问题,具有很好的参考价值,... 目录enumerate()找到字典的下标 index获取list中指定元素的位置索引总结enumerat

从入门到精通MySQL 数据库索引(实战案例)

《从入门到精通MySQL数据库索引(实战案例)》索引是数据库的目录,提升查询速度,主要类型包括BTree、Hash、全文、空间索引,需根据场景选择,建议用于高频查询、关联字段、排序等,避免重复率高或... 目录一、索引是什么?能干嘛?核心作用:二、索引的 4 种主要类型(附通俗例子)1. BTree 索引(

SQL中JOIN操作的条件使用总结与实践

《SQL中JOIN操作的条件使用总结与实践》在SQL查询中,JOIN操作是多表关联的核心工具,本文将从原理,场景和最佳实践三个方面总结JOIN条件的使用规则,希望可以帮助开发者精准控制查询逻辑... 目录一、ON与WHERE的本质区别二、场景化条件使用规则三、最佳实践建议1.优先使用ON条件2.WHERE用

Nginx Location映射规则总结归纳与最佳实践

《NginxLocation映射规则总结归纳与最佳实践》Nginx的location指令是配置请求路由的核心机制,其匹配规则直接影响请求的处理流程,下面给大家介绍NginxLocation映射规则... 目录一、Location匹配规则与优先级1. 匹配模式2. 优先级顺序3. 匹配示例二、Proxy_pa

Android学习总结之Java和kotlin区别超详细分析

《Android学习总结之Java和kotlin区别超详细分析》Java和Kotlin都是用于Android开发的编程语言,它们各自具有独特的特点和优势,:本文主要介绍Android学习总结之Ja... 目录一、空安全机制真题 1:Kotlin 如何解决 Java 的 NullPointerExceptio