stat获取文件属性的命令
atat a.txt
device:扇区名字编号
IO block:凑够多少写一次硬盘
Inode文件节点编号,一个文件就有一个inode 静态节点 硬盘上的文件编号
modify:内容发生更改
change:属性被更改的时间
access:可访问性 访问时间
size大小
block 占用了多少个块
每个文件都附带了这个文件的一些属性,存在于文件本身中的,但是不像文件内容可以用编辑器打开看到
属性信息只能被专用的API才能看到
文件属性信息查看的API:stat /fstat /lstat
实际stat函数就是stat命令实现的
stat是man 1 指的是系统命令
stat也是man 2 系统API调用
ubuntu写的命令 由系统调用来的命令
struct stat在<sys/stat.h>中声明,里面的每一个成员对应上面的文件属性信息
stat API的作用就是把目标文件的属性信息传给结构体中,发挥的时候,buf就被填充了文件的属性信息,查看buf就可以得知文件的各种属性了
传一个空白的结构体进去,执行完里面就被填充完就是为了带出一些信息。
区别:stat是从文件名出发获取文件属性信息
fstat:从已经打开的文件的fd找到文件的属性信息
如果不想打开文件就获得信息 就用stat
如果打开之后获得用fstat,这个获取的快,因为是读内存
lstat:参数与stat是一样的,差别是对于符号链接文件,只是针对符号链接文件本身,stat指的是链接指向的文件
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include <string.h>
#define NAME "a.txt"
int main(void)
{
int ret = -1;
struct stat buf = {0};
memset(&buf, 0, sizeof(buf));
ret = stat(NAME, &buf);
if(ret <0)
{
perror("stat");
exit(-1);
}
//成功获取了stat结构体 文件属性
printf("inode = %d.\n", buf.st_ino);
return 0;
}