侧边栏壁纸
  • 累计撰写 218 篇文章
  • 累计创建 59 个标签
  • 累计收到 5 条评论

进程间通信04:文件与 stat 头

barwe
2022-07-14 / 0 评论 / 0 点赞 / 861 阅读 / 1,406 字
温馨提示:
本文最后更新于 2022-07-14,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

<sys/stat.h> 定义了fstat(), lstat()stat()返回的数据结构。

  • fstat obtains information about an open file
  • stat obtains information about the named file
  • lstat 与 stat 相似,但在处理符号链接时行为不一样:
    • lstat 返回符号链接的信息
    • stat 返回链接指向的文件的信息

综上,stat.h 主要是声明文件信息相关的属性和方法。文件的基本信息有:

  • dev_t st_dev: 文件所属的设备 ID
  • ino_t st_ino: 文件序列号
  • mode_t_st_mode: 文件的权限模式
  • nlink_t st_nlink: 文件的链接数
  • uid_t st_uid: 文件所属用户的 ID
  • gid_t st_gid: 文件所属用户组的 ID
  • dev_t st_rdev: device ID of character or block device
  • off_t st_size: 常规文件包含的字节数
  • time_t st_atime: 最后一次访问文件的时间
  • time_t st_mtime: 最后一次修改文件的时间
  • time_t st_ctime: 最后一次状态变化(?)的时间
  • blksize_t st_blksize: 文件的读写块大小,不同的文件类型可能不同
  • blkcnt_t st_blocks: 文件的块的数目

设备 ID 和文件的序列号(Serial Number)唯一标识了文件在文件系统中的位置。

上述文件基本信息的类型可以分为两类:时间类型(3个)和非时间类型(10个),非时间类型都定义在 <sys/types.h> 中,时间类型实际上也是整型,它指的是公历纪元开始到现在的总秒数。

stat.h 同时定义了st_mode的取值集合:

  • 文件类型:
    • S_IFMT 文件
    • S_IFBLK 块设备
    • S_IFCHR 字符设备
    • S_FIFO FIFO 设备
    • S_IFREG 普通文件
    • S_IFDIR 目录
    • S_IFLNK 符号链接
  • 权限模式:
    • S_IRUSR, S_IWUSR, S_IXUSR, S_IRWXU for user (owner)
    • S_IRGRP, S_IWGRP, S_IXGRP, S_IRWXG for group
    • S_IROTH, S_IWOTH, S_IXOTH, S_IRWXO for ohers
    • S_ISUID, S_ISGID 在执行时设置用户 ID / 用户组 ID
    • S_ISVTX 限制目录的删除

stat.h 提供几个宏用于测试文件的类型,测试为真返回非 0 值,测试为假返回 0:

  • S_ISBLK(m) 文件是否是块设备
  • S_ISCHR(m) 文件是否是符号设备
  • S_ISDIR(m) 文件是否是一个目录
  • S_ISFIFO(m) 文件是否是一个 FIFO
  • S_ISREG(m) 是否一个普通文件
  • S_ISLNK(m) 是否是一个符号链接

消息队列、信号量和内存共享对象也能被实现为不同类型的文件:

  • S_TYPEISMQ(buf) is message queue?
  • S_TYPEISSEM(buf) is semaphore?
  • S_TYPEISSHM(buf) is shared memory object?

stat.h 还提供了几个函数宏,处理与文件相关的事务:chmod, fchmod, fstat, lstat, stat, mkdir, mkfifo, mknod, umask.

参考文档:https://pubs.opengroup.org/onlinepubs/007908799/xsh/sysstat.h.html

0

评论区