第13章节 文件操作.pptVIP

  1. 1、本文档共16页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第13章节 文件操作

第13章 文件操作 在Linux系统中开发C语言程序中所涉及到的文件操作与其他平台有很大差别,Linux系统对目录和文件有极其严格的保护,只有获得相关权限的用户才能进行指定的操作。在本书的前面我们提到过,进程是处于活动状态的程序,某个用户通过操作系统运行程序所产生的进程代表着该用户的行为。如果用户不具备访问某个目录和文件的权限,那么该用户的进程也不能访问。 13.1 文件属性与权限 文件的属性与权限是Linux系统中目录和文件的两个基本特性,所有的目录和文件都具备这两种特性,他们决定了文件的使用方法与安全性问题。在Linux系统中,目录也是一种特殊的文件,并能够将其作为文件使用,这与我们直观获得对目录的体验并不一样。另外,Linux系统还有多种文件类型,例如设备文件、管道文件和链接文件,他们是文件概念的泛化。本节将介绍文件的属性与权限相关的知识。 13.1.1 文件属性 Linux系统中文件安全机制是通过给系统中的文件赋予两个属性来实现的,这两个属性分别是所有者属性和访问权限属性。Linux系统下的每一个文件必须严格地属于一个用户和一个组,针对不同的用户和组又具有不同的访问权限。 13.1.2 文件权限 上例的输出中,每行文件信息的第1组字符串就是文件的权限信息。字符串的首个字符是用来表示该文件的类型。“d”表示目录;“-”表示普通文件;“b”表示块输入输出设备文件,通常是磁盘驱动器;“c”表示连续输入输出设备,通常是声卡、调制解调器等;“l”表示是链接文件,“p”表示管道文件。 13.1.3 管理文件权限 修改文件权限的命令是chmod,该命令的一般形式为: chmod [ugoa…] [[+/-/=][rwx…]…][文件名,…] 第1组参数是权限修改所涉及的用户,“u”表示所有者,“g”表示群组,“o”表示其他用户,“a”表示以上三者都有。第2组参数表示对权限的操作,“+”表示增加权限,“-”表示取消权限,“=”表示惟一设定权限。权限字符“r”、“w”、“x”分别表示读、写和执行权限。 文件“test1.c”的所有者的权限为读、写和执行;群组获得的权限为为读、写和执行;其他用户的权限为执行。 13.2 文件管理 C语言的文件管理功能有三种常用的实现途径。第一种途径是直接进行文件系统的底层操作,这种方法需要程序员熟悉文件系统的结构,并编写大量的代码完成。第二种途径是通过调用shell程序实现,C语言提供了访问shell程序的接口,但shell的返回信息不便于在程序中进行分析。第三种途径是借助系统调用实现,这种方式使C语言能够通过很少的代码完成相应的功能,并且可获得足够的反馈信息。本节将讲解使用系统调用函数实现文件管理功能的方法。 13.2.1 系统调用原理 系统调用是Linux内核提供的功能十分强大的一系列的函数。这些函数是在内核中实现的,他们是应用程序和内核交互的接口,如图13.2所示。 13.2.2 打开文件、新建文件和关闭文件操作 打开文件操作使用系统调用函数open(),该函数的作用是建立一个文件描述符,其他的函数可以通过文件描述符对指定文件进行读取与写入的操作。 13.2.3 文件状态和属性操作 获取文件状态和属性操作可使用fstat()、lstat()和stat()这三个函数来操作。fstat()函数用来返回一个已打开文件的状态和属性信息,lstat()和stat()函数可对未打开文件进行操作。lstat()和stat()函数的区别是当文件是一个符号链接时,lstat返回的是该符号链接本身的信息;而stat返回的是该链接指向的文件的信息。 13.2.4 目录操作 新建目录操作可使用函数mkdir()实现,该函数的一般形式是:mkdir(路径, umask) 当目录被成功创建函数的返回值为0,否则为-1。 获得当前子目录的操作可使用函数getcwd(),该函数的一般形式是: getcwd(char *buf, size_t size); 13.2.5 删除目录或文件操作 删除目录操作可使用函数rmdir()完成,该函数的一般形式是:rmdir(路径),该函数必须是在该目录下没有子目录或文件的情况下才能运行。删除文件操作可使用函数unlink,该函数的一般形式是: unlink(路径); 13.2.6 错误处理 在进行文件操作的过程中可能会因各种原因而失败,错误信息将以代码的形式保存在系统变量errno中。很多函数通过改变errno变量的值输出标准错误信息编码,这些错误信息被保存在头文件“errno.h”内。 进行错误处理的函数有两个,第一个是本书10.8节所介绍过的sterror()函数,该函数的作用是根据标准错误信息编码在映射表中查询相关字符串,并将该字符串的指针返回给调用者。另一

文档评论(0)

qiwqpu54 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档