Linux 系统IO函数之stat、lstat函数

1、stat函数

要点:
int stat(const char *pathname, struct stat *statbuf);

作用:查看文件的信息

man 2 stat

在这里插入图片描述

/return value

在这里插入图片描述

1、stat结构体:

在这里插入图片描述
2、sturct stat 结构体中 st_mode 的含义(文件的类型和存取的权限):

st_mode是个32位的整型变量,不过现在的linux操作系统只用了低16位(估计是鉴于以后拓展的考虑)

在这里插入图片描述

File type 属性区域,位于bit12 ~ bit15	

在现代linux操作系统上文件类型共分为7种,分别是:

1、普通文件(regular file)

2、目录(directory)

3、字符设备(character device)

4、块设备(block device)

5、管道(FIFO)

6、符号链接文件(symbolic link)

7、套接字文件(socket)

详情看 sturct stat 结构体中 st_mode 的含义

(st_mode & S_IFMT) == S_IFREG 通过与 掩码 与&运算 可以判断st_mode是不是一个普通文件

总结:

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

int stat(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;
}

2、lstat函数

要点:
int lstat(const char *pathname, struct stat *statbuf);

在这里插入图片描述

软链接 lrwxrwxrwx b.txt -> a.txt

petri@XX:~/lesson01/05_io$ touch a.txt
petri@XX:~/lesson01/05_io$ ln -s a.txt b.txt

petri@XX:~/lesson01/05_io$ ls -l
total 2
-rw-r--r-- 1 petri petri     0 Apr 22 18:34  a.txt
lrwxrwxrwx 1 petri petri     5 Apr 22 18:35  b.txt -> a.txt

petri@XX:~/lesson01/05_io$ stat b.txt
  File: b.txt -> a.txt
  Size: 5               Blocks: 0          IO Block: 512    symbolic link
Device: 2h/2d   Inode: 212232132439866878  Links: 1
Access: (0777/lrwxrwxrwx)  Uid: ( 1000/   petri)   Gid: ( 1000/   petri)
Access: 2024-04-22 18:35:14.200056400 +0800
Modify: 2024-04-22 18:35:14.200056400 +0800
Change: 2024-04-22 18:35:14.200056400 +0800
 Birth: -

b.txt大小为 5 ,此时打开b.txt看到的其实是a.txt,因此stat b.txt获取的其实是它指向的文件的信息。
l表示软连接,此时如果想获取b.txt的信息,就需要用到 lstat 这个函数了。

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

在这里插入图片描述

相关推荐

  1. Linux系列」Shell 函数详解

    2024-04-26 13:30:02       45 阅读
  2. Linux中的高级IO函数(三)fcntl

    2024-04-26 13:30:02       33 阅读
  3. Linux函数

    2024-04-26 13:30:02       29 阅读
  4. IO内存访问函数

    2024-04-26 13:30:02       65 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-04-26 13:30:02       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-04-26 13:30:02       100 阅读
  3. 在Django里面运行非项目文件

    2024-04-26 13:30:02       82 阅读
  4. Python语言-面向对象

    2024-04-26 13:30:02       91 阅读

热门阅读

  1. 【数据结构】单链表的尾插法

    2024-04-26 13:30:02       36 阅读
  2. 08.OSPF的特殊区域及其特点

    2024-04-26 13:30:02       34 阅读
  3. Pytorch:模块(Module类)

    2024-04-26 13:30:02       39 阅读
  4. C#鼠标拖拽无边框浮动窗体的方法:窗体控制

    2024-04-26 13:30:02       32 阅读
  5. 【模型渲染】前端如何让glb模型转3dtiles

    2024-04-26 13:30:02       34 阅读
  6. 【OceanBase诊断调优 】—— 索引调优

    2024-04-26 13:30:02       33 阅读
  7. 一文掌握python面向对象魔术方法(一)

    2024-04-26 13:30:02       35 阅读