本章主要讨论4个stat函数以及它们的返回信息。
#include <sys/stat.h> int stat(const char *restrict pathname, struct stat * restrict buf); int fstat(int fd, struct stat* buf); int lstat(const char *restrict pathname, struct stat * restrict buf); int fstatat(int fd, const char * restrict pathname, struct stat *restrict buf, int flag); 所有4个函数的返回值:若成功,返回0;若出错,返回-1. |
一旦给出pathname,stat函数将返回与此命名文件有关的信息结构。fstat函数获得已在描述符fd上打开文件的有关信息。lstat函数类似于stat,但是当命名的文件是一个符号链接时,lstat返回该符号链接的有关信息,而不是由该符号链接引用的文件的信息。
fstatat函数为一个相对于当前打开目录(由fd参数指向)的路径名返回文件统计信息。flag参数控制着是否跟随着一个符号链接。当AT_SYMLINK_NOFOLLOW标志被设置时,fstatat不会跟随符号链接,而是返回符号链接本身的信息。否则,在默认情况下,返回的是符号链接所执指向的实际文件信息。如果fd参数的值是AT_FDCWD,并且pathname参数是一个相对路径名,fstatat会计算相对于当前目录的pathname参数。如果pathname是一个绝对路径,fd参数就会被忽略。这两种情况下,根据flag的取值,fstatat的作用就跟stat或lstat一样。
第2个参数buf是一个指针,它指向一个我们必须提供的结构。函数来填充由buf指向的结构。结构的实际定义可能随具体实现有所不同,但其基本形式是:
略。
注意,stat结构中的大多数成员都是基本系统数据类型。我们将说明此结构的每个成员以了解文件属性。
使用stat函数最多的地方可能就是ls -l命令,用其可以获得有关一个文件的所有信息。