APUE(04)

栏目: 服务器 · 发布时间: 5年前

内容简介:函数原型文件信息结构文件类型信息包含在

1 stat、fstat、fstatatlstat 函数

函数原型

# include <sys/stat.h>
int stat(const char *restrict pathname, sturct stat *restrict buf);
int fstat(int fd, struct stat *buf);
int lstat(const char *restrict pathname, struct stat *restrict buf);
int fstatat(int fd, const char *restrict pathname, struct stat *restrict buf, int flag);
  • stat 返回此命名文件的信息结构
  • fstat 返回文件描述符 fd 上打开的文件有关信息
  • lstat 返回链接文件的信息,而不是该符号链接的文件的信息
  • fstatat 返回当前打开的目录(有 fd 指向) 的路径名文件统计信息

文件信息结构

struct stat{
  mode_t st_mode; /*file type & mode (permission) */  
  ino_t st_ino;  /*i-node number (serial number)*/
  dev_t st_dev; /*device number (file system)*/
  dev_t st_rdev; /*device number for special files*/
  nlink_t st_nlink; /*number of links*/
  uid_t st_uid; /*user ID of the owner*/
  gid_t st_gid; /*group ID of the owner*/
  off_t st_size; /*sieze in bytes,  for regular files */
  struct timespec st_atime; /*time of last access */
  struct timespec st_mtime; /* time of last modification */
  struct timespec st_ctime; /* time of last file status change */
  blksize_t st_blksize; /*best I/O block size */
  blkcnt_t st_blocks; /*number of disk blocks allocated */
};

2 文件类型

  1. 普通文件 ( regualr file )
  2. 目录文件( directory file )
  3. 块特殊文件( block special file ) 提供对设备带缓冲的访问;
  4. 字符特殊文件( character special file )提供设备不带缓冲的访问;
  5. FIFO 用于进程之间之间的通信,又称为命令管道;
  6. 套接字( socket ) 用于进程之间网络通信;
  7. 符号链接( symbolic link ) 文件指向另一个文件;

文件类型信息包含在 st_mode 字段中。可以通过相关的宏确定文件类型。

3 用户 ID 和组 ID

一个进程关联的 ID 如下

  • 我们实际上是谁(从登陆口令文件中获取)
    • 实际用户 ID
    • 实际组 ID
  • 用于文件访问权限检查(通常与实际用户 ID 和 实际组 ID 相同)
    • 有效用户 ID
    • 有效组 ID
    • 附属组 ID
  • exec 函数保存(执行时候包含有效用户 ID 和有效组 ID 的副本)
    • 保存的设置用户 ID
    • 保存的设置组 ID

通常有效用户 ID 等于实际用户 ID, 有效组 ID 等于实际组 ID。在 st_mode 中设置一个特殊标志,当执行这个文件时候,进程有效用户 ID 为文件所有者 ID, 有效组等于文件所有组 ID。

4 文件访问权限

每个文件都有 9 个访问位权限,可以分为3类

  • 用户相关
    • S_IRUSR 用户读
    • S_IWUSR 用户写
    • S_IXUSR 用户执行
  • 组相关
    • S_IRGRP 组读
    • S_IWGRP 组写
    • S_IXGRP 组执行
  • 其他相关
    • S_IROTH 其他读
    • S_IWOTH 其他写
    • S_IXOTH 其他执行

可以使用 chmod 可以修改这 9 个权限, u 表示用户(所有者), g 表示组, o 表示其他。补充说明

  1. 如果用名字打开任一类型的文件,该名字中包含的每一个目录都是可执行的。读权限只能获得该目录中文件名列表;
  2. 对文件的读写权限决定了是否能够打开现有文件读写操作;
  3. open 函数中指定 O_TRUNC 标志,必须要求对文件有写权限;
  4. 在目录总创建新文件,必须对目录有写和执行权限;
  5. 删除一个文件,必须要改文件的目录写和执行权限,而不管文件本身读写权限;
  6. exec 函数执行任何一个文件,必须这个文件有执行权限(必须是普通文件)

进程每次打开、创建和删除文件的时候,内核需要进行如下测试

  • 若进程有效用户 ID 是 0 (超级用户),则允许访问;
  • 如果进程用户 ID 等于文件所有者 ID,则按照文件的所有者访问权限设置;
  • 如果进程有效组 ID等于文件组 ID, 则按照文件所有组访问权限设置;
  • 如果进程是其他用户,按照文件其他用户访问权限设置。

上述步骤只能从上到下,并且只能选择其中的一个。


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

算法技术手册

算法技术手册

George T. Heineman、Gary Pollice、Stanley Selkow / 杨晨、李明 / 机械工业出版社 / 2010-3 / 55.00元

《算法技术手册》内容简介:开发健壮的软件需要高效的算法,然后程序员们往往直至问题发生之时,才会去求助于算法。《算法技术手册》讲解了许多现有的算法,可用于解决各种问题。通过阅读它,可以使您学会如何选择和实现正确的算法,来达成自己的目标。另外,书中的数学深浅适中,足够使您可以了解并分析算法的性能。 较之理论而言,《算法技术手册》更专注于应用。《算法技术手册》提供了高效的代码解决方案,使用多种语言......一起来看看 《算法技术手册》 这本书的介绍吧!

RGB转16进制工具
RGB转16进制工具

RGB HEX 互转工具

随机密码生成器
随机密码生成器

多种字符组合密码

HTML 编码/解码
HTML 编码/解码

HTML 编码/解码