现在的位置: 首页 > 综合 > 正文

读书笔记-第四章

2013年10月22日 ⁄ 综合 ⁄ 共 1903字 ⁄ 字号 评论关闭

4.2stat、fstat和lstat函数

  • #include <sys/stat.h>
    int stat(const char *restrict pathname, struct stat *restrict buf);
    int fstat(int filedes, struct stat *buf);
    int lstat(const char *restrict pathname, struct stat *restrict buf);
    三个函数的返回值:若成功则返回0,若出错则返回-1

  • 一旦给pathname,stat函数就返回与此命名文件有关的信息结构。fstat函数获取已在描述符filedes上打开文件的有关信息。lstat函数类似于stat,但是当命名文件是一个符号链接时,lstat返回该符号链接的有关信息,而不是该符号链接引用文件的信息
  • struct stat {
    mode_t    st_mode;             /* file type & mode (permissions) */
    ino_t     st_ino;
    dev_t     st_dev;
    dev_t     st_rdev;
    nlink_t   st_nlink;
    uid_t     st_uid;
    gid_t     st_gid;
    off_t     st_size;
    time_t    st_atime;
    time_t    st_mtime;
    time_t    st_ctime;
    blksize_t st_blksize;
    blkcnt_t  st_blocks;
    };

4.3文件类型

  • 文件类型包括以下几种:
  1. 普通文件。
  2. 目录文件。这种文件包含了其他文件的名字以及指向这些文件有关信息的指针。
  3. 块特殊文件。这种文件类型提供对设备(例如磁盘)带缓冲的访问,每次访问以固定长度为单位进行。
  4. 字符特殊文件。这种文件类型提供对这杯不带缓冲的访问,每次访问长度可变。
  5. FIFO。用于进程间通信。
  6. 套接字。用于进程间的网络通信。
  7. 符号链接。
  • 文件的类型信息包含在stat结构的st_mode成员中。可以用表4-1中的宏确定文件类型。这些宏的参数都是stat结构中的st_mode成员。

    表4-1中的文件类型宏
    文件类型
    S_ISREG() 普通文件
    S_ISDIR() 目录文件
    S_ISCHR() 字符特殊文件
    S_ISBLK() 块特殊文件
    S_ISFIFO() 管道或FIFO
    S_ISLNK() 符号链接
    S_ISSOCK() 套接字
  • 表4-2中的宏可用来确定IPC对象的类型,这些宏的参数并非st_mode,而是指向stat结构的指针

    表4-2中的IPC类型宏
    对象类型
    S_TYPEISMQ() 消息队列
    S_TYPEISSEM() 信号量
    S_TYPEISSHM() 共享存储对象

4.4设置用户ID和设置组ID

  • 与一个进程相关的ID有6个或更多,他们示于表4-4中

    表4-4与每个进程相关的用户ID和组ID
    实际用户ID                  我们实际上是谁
    实际组ID
    有效用户ID                  用于文件访问权限检查
    有效组ID
    附加组ID
    保存的设置用户ID      由exec函数保存
    保存的设置组ID
  • 每个文件都有一个所有者和组所有者,所有者由stat结构中的st_uid成员表示,组所有者则有st_gid成员表示。
  • 在文件模式字(st_mode)中设置一个特殊标志,其含义是“当执行此文件时,将进程的有效用户ID设置为文件所有者的用户ID(st_uid)”。与此类似,在文件模式字中可以设置另一位,它使得将执行此文件的进程的有效组ID设置为文件的组所有者ID(st_gid)。在文件模式字中的这两位被称为设置用户ID(set-usr-ID)位和设置组ID(set-group-ID)位。这两位可用常量S_ISUID和S_ISGID测试

4.5文件访问权限

  • 表4-5 9个访问权限位,取自
    st_mode屏蔽 意义
    S_IRUSR
    S_IWUSR
    S_IXUSR
    用户-读
    用户-写
    用户-执行
    S_IRGRP
    S_IWGRP
    S_IXGRP
    组-读
    组-写
    组-执行
    S_IROTH
    S_IWOTH
    S_IXOTH
    其他-读
    其他-写
    其他-执行
  • 对于目录的读权限和执行权限的意义是不相同的。读权限允许我们读目录,获得在该目录中所有文件名的列表。当一个目录是我们要访问文件的路径名的一个组成部分时,对该目录的执行权限是我们可以通过该目录(也就是搜索该目录,寻找一个特定的文件名)。

4.6新文件和目录的所有权

  • 新目录的所有全和新文件的所有权规则相同。
  • 新文件的用户ID设置为进程有效用户ID。关于组ID,POSIX.1允许实现选择下列之一作为新文件的组ID。
  1. 新文件的组ID可以是进程的有效组ID。
  2. 新文件的组ID可以是它所在目录的组ID。(在linux中如设置了set-group-ID位时,使用第二步)。

抱歉!评论已关闭.