- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第3章_文件操作
第3章 文件操作 主要内容 3.1 Linux文件结构 3.2 系统调用和设备驱动程序 3.3 库函数 3.4 底层文件访问 3.5 标准I/O库 3.6 格式化输入/输出 3.7 文件和目录的维护 3.8 扫描目录 3.9 错误处理 3.1 Linux文件结构 在Linux中,几乎一切(设备、目录、普通文件等)都是文件。 3.1.1 目录 inode(索引节点) 目录文件:用于保存该目录下的文件的文件名和inode的对应关系。 删除一个文件时,实际上是删除了文件对应的目录项,同时,指向该文件的链接数减1。 文件系统的层次结构:目录、子目录 3.1.2 文件和设备 Linux中比较重要的设备文件: /dev/console:系统控制台。错误信息和诊断信息通常会被发送到这个设备。 /dev/tty:如果一个进程有控制终端(Controlling?Terminal)的话,那么/dev/tty就是这个控制终端的设备特殊文件。 /dev/null:空设备。所有写向这个设备的输出都将被丢弃。而读这个设备会返回一个文件尾标志。 /dev/console和/dev/tty 在UNIX系统中,计算机显示器通常被称为控制台终端(Console)。有一些设备特殊文件与之相关联:tty0、tty1、tty2等。 当你在控制台上登录时,使用的是tty1。使用Alt+[F1—F6]组合键时,就可以切换到tty2、tty3等上面去。 tty1?–tty6等称为虚拟终端,而tty0则是当前所使用虚拟终端的一个别名,系统所产生的信息会发送到该终端上。因此不管当前正在使用哪个虚拟终端,系统信息都会发送到控制台终端上。 你可以登录到不同的虚拟终端上去,因而可以让系统同时有几个不同的会话存在。 只有系统或超级用户root可以向/dev/tty0进行写操作。 3.2 系统调用和设备驱动程序 通过系统调用可以对文件和设备进行访问和控制。 操作系统的核心部分,即内核,是一组设备驱动程序。它们是一组对系统硬件进行控制的底层接口。 用户访问设备驱动程序的底层函数(系统调用): open, read, write, close, ioctl 3.3 库函数 针对输入输出操作直接使用底层系统调用的效率比较低,原因是: 使用系统调用会影响系统的性能。在执行系统调用时,Linux必须从用户态切换到内核态,然后再返回用户态,因此开销较大。 硬件会限制对底层系统调用一次所能读写的数据块大小。 为了给设备和磁盘文件提供更高层的接口,Linux发行版提供了一系列的标准函数库。 库函数一般会有一个与之对应的标准头文件,例:与标准I/O库对应的头文件是stdio.h。 3.4 底层文件访问 write系统调用 read系统调用 open系统调用 close系统调用 3.4.1 write系统调用 write系统调用:把缓冲区buf的前nbytes个字节写入与文件描述符fildes关联的文件中。它返回实际写入的字节数。若返回0,就表示未写入任何数据;返回-1,表示发生了错误。 write系统调用的原型: #include unistd.h size_t write (int fildes, const void *buf, size_t nbytes); 例:P82 3.4.2 read系统调用 read系统调用:从与文件描述符fildes相关联的文件里读入nbytes个字节的数据,并把它们放到数据区buf中。它返回实际读入的字节数。若返回0,就表示未读入任何数据;返回-1,表示发生了错误。 read系统调用的原型: #include unistd.h size_t read (int fildes, void *buf, size_t nbytes); 例:P83 3.4.3 open系统调用 为了创建一个新的文件描述符,需要使用系统调用open。 #include fcntl.h #include sys/types.h #include sys/stat.h int open(const char *path, int oflags); int open(const char *path, int oflags, mode_t mode); open的返回值 若调用成功,open将返回一个新的文件描述符(是一个非负整数),新文件描述符总是使用未用描述符的最小值。 若调用失败, open将返回-1并设置全局变量errno来指明失败的原因。 open的参数 path:准备打开的文件或设备的名字 oflags:通过必需文件访问模式与可选模式相结合的方式来指定。 必需指定三种访问模式之一:O_RDONLY, O_WRONLY, O_RDWR 也可
您可能关注的文档
最近下载
- 2025年秋新人教版三年级上册数学全册教学课件.pptx
- 初中道德与法治统编版七年级上册第三单元 珍爱我们的生命第八课 生命可贵认识生命 (1).pptx
- 长期卧床患者的皮肤护理与预防压疮课件.pptx VIP
- iso-10816-3-2009机械振动标准.docx VIP
- 健康管理学知到智慧树期末考试答案题库2025年上海健康医学院.docx VIP
- (2025秋)部编版二年级语文上册 《 去外婆家》精品教案.pdf VIP
- HD 60364-4-41-2017 国外国际规范.pdf VIP
- 从维熙《秋山寻野》.docx VIP
- 初中道德与法治新人教版七年级上册第三单元《珍爱我们的生命》教案(2024秋).doc VIP
- 居住建筑节能设计标准.pdf VIP
文档评论(0)