LINUX环境高级编程(四)解说.ppt

  1. 1、本文档共190页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
以前Unix族允许编程访问底层文件系统结构,但各种操作系统不同的文件系统结构使得这种方法缺乏可移植性。目前多使用一套标准库函数实现目录操作。与目录操作有关的函数在dirent.h中声明。 * * open(“myfile”,O-CREAT,S_IRUSR|S_IXOTH) 创建一个user有读权限,其他用户有执行权限的文件myfile * O_EXCL和O_CREAT一起使用,确保调用者能创建出文件。该模式可以防止两个程序同时创建同一个文件,如果文件已经存在,open调用将失败。 * 文件打开时,偏移量被初始化为0,除非使用了O_APPEND模式。 off_t 是一个跟具体实现有关的长整数类型,定义在sys/types.h中。 文件指针移动到文件末尾之外会如何?不会导致调用失败。 如果 offset 比文件的当前长度更大,下一个写操作就会把文件“撑大?(extend)”。这就是所谓的在文件里创造“空洞?(hole)”。没有被实际写入文件的所有字节由重复的 0?表示。空洞是否占用硬盘空间是由文件系统?(file system)决定的。 ?off_t??? currpos; ?currpos = lseek(fd, 0, SEEK_CUR); #返回当前文件指针偏移量; 如果fd指向的是 pipe、FIFO 或者 socket,lseek 返回 -1 并且置 errno 为?ESPIPE。 * * * filename可以是硬链接也可以是软链接。如果unlink删除掉一个文件硬链接,该文件的链接数减1,当文件的硬链接数减为0时,该文件被物理删除。 * 只有超级用户才能调用该函数。 * #includesys/types.h #includesys/stat.h int chmod(const char * path,mode_t mode); 参数 mode 有下列数种组合 S_ISUID 04000 文件的(set user-id on execution)位 S_ISGID 02000 文件的(set group-id on execution)位 S_ISVTX 01000 文件的sticky位 S_IRUSR(S_IREAD) 00400 文件所有者具可读取权限 S_IWUSR(S_IWRITE)00200 文件所有者具可写入权限 S_IXUSR(S_IEXEC) 00100 文件所有者具可执行权限 S_IRGRP 00040 用户组具可读取权限 S_IWGRP 00020 用户组具可写入权限 S_IXGRP 00010 用户组具可执行权限 S_IROTH 00004 其他用户具可读取权限 S_IWOTH 00002 其他用户具可写入权限 S_IXOTH 00001 其他用户具可执行权限 只有该文件的所有者或有效用户识别码为0,才可以修改该文件权 限。基于系统安全,如果欲将数据写入一执行文件,而该执行文件 具有S_ISUID 或S_ISGID 权限,则这两个位会被清除。如果一目录 具有S_ISUID 位权限,表示在此目录下只有该文件的所有者或root 可以删除该文件。 返回值 权限改变成功返回0,失败返回-1,错误原因存于errno。 错误代码 EPERM 进程的有效用户识别码与欲修改权限的文件拥有者不同,而 且也不具root权限。 EACCESS 参数path所指定的文件无法存取。 EROFS 欲写入权限的文件存在于只读文件系统内。 EFAULT 参数path指针超出可存取内存空间。 EINVAL 参数mode不正确 ENAMETOOLONG 参数path太长 ENOENT 指定的文件不存在 ENOTDIR 参数path路径并非一目录 ENOMEM 核心内存不足 ELOOP 参数path有过多符号连接问题。 EIO I/O 存取错误 * fstat系统调用返回与打开的文件描述符相关的文件的状态信息,该信息写到stat结构中,地址传递给fstat。 stat和lstat是通过文件名查到文件状态信息,它们产生的结果相同。但当文件是一个符号链接时,lstat返回的是该符号链接本身的信息,而stat返回的是该链接所指向的文件的信息。 * POSIX标准关于st_mode的宏定义包含在头文件sys/stat.h中 * POSIX标准关于st_mode的宏定义包含在头文件sys/stat.h中 * 文件访问权限的获取: if((st.st_modeS_IFMT)==S_IFBLK) printf(Permission:%o\n,file_stat.st_mode0x1ff); mode_t st_mode是一个无符号整型。mode_t一共有16位,前面7位用来表示文件类型,可用掩码按位与确定,后面9位为权限

文档评论(0)

希望之星 + 关注
实名认证
内容提供者

我是一名原创力文库的爱好者!从事自由职业!

1亿VIP精品文档

相关文档