位置: 编程技术 - 正文

UNIX文件系统的分析和比较深入认识(unix系统的文件分为哪三种存取结构)

编辑:rootadmin
小生想从源码的角度解释一下Unix的文件系统。(前天因为不能发在首页所以重发,为什么有3天的限制呢,真是的哦) 首先一个文件在没有被打开的情况下,需要什么贮存在磁盘呢? 一般而言,需要的是: 1,一个目录项 2,一个磁盘Inode项 3,磁盘上的n块(n可为0) 目录项是一个结构,最重要的元素一个为名字,一个为指向inode结构的指针。另外目录的执行权是为了把文件名转换为Inode而存在的,具体的操作函数为namei。(大家可参阅具体的源码) Inode项也是一个结构,v7实现如下 复制代码代码如下: struct dinode { unsigned short di_mode; /* mode and type of file */ short di_nlink; /* number of links to file */ short di_uid; /* owner's user id */ short di_gid; /* owner's group id */ off_t di_size; /* number of bytes in file */ char di_addr[]; /* disk block addresses */ time_t di_atime; /* time last accessed */ time_t di_mtime; /* time last modified */ time_t di_ctime; /* time created */ }; 元素所表示的内容相关的注释都已经说明了,不过小生还是介绍一下具体的内容 di_mode说明文件的权限和类型 di_nlink说明文件的链接数 di_uid文件的用户,di_gid文件的组 di_size逻辑上文件的大小(以字节计数) di_addr文件所占用的磁盘块的地址 3个时间表示访问,修改和创建时间 磁盘块没什么好说的,具体实现可能字节一块 当引用一个文件时(并非打开一个文件)可能需要的如下: 1,一个内存Inode项 内存inode项的v7实现可能如下: 复制代码代码如下: struct inode { Char i_flag; char i_count; /* reference count */ dev_t i_dev; /* device where inode resides */ ino_t i_number; /* i number, 1-to-1 with device address */ unsigned short i_mode; short i_nlink; /* directory entries */ short i_uid; /* owner */ short i_gid; /* group of owner */ off_t i_size; /* size of file */ union { struct { daddr_t i_addr[NADDR]; /* if normal file/directory */ daddr_t i_lastr; /* last logical block read (for read-ahead) */ }; struct { daddr_t i_rdev; /* i_addr[0] */ struct group i_group; /* multiplexor group file */ }; } i_un; }; 基本的内容和磁盘的一样,多出了一些内容,最重要的是多出了i_count用以记录引用次数 当一个文件被打开时需要的内容如下: 1, 用户u区中的u_ofile数组中的一项 2, 文件表中的一项 u_ofile存放的是指向具体的file结构中的一项的指针,所谓的文件描述符就是u_ofile数组的下标 文件表v7的实现如下: 复制代码代码如下: struct file { char f_flag; char f_count; /* reference count */ struct inode *f_inode; /* pointer to inode structure */ union { off_t f_offset; /* read/write character pointer */ struct chan *f_chan; /* mpx channel pointer */ } f_un; }; 文件表最初似乎是为了共享偏移量(f_offset)而设计的,因为有注释就不多赘叙了,正如大家所知道的,用dup复制一个文件描述符和再次打开一个文件是不一样,具体的差别就是f_count的值。实际上大家可以自己思考一下所有的文件打开关闭,link和unlink等等文件操作(我想这是非常有益,不过大家不必真的去参阅源码,只要自己想想是怎么回事就行,unix源码水平极高,如果真的全部看懂需要很多时间)。 另外鉴于要不发布要不烂掉的原则,我将本人昨天晚上写的源码发布。 源码是find命令的简单实现,直接的参数是-name, -user, -group,具体用法如下 Find 目录(文件)列表 可选的参数 源码的水平并不高,而且实现也不是很好,不过我想初学c的读者还是能得到一定的帮助的, 如果有高手觉得哪里需要修改的,请注明 小生想从源码的角度解释一下Unix的文件系统。(前天因为不能发在首页所以重发,为什么有3天的限制呢,真是的哦) 首先一个文件在没有被打开的情况下,需要什么贮存在磁盘呢? 一般而言,需要的是: 1,一个目录项 2,一个磁盘Inode项 3,磁盘上的n块(n可为0) 目录项是一个结构,最重要的元素一个为名字,一个为指向inode结构的指针。另外目录的执行权是为了把文件名转换为Inode而存在的,具体的操作函数为namei。(大家可参阅具体的源码) Inode项也是一个结构,v7实现如下 复制代码代码如下: struct dinode { unsigned short di_mode; /* mode and type of file */ short di_nlink; /* number of links to file */ short di_uid; /* owner's user id */ short di_gid; /* owner's group id */ off_t di_size; /* number of bytes in file */ char di_addr[]; /* disk block addresses */ time_t di_atime; /* time last accessed */ time_t di_mtime; /* time last modified */ time_t di_ctime; /* time created */ }; 元素所表示的内容相关的注释都已经说明了,不过小生还是介绍一下具体的内容 di_mode说明文件的权限和类型 di_nlink说明文件的链接数 di_uid文件的用户,di_gid文件的组 di_size逻辑上文件的大小(以字节计数) di_addr文件所占用的磁盘块的地址 3个时间表示访问,修改和创建时间 磁盘块没什么好说的,具体实现可能字节一块 当引用一个文件时(并非打开一个文件)可能需要的如下: 1, 一个内存Inode项 内存inode项的v7实现可能如下: 复制代码代码如下: struct inode { Char i_flag; char i_count; /* reference count */ dev_t i_dev; /* device where inode resides */ ino_t i_number; /* i number, 1-to-1 with device address */ unsigned short i_mode; short i_nlink; /* directory entries */ short i_uid; /* owner */ short i_gid; /* group of owner */ off_t i_size; /* size of file */ union { struct { daddr_t i_addr[NADDR]; /* if normal file/directory */ daddr_t i_lastr; /* last logical block read (for read-ahead) */ }; struct { daddr_t i_rdev; /* i_addr[0] */ struct group i_group; /* multiplexor group file */ }; } i_un; }; 基本的内容和磁盘的一样,多出了一些内容,最重要的是多出了i_count用以记录引用次数 当一个文件被打开时需要的内容如下: 1,用户u区中的u_ofile数组中的一项 2,文件表中的一项 u_ofile存放的是指向具体的file结构中的一项的指针,所谓的文件描述符就是u_ofile数组的下标 文件表v7的实现如下: 复制代码代码如下: struct file { char f_flag; char f_count; /* reference count */ struct inode *f_inode; /* pointer to inode structure */ union { off_t f_offset; /* read/write character pointer */ struct chan *f_chan; /* mpx channel pointer */ } f_un; }; 文件表最初似乎是为了共享偏移量(f_offset)而设计的,因为有注释就不多赘叙了,正如大家所知道的,用dup复制一个文件描述符和再次打开一个文件是不一样,具体的差别就是f_count的值。实际上大家可以自己思考一下所有的文件打开关闭,link和unlink等等文件操作(我想这是非常有益,不过大家不必真的去参阅源码,只要自己想想是怎么回事就行,unix源码水平极高,如果真的全部看懂需要很多时间)。 另外鉴于要不发布要不烂掉的原则,我将本人昨天晚上写的源码发布。 源码是find命令的简单实现,直接的参数是-name, -user, -group,具体用法如下 Find 目录(文件)列表 可选的参数 源码的水平并不高,而且实现也不是很好,不过我想初学c的读者还是能得到一定的帮助的, 如果有高手觉得哪里需要修改的,请注明 [/code]

