电脑技术学习

UNIX 文件系统基本操作

dn001

  例如,许多 Unix 包含一个 d_type 成员和一些附加常量,这样一来,您无需额外的 stat() 调用就可以检查目录条目的类型。除了减少另外的系统调用之外,这种不可移植的扩展还减少了从文件系统获取更多元数据的开销非常高的访问操作。众所周知,在大多数 UNIX 上,stat() 函数的执行速度非常慢。

  获取文件信息

  除了获取目录中条目的名称之外,您可能还需要一些附加信息,以确定下一步要进行的操作。至少,仅根据目录条目的名称,您无法辨别文件条目。

  stat() 函数会将特定文件的相关信息填入 struct stat 结构中,如果您获得的是文件描述符而不是文件名,那么作为替代,您可以使用 fstat() 函数。如果您想能够检测出符号链接,那么可以对文件名使用 lstat()。

  与 readdir() 返回的 struct dirent 不同,struct stat 具有相当多的标准的、必需的成员:

  st_mode——文件权限(用户、其他用户、组)和标志

  st_ino——文件序列号

  st_dev——文件设备号

  st_nlink——文件连接计数

  st_uid——所有者用户 ID

  st_gid——所有者组 ID

  st_size——以字节表示的文件大小(针对普通文件)

  st_atime——最后的访问时间

  st_mtime——最后的修改时间

  st_ctime——文件的创建时间

  对 st_mode 成员使用 S_*() 宏,这样就可以找出您所处理的目录条目的类型:

  S_ISBLK(mode)——是否为块特殊文件?(通常是某种基于块的设备)

  S_ISCHR(mode)——是否为字符特殊文件?(通常是某种基于字符的设备)

标签: