72-文件IO:目录项和inode & stat、lstat函数

1、目录项和inode

在这里插入图片描述

一个文件主要由两部分组成:

  • dentry,目录项,包括文件名和inode号
  • inode:本质结构体;存储文件的属性信息,如:权限、类型、大小、时间、用户、盘快位置()…也叫做文件属性管理结构,大多数的inode都存储在磁盘上。(少量常用、近期使用的inode会被缓存到内存中)

给文件创建硬链接:

  • inode是一样的,但是目录项是不一样的

删除文件:

  • 就是删除inode,去掉一个目录项,但是数据其实还是在硬盘上,以后会覆盖掉。

2、stat、lstat函数

查看文件信息:

stat 文件名

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-poQWZi6K-1650852106495)(../../../assets/文件IO/image-20220101211810003.png)]

stat结构体:

/*
    #include <sys/types.h>
    #include <sys/stat.h>
    #include <unistd.h>
	
	lstat:获取软链接文件的信息,没有穿透作用
	stat:获取文件信息,有穿透作用(不会获得软链接文件信息,直接获得源文件信息);

    int stat(const char *pathname, struct stat *statbuf);
        作用:获取一个文件相关的一些信息
        参数:
            - pathname:操作的文件的路径
            - statbuf:结构体变量,传出参数,用于保存获取到的文件的信息
        返回值:
            成功:返回0
            失败:返回-1 设置errno

    int lstat(const char *pathname, struct stat *statbuf);
        参数:
            - pathname:操作的文件的路径
            - statbuf:结构体变量,传出参数,用于保存获取到的文件的信息
        返回值:
            成功:返回0
            失败:返回-1 设置errno

*/

#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include <stdio.h>

int main() {

    struct stat statbuf;

    int ret = stat("a.txt", &statbuf);

    if(ret == -1) {
        perror("stat");
        return -1;
    }

    printf("size: %ld\n", statbuf.st_size);


    return 0;
}

st_mode

注意: 图片中的宏值都为8进制数

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-IvcsMeDO-1650852106496)(../../../assets/文件IO/image-20220101221104448.png)]

文件权限: User,Group,Others:rwx用1 (有) 或0 (无) 填充;

文件类型(对应12-15标志位):

在这里插入图片描述

以套接字为例:0140000(八进制),转换为二进制(1100 0000 0000 0000),看前4位1100,表示的就是管道文件;

判断Others是否有可执行(x)的权限:

st_mode:我们会得到16位的 二进制数,将前面15位变成0,和宏值做操作

判断文件类型:不是与操作,它是多个为=位:

比如判断套接字文件:1100 0000 0000 0000,将后面12位全部变成0;和掩码S_IFMT (八进制:0170000,二进制:1111 0000 0000 0000) 与操作,得到值和八进制值进行对比

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

liufeng2023

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值