推荐整理分享UNIX文件系统的分析和比较深入认识(unix系统的文件分为哪三种存取结构),希望有所帮助,仅作参考,欢迎阅读内容。

UNIX文件系统的分析和比较深入认识(unix系统的文件分为哪三种存取结构)

文章相关热门搜索词:unix文件系统的卷资源表回收,unix系统的文件分为哪三种存取结构,unix中的文件系统采用什么文件,unix文件系统的卷资源表,在unix系统中,文件的类型主要包括,unix文件系统的卷资源表回收,unix系统的文件分为哪三种存取结构,unix文件系统的卷资源表回收,内容如对您有帮助,希望把文章链接给更多的朋友!

FreeBSD 7.3 安装GNOME图形界面 FreeBSD被认为是自由操作系统中的不知名的巨人。它不是Unix,但如Unix一样运行,具有兼容Unix的系统API。作为一个操作系统,FreeBSD被认为相当稳建可靠。

在FreeBSD 8.1下搭建Git服务器步骤 Git是一个由林纳斯托瓦兹为了更好地管理linux内核开发而创立的分布式版本控制/软件配置管理软件。与常用的版本控制工具CVS,Subversion等不同,它采用了

Freebsd+IPFW结合使用防小规模DDOS攻击的配置方法 由于服务器分布太散,不能采用硬件防火墙的方案,虽然IPtables功能很强大,足以应付大部分的攻击,但Linux系统自身对DDoS攻击的防御力本来就弱,只好

