引言
从stat函数开始,诸葛说明stat结构中的每一个成员了解文件的所有属性。将说明修改这些属性的各个函数,更详细地说明UNIX文件系统的结构以及符号链接
函数stat、fstat、fstatat和lstat
给出pathname,stat函数将返回与此文件有关的信息结构。fstat获得fd上打开文件的有关信息,lstat类似于stat,但是当命名的文件是符号链接时,lstat返回符号链接的有关信息而不是该符号链接引用的文件的信息。
fstatat允许通过文件描述符和相对路径名指定要获取信息的文件。
dirfd:一个打开的目录的文件描述符,相对路径名pathname的起始点。如果pathname是绝对路径,则dirfd被忽略。
pathname:要获取状态信息的文件的路径名。如果pathname是绝对路径,dirfd通常被设置为AT_FDCWD。
statbuf:指向stat结构的指针,该结构用于存储文件的状态信息。
flags:可以是零或者以下一个或多个标志的组合,影响函数的行为:
AT_SYMLINK_NOFOLLOW:不要解引用符号链接,而是返回关于链接本身的信息。
AT_NO_AUTOMOUNT:阻止自动挂载触发。
AT_EMPTY_PATH:允许pathname是空字符串,这种情况下会返回dirfd所指向对象的状态。
返回值:
成功时,返回0,statbuf结构会被填充。
失败时,返回-1,并设置errno以指示错误原因,如EACCES、EBADF、EFAULT、ENOENT等。
stat结构:
struct stat {
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; // 设备ID(如果是特殊文件)
off_t st_size; // 总大小,以字节为单位
blksize_t st_blksize; // 文件系统的I/O块大小
blkcnt_t st_blocks; // 分配的512B块的数量
// 访问和修改时间戳
struct timespec st_atim; // 最后访问时间
struct timespec st_mtim; // 最后修改时间
struct timespec st_ctim; // 最后状态改变时间
// ...可能还有其他的字段...
};
time_t tv_sec;
long tv_nsec;//timespec至少包含的两个字段
使用stat函数最多的地方可能就是ls -l。获得文件所有信息。
4.3 文件类型
1.普通文件
包含了某种形式的数据。
2.目录文件
包含了其他文件的名字以及指向与这些文件有关信息的指针。对一个目录文件具有读权限的任意进程都可以读该目录的内容。进程必须要用本章介绍的函数才能更改目录。
3.块特殊文件
提供对设备带缓冲的访问,每次以固定长度为单位进行
4.字符特殊文件
提供对设备不带缓冲的访问,每次访问长度可变。系统中所有设备要么是字符特殊文件,要么是块特殊文件。
5.FIFO
用于进程间通信,有时被称为命名管道(named pipe)
6.套接字
用于进程间网络通信,也可以用于进程间非网络通信
7.符号链接
这种类型的文件指向另一个文件,17节会更多描述符号链接
Top comments (0)