Linux 系统提供了很多便于与文件系统进行交互的函数,其中stat函数是最常用的一个函数,它用于返回文件(和目录、符号链接等)的元数据,例如它的名称、所有者和权限。
`stat`函数的原型为:
“`C
int stat(const char* path, struct stat* buf);
第一个参数“path”是要查询的文件路径,这可以是绝对路径或相对路径,第二个参数“buf”是指向一个`stat`结构的指针,这个结构的定义如下(忽略一些不必要的成员):
```C
struct stat {
mode_t st_mode; /*文件的类型和存取的权限*/
ino_t st_ino; /*inode编号*/
dev_t st_dev; /*文件所在设备的设备编号*/
off_t st_size; /*文件字节数*/
blksize_t st_blksize; /*块大小*/
blkcnt_t st_blocks; /*块数*/
time_t st_atime; /*最后一次访问时间*/
time_t st_ctime; /*最后一次改变时间(文件内容)*/
time_t st_mtime; /*最后一次修改时间(文件权限)*/
};
`stat`函数会将“path”指定的文件的元数据放入由“buf”指定的`stat`结构中,返回值则表示文件或者路径操作的结果。 如果操作成功,那么返回值将为0,如果失败返回负值,其对应的错误码定义在`errno.h`中:
“`C
#include
/*出错返回的函数值*/
#define ENOENT 2 /*No such file or directory*/
#define EACCESS 13 /*Permission denied*/
示例1,使用`stat`函数打印指定文件的详细信息:
```C
#include
#include
#include
#include
int main()
{
struct stat sbuf;
if(stat("/etc/passwd", &sbuf)
{
perror("stat");
return 0;
}
printf("文件大小:%ld\n", sbuf.st_size);
printf("上次访问时间:%s\n",ctime(&sbuf.st_atime));
return 0;
}
以上就是`stat`函数的基础用法介绍,`stat`函数的完整的参数列表及详细的资料可以在 Linux man 手册中查看到。
总之,Linux 中stat函数是一个很有用的函数,它可以用于获取文件的元数据,从而帮助我们更好地管理文件系统。