Inode
- 本质为结构体,存储文件的属性信息,例如权限、类型、大小、时间等等
- 也称为文件属性管理结构,大多数inode都存储在磁盘上
- 少量、近期使用的inode会被缓存到内存中
dentry
- dentry是一个内存实体,其中的d_inode成员指向对应的inode
- dentry里面也存有文件名、硬链接名
- 也称目录项
stat函数
-
用于获取文件属性,从inode结构体中获取
-
lstat函数与stat函数没什么区别,但lstat不会穿透链接,stat会
-
函数原型
int stat(const char *path, struct stat *buf);
-
path文件名路径
-
buf:存放文件属性
-
返回值:
- 成功返回0
- 失败返回-1
-
代码示例
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <pthread.h>
#include <fcntl.h>
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
int main(int argc, char *argv[])
{
struct stat sbuf;
int ret = stat(argv[1], &sbuf);
if(ret==-1)
{
perror("stat error");
exit(1);
}
printf("file size %ld\n",sbuf.st_size);
return 0;
}
link函数
Ulink函数
- 作用删除文件,也就是删除目录项
- 如果文件的硬链接数为0,系统不会马上释放该文件,而是等到所有进程关闭该文件,系统才会挑时间释放掉该文件
dup和dup2
复制文件描述符
int dup(int oldfd);
//oldfd:已有的文件描述符
//return:新文件描述符
//文件描述符复制和文件描述符重定向
int dup2(int oldfd, int newfd);