- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
* 2) 文件采用多重索引结构存储: 用直接寻址指针和间接寻址指针构成多重索引结构,便于文件访问。 设: 每物理盘块=512字节 每地址指针用4个字节表示 可知:一个文件占据的最大容量为: 10+128+1282 +1283 =2113674块 Stop here last time 3) 目录中的文件如何与磁盘文件对应: UNIX文件系统动态管理方法 UNIX通过对数据结构(如:超级块、索引节点、目录记录项等)实现对文件系统的管理,但在实现中还要建立一些动态数据结构。 1.文件数据结构的动态管理 内存超级块 活动索引节点表 用户打开文件表 系统打开文件表 安装表 动态数据结构与静态数据结构关联图 2. 文件的检索过程 以访问文件“../a/b”为例,说明文件的内部检索过程. 1)检索当前目录的索引节点 2)通过当前目录找到当前目录文件查出..节点 3)检索..索引节点 4)通过..文件找到..文件查出a的索引节点号 5)检索a的索引节点号 6)找到a的目录文件,查出b的索引节点号 7)检索b,找到b的文件位置 8)访问文件b 3.文件共享的实现及应用 UNIX中有多种文件共享方式: 不同用户的不同级别共享 父子进程对文件的共享 文件的链接共享 使用硬链接及符号链接的命令: % lnabc.c xyz.c % ln-s xyz.c def.c (查看结构) 通过管道线的文件共享 管道文件的大小限定及访问特性 硬连接及符号链接原理图 返回 有关文件处理的系统调用 1.文件描述符 高级语言中的输入/输出库函数是对FILE类型的指针操作,c语言处理中自动打开stdin,stdout,stderr三个文件。 系统调用中用一个整形数描述打开的文件,它就是文件描述符。 2. Creat/ link/ unlink系统调用 Creat 创建一个空文件或将已有文件截为空文件 调用格式:fd=creat(name,pmode) link 建立文件的连接 调用格式:status=link(name1,name2) status可以为0,-1 系统的全局变量errno记录着出错代码 unlink 删除连接文件 调用格式为:status=unlink(name) 状态与上条类似。 作用是:从目录文件中删除一个登记项 3. open/ close系统调用 Open 打开文件 调用格式:fd=open(name,rw-mode[,pmode]) 正常fd=3,表示打开文件的描述符, rw-mode是读写方式:0,1,2 close 关闭文件 调用格式:status=close(fd) 用fd指明欲关闭的文件。 4.read/ write系统调用 完成对文件的读写操作。 调用格式: n=read(fd,buffer,size); n=write(fd,buffer,size); 它们与高级语言中库函数很相似: n=fread(buffer,byte,record,fp); n=fwrite(buffer,byte,record,fp); 区别: 1)前者是对文件描述符fd操作,后者对指针fp操作 2)前者没有记录的概念,后者有 3)前者是底层服务,后者是高层服务,提供缓冲机制。 系统调用举例: 写一段c程序,完成下列命令的功能: % cp file1 file2 无论文件是何种类型(字符可见、二进制不可见)。 注意:对文件的读/写中使用不同的size值,其访问 速度会受到影响,请编写程序感受这一点。 按任意键可查看源程序! 编写一个简单的cp命令程序: main( argc,argv) intargc; char *argv[ ]; { intfd1,fd2, n; charbuf[512],ch=‘\n’ if (argc=2) { printf(“you forgot the enter a filename\n”); exit(1); } fd1=open(argv[1],0); fd2=creat(argv[2],0644); While((n=read(fd1,buf,512))0) write(fd2,buf,n); close(fd1); close(fd2); } 文件随机存取技术 1.改变文件指针位置 lseek系统调用,调用格式: newpos=lse
文档评论(0)