unix环境高级编程(第三版)-读书笔记5

文件和目录

我们关注:

  1. 文件的所有属性
  2. 修改这些属性的各个函数
  3. UNIX文件系统的结构以及符号链接
  4. 对目录进行操作的各个函数

函数stat、fstat、fstatat 和 lstat

这些函数都是获取文件状态,具体可以man 2 stat 查看。
These functions return information about a file, in the buffer pointed
to by statbuf。

The stat structure
All of these system calls return a stat structure, which contains the following fields:

       struct stat {
           dev_t     st_dev;         /* ID of device containing file */
           ino_t     st_ino;         /* Inode number */
           mode_t    st_mode;        /* File type and mode */
           nlink_t   st_nlink;       /* Number of hard links */
           uid_t     st_uid;         /* User ID of owner */
           gid_t     st_gid;         /* Group ID of owner */
           dev_t     st_rdev;        /* Device ID (if special file) */
           off_t     st_size;        /* Total size, in bytes */
           blksize_t st_blksize;     /* Block size for filesystem I/O */
           blkcnt_t  st_blocks;      /* Number of 512B blocks allocated */

           /* Since Linux 2.6, the kernel supports nanosecond
              precision for the following timestamp fields.
              For the details before Linux 2.6, see NOTES. */

           struct timespec st_atim;  /* Time of last access */
           struct timespec st_mtim;  /* Time of last modification */
           struct timespec st_ctim;  /* Time of last status change */

       #define st_atime st_atim.tv_sec      /* Backward compatibility */
       #define st_mtime st_mtim.tv_sec
       #define st_ctime st_ctim.tv_sec
       };

文件类型

  1. 普通文件(regular file):包含某种格式的数据。
  2. 目录文件(directory file):包含了其他文件的名字及指向与这些文件有关信息的指针。
  3. 块特殊文件 (block special file):提供对设备带缓冲的访问,每次访问以固定长度为单位进行。
  4. 字符特殊文件(character special file):提供对设备不带缓冲的访问,每次访问长度可变。系统中所有设备要么是字符特殊文件,要么是块特殊文件。
  5. FIFO:命名管道,拥有进程间通信。
  6. 套接字(socket):网络通信。
  7. 符号链接(symbolic link):这种类型的文件指向另一个文件。
    文件类型信息包含在stat结构的st_mode成员中。可以用下表中的宏确定文件类型。这些宏的参数都是stat结构中的 st_mode成员。
文件类型
S_ISREG() 普通文件
S_ISDIR() 目录文件
S_ISCHR() 字符特殊文件
S_ISBLK() 块特殊文件
S_ISFIFO() 管道或FIFO
S_ISLNK() 符号链接
S_ISSOCK() 套接字

这些宏定义在 中。

设置用户ID 和设置组ID

与一个进程相关的ID 有6个或更多,如下所示:

与一个进程相关的ID
实际用户ID 实际组ID 我们实际上是谁?登录时取自口令文件中的登录项
有效用户ID 有效组ID 附属组ID 用于文件访问权限检查
保存的设置用户ID 保存的设置组ID 由exec函数保存 在执行一个程序时包含了有效用户ID 和有效组ID的副本

通常,有效用户ID 等于实际用户ID。有效组ID等于实际组ID。
可以在文件模式字(st_mode)中设置一个特殊标志,其含义是“当执行此文件时,将进程的有效用户ID设置为文件所有者的用户ID(st_uid)”。与此类似,在文件模式中可以设置另一位,他将执行此文件的进程的有效组ID设置为文件的组所有者ID(st_gid)。若文件所有者是超级用户,而且设置了该文件的设置用户ID位,那么当该程序文件由一个进程执行时,该进程具有超级用户权限。

你可能感兴趣的:(linux)