APUE(04)

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

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

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

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


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

查看所有标签

猜你喜欢:

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

Cascading Style Sheets 2.0 Programmer's Reference

Cascading Style Sheets 2.0 Programmer's Reference

Eric A. Meyer / McGraw-Hill Osborne Media / 2001-03-20 / USD 19.99

The most authoritative quick reference available for CSS programmers. This handy resource gives you programming essentials at your fingertips, including all the new tags and features in CSS 2.0. You'l......一起来看看 《Cascading Style Sheets 2.0 Programmer's Reference》 这本书的介绍吧!

JS 压缩/解压工具
JS 压缩/解压工具

在线压缩/解压 JS 代码

html转js在线工具
html转js在线工具

html转js在线工具

HEX HSV 转换工具
HEX HSV 转换工具

HEX HSV 互换工具