标签: unix系统的文件分为哪三种存取结构

本文链接地址:https://www.jiuchutong.com/biancheng/354019.html 转载请保留说明!

上一篇:unix下的常用命令详解(unix常用命令)

下一篇:FreeBSD 7.3 安装GNOME图形界面(freebsd9.3安装教程)

  • 制造企业都需要什么人才
  • 残疾人保证金计算器
  • 分包抵扣
  • 承兑找零怎么做账务处理
  • 劳务费发票是个人开还是公司开
  • 使用权资产计入资产负债表哪个科目
  • 收到电子退库如何操作
  • 未达账项有几种情况
  • 调整增值税误差的原因
  • 个人转让不动产给个人独资企业
  • 土地转让差额征税开票及申报表填写
  • 一张报关单可以分批退税吗
  • 暂估收入会计处理
  • 车辆进项税怎么算
  • 替票可以写入费用报销制度吗?
  • 城市生活垃圾处理与资源化利用工艺设计
  • 小规模专票普票都开怎么申报增值税
  • 汇总转账凭证可以是一借多贷
  • 报销抵冲银行日记帐要怎么入帐?
  • 酒店住宿收入确认原则的条件
  • 基础研究投入费用包含工资吗
  • 同一年可以先娶后嫁吗
  • 年折旧率怎么计算折旧几年
  • 从税法角度看,商誉计税基础
  • 周转材料属于什么会计分录
  • win10字体有些模糊
  • 应缴纳消费税会增加吗
  • 税收风险的含义
  • GrooveMonitor.exe是什么进程?GrooveMonitor.exe可以禁用卸载吗?
  • mch是什么文件
  • 我告诉你windows7旗舰版
  • php基础入门教程
  • 接受捐赠的增值税要交企业所得税吗
  • 阿罗内镇的村落叫什么
  • 唱吧地图
  • phpcms开发招聘
  • 物流货运发票要交税吗
  • 给国外公司提供服务需要交哪些税
  • 税款已缴未入库怎么处理
  • 社会团体费用报销制度
  • 注销小规模财务报表怎么办
  • 水利基金的计税税率6
  • mysql 自动重启
  • 外地施工企业异地施工
  • 调整以前年度费用如何做分录
  • 融资租赁会计处理实例承租人
  • 外币折算差额怎么计算
  • 预付账款写到什么凭证
  • 滴滴普票可以计算抵扣吗
  • 银行信用贷款发放邮件后多久到账
  • 建筑业统一发票可以抵扣吗
  • 生产企业代理出口退税
  • 抵扣进项税额必须用专用发票吗
  • 物流公司怎么做利润高
  • windows自动执行
  • 苹果mac无法连接网络
  • thinkpadx230i5
  • win7 mysql
  • ubuntu唤醒快捷键
  • mac安装软件提示无法检查更新
  • windows8.1应用商店打不开
  • 80端口被system 占用解决方法
  • win7 蓝屏1e
  • 如何制作u盘启动盘
  • windows8如何使用
  • 粒子冲突
  • threejs中文文档pdf
  • html初学
  • js链式编程的原理
  • jquery设置滚动条到底部
  • nodejs搭建本地服务器运行html
  • linux怎么全盘备份
  • vue怎么实现多页面
  • axios使用jsonp
  • JavaScript程序设计形考任务第一次任务
  • 纳税人虚假纳税申报
  • 房产税自用改为出租,房产税如何申报
  • 营改增后一般纳税人动产租赁税率
  • 溧阳北站规划图
  • 芜湖地税微机编码是什么
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设