6章+文件操作.ppt

  1. 1、本文档共69页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
6章文件操作

第6章 文件操作 主要内容 Linux文件系统概述 系统调用和库函数 基本 I/O 系统调用 open, close, read, write, lseek, etc. 其他系统调用 File attributes and directory 标准 I/O 库 VFS和实际文件系统之间的关系 系统调用和库函数 1、系统调用 系统调用是操作系统提供的、与用户程序之间的接口,也就是操作系统提供给程序员的接口 从感觉上系统调用类似于过程调用,都由程序代码构成,使用方式相同 两者有实质差别:过程调用只能在用户态下运行,不能进入核心态;而系统调用可以实现从用户态到核心态的转变。 系统调用可大致分为五个类别:进程控制、文件管理、设备管理、信息维护和通信 2、库函数 它们本身并不属于操作系统的内核部分 库函数可以分为下面六大类: ① 文件管理 ② 状态信息 ③ 文件修改 ④ 程序设计语言的支持 ⑤ 程序装入和执行 ⑥ 通信 系统调用 系统调用 Linux内核的对外接口; 用户程序和内核之间唯一的接口; 提供最小接口 库函数 库函数 依赖于系统调用; 提供较复杂功能 例:标准I/O库 系统调用 库函数 都以C函数的形式出现 系统调用会影响系统的性能。与库函数相比,系统调用的开销要大些。 硬件会对底层系统调用一次所能写的数据块做出一定的限制。 系统命令 系统命令:是一个可执行程序,内部引用了系统函数来实现相应的功能 文件描述符 文件描述符:是一个非负的整数,是一个索引值,指向内核中每个进程打开文件的记录表。 文件操作基本步骤 creat/open—read/write—close,用到的系统调用函数: create(),open(),read(),write(),close()… creat() int creat(const char* pathname,mode_t mode) pathname:pathname是要创建的文件名(包含路径名称,缺省是认为在当前路径下面) mode:表示文件访问权限,取值可以为以下值的组合 mode取值(一) S_IRUSR 用户可以读, S_IWUSR 用户可以写。 S_IXUSR 用户可以执行, S_IRWXU 用户可以读写执行。 S_IRGRP 组可以读, S_IWGRP 组可以写。 S_IXGRP 组可以执行, S_IRWXG 组可以读写执行。 S_IROTH 其他人可以读 ,S_IWOTH 其他人可以写。 S_IXOTH 其他人可以执行 ,S_IRWXO 其他人可以读写执行。 S_ISUID 设置用户执行ID, S_ISGID 设置组的执行ID。 mode取值(二) 用数字来代表各个位的标志。Linux用5个数字来表示文件的各种权限.第一位表示设置用户ID.第二位表示设置组ID,第三位表示用户自己的权限位,第四位表示组的权限,最后一位表示其他人的权限。 比如要创建一个用户读写执行,组没有权限,其他人读执行的文件,设置用户ID位。那么可以使用的模式是:1(设置用户ID)0(组没有设置)7(1+2+4)0(没有权限,使用缺省)5(1+4)即10705 creat(temp,10705); 如果打开文件成功,open会返回一个文件描述符.以后对文件的所有操作就可以对这个文件描述符进行操作.当操作完成以后,要关闭文件,只要调用close就可以了 The value of parameter “mode” 对于普通的文件read从指定的文件(fd)中读取count字节到buffer缓冲区中(记住必须提供一个足够大的缓冲区),同时返回count。 如果read读到了文件的结尾或者被一个信号所中断,返回值会小于count. 如果是由信号中断引起返回,而且没有返回数据,read会返回-1,且设置errno为EINTR. 当程序读到了文件结尾的时候,read会返回0. 一个文件拷贝程序 每个被打开的文件都有文件读、写指针 文件刚打开时,文件指针指向文件内容的开头 在读写操作过程中,每读写一个字符,指针向后移动一格(是系统调用内部自动执行的) 那么,如何人为的改变指针的位置呢? fcntl系统调用 在文件已经共享的情况下如何操作? 给文件加锁 强制性锁:当一个文件被上锁进行写入操作的时候,内核将阻止其他任何程序对其进行读写操作 fcntl可以对文件加锁 fcntl还可以对文件的某一条记录加锁,也就是记录锁 fcntl系统调用 记录锁分为读取锁和写入锁 读取锁又称为共享锁 多个进程可以在文件的同一部分同时建立多个读取锁 写入锁又称为排斥锁 多个进程不可以在文件的同一部分同时建立多个排斥锁

文档评论(0)

asd522513656 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档