APUE(04)

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

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

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, 则按照文件所有组访问权限设置;
  • 如果进程是其他用户,按照文件其他用户访问权限设置。

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


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

查看所有标签

猜你喜欢:

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

Java编程思想

Java编程思想

埃克尔 / 机械工业出版社 / 2007-5-1 / 79.00元

《Java编程思想(英文版•第4版)》内容简介:特色:1.适合初学者与专业人员的经典的面向对象的叙述方式;为更新的Java SE5/6的相关内容增加了新的示例和章节。2.测验框架显示程序输出。3.设计模式贯穿于众多示例中:适配器、桥接器、职责链、命令、装饰器、外观、工厂方法、享元、点名、数据传输对象、空对象、代理、单例、状态、策略、模板方法以及访问者。4.为数据传输引入了XML;为用户界面引入了S......一起来看看 《Java编程思想》 这本书的介绍吧!

JSON 在线解析
JSON 在线解析

在线 JSON 格式化工具

SHA 加密
SHA 加密

SHA 加密工具

正则表达式在线测试
正则表达式在线测试

正则表达式在线测试