【Linux系统】stat、lstat函数

article/2025/10/8 15:36:10

Linux系统—stat、lstat函数

#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>int stat(const char *pathname, struct stat *statbuf);int lstat(const char *pathname, struct stat *statbuf);

1.1 stat 函数

#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>int stat(const char *pathname, struct stat *statbuf);
  • 作用:获取文件相关的信息
  • 参数
    • pathname:操作的文件的路径
    • statbuf:结构体变量,传出参数,用于保存获取到的文件的信息
  • 返回值
    • 成功:返回0
    • 失败:返回-1 并设置errno

在Linux系统中包含有stat 文件名 shell命令:

查看文件的相关信息

fuerer@fuerer-virtual-machine:~/Linux/lesson12$ touch a.txt
fuerer@fuerer-virtual-machine:~/Linux/lesson12$ ls
a.txt  stat.c
fuerer@fuerer-virtual-machine:~/Linux/lesson12$ stat a.txt文件:a.txt大小:12        	块:8          IO 块:4096   普通文件
设备:801h/2049d	Inode:682288      硬链接:1
权限:(0664/-rw-rw-r--)  Uid:( 1000/  fuerer)   Gid:( 1000/  fuerer)
最近访问:2022-03-24 15:35:59.947966889 +0800
最近更改:2022-03-24 15:35:59.947966889 +0800
最近改动:2022-03-24 15:35:59.947966889 +0800
创建时间:-

文件信息

  • 文件名
  • 大小 12字节
  • 块:8 ——> 共占 8 个块
  • IO块:4096 ——> 一个块的大小为4096(共占了8个块)
  • 普通文件
  • 设备:801h/2049d ——> 设备标识
  • Inode:682288 ——> Linux中使用Inode标识文件
  • 硬链接:1 ——> 硬链接数
  • 权限:(0664/-rw-rw-r–)
  • Uid:( 1000/ fuerer) ——> 当前用户ID
  • Gid:( 1000/ fuerer) ——> 当前用户所在组ID
  • 最近访问
  • 最近更改 ——> 文件中内容数据、属性发生改变
  • 最近改动 ——> 文件的属性(例:权限…)发生改变
  • 创建时间

1.1.1 stat 结构体

保存文件的信息

struct stat {dev_t     st_dev;         //文件的设备编号     ino_t     st_ino;         //节点 Inode mode_t    st_mode;        //文件的类型(7种类型和存取的权限)        nlink_t   st_nlink;       //硬链接数     uid_t     st_uid;         //用户ID        gid_t     st_gid;         //用户组ID         dev_t     st_rdev;    //设备文件的设备编号(如果是一个设备文件)  off_t     st_size;        //文件的字节数(文件大小) blksize_t st_blksize;     //块大小   blkcnt_t  st_blocks;      //块数      struct timespec st_atim;  //最后一次访问时间struct timespec st_mtim;  //最后一次修改时间struct timespec st_ctim;  //最后一次改动时间(指属性)#define st_atime st_atim.tv_sec #define st_mtime st_mtim.tv_sec#define st_ctime st_ctim.tv_sec
};

1.1.2 st_mode 变量

  • 16位
  • 使用标志位表示存取权限(有对应权限,为1)

1. 相关宏变量:

  • S_IROTH:Is Read others 0004(最后一组:100)
  • S_IWOTH:Is Write others 0002(最后一组:010)
  • S_IXOTH:Is Read others 0001(最后一组:001)
  • S_IRWXO:Is Read Write X others 0007(最后一组:111)

2. 文件类型(12-15位):

  • Linux系统一共7种文件类型,使用一个或多个标记位表示

3. 判断是否有某个权限:

  • 与相应的宏变量做 按位与 的操作(结果为1,有该权限)

4. 判断文件是否是某个类型:

  • 不是按位与,因为不是一个位表示一个类型
  • (st_mode & S_IFMT) == S_IFREG
    • 掩码 S_IFMT = 0170000 = 1111 0000 0000 0000B
    • st_mode & S_IFMT 得到文件类型的编码,与对应类型比较是否相等即可

1.2 stat 函数使用实例

编写stat.c 文件:

#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include <stdio.h>int main() {//1. 定义存放文件信息的结构体struct stat statbuf;//2. 调用stat函数获取文件信息,并存放在statbuf中int ret = stat("a.txt", &statbuf);if(ret == -1) {perror("stat");return -1;}//3. 从statbuf中获取文件信息printf("size: %ld\n", statbuf.st_size);return 0;
}

编译运行:

fuerer@fuerer-virtual-machine:~/Linux/lesson12$ gcc stat.c -o stat
fuerer@fuerer-virtual-machine:~/Linux/lesson12$ ./stat
size: 12
fuerer@fuerer-virtual-machine:~/Linux/lesson12$ ll
总用量 28
drwxrwxr-x  2 fuerer fuerer 4096 324 16:09 ./
drwxrwxr-x 13 fuerer fuerer 4096 324 15:33 ../
-rw-rw-r--  1 fuerer fuerer   12 324 15:35 a.txt
-rwxrwxr-x  1 fuerer fuerer 8496 324 16:09 stat*
-rw-rw-r--  1 fuerer fuerer 1229 324 16:09 stat.c

1.3 lstat 函数与 stat 函数区别

ln -s a.txt b.txt 创建软链接 b.txt -> a.txt

fuerer@fuerer-virtual-machine:~/Linux/lesson12$ ln -s a.txt b.txt
fuerer@fuerer-virtual-machine:~/Linux/lesson12$ ls
a.txt  b.txt  stat  stat.c
fuerer@fuerer-virtual-machine:~/Linux/lesson12$ ll
总用量 28
drwxrwxr-x  2 fuerer fuerer 4096 324 16:10 ./
drwxrwxr-x 13 fuerer fuerer 4096 324 15:33 ../
-rw-rw-r--  1 fuerer fuerer   12 324 15:35 a.txt
lrwxrwxrwx  1 fuerer fuerer    5 324 16:10 b.txt -> a.txt
-rwxrwxr-x  1 fuerer fuerer 8496 324 16:09 stat*
-rw-rw-r--  1 fuerer fuerer 1229 324 16:09 stat.c

打开b.txt 实际打开的是 a.txt

  • 使用 stat 函数获取 b.txt 软链接的信息,获取的是其指向的 a.txt 文件的信息
  • 获取 b.txt 软链接的信息 ——> lstat 函数

http://chatgpt.dhexx.cn/article/kfrtnS3U.shtml

相关文章

stat在python中_python os.stat() 和 stat模块详解

stat 系统调用时用来返回相关文件的系统状态信息的。 首先我们看一下stat中有哪些属性: 正如你上面看到的&#xff0c;你可以直接访问到这些属性值。 好了&#xff0c;下面我来看看python中的stat模块&#xff0c;先看看自带的例子&#xff1a; import os, sys from stat impor…

[UE4]Stat命令

说明 测试并优化你的游戏时&#xff0c;不可以避免用的要要那个到Stat命令。即专门针对显示游戏统计的控制台命令。 stat命令参考文档 要分析 虚幻引擎&#xff08;UE&#xff09; 项目&#xff0c;开发人员可以在使用 编辑器中运行&#xff08;PIE&#xff09; 模式运行游戏…

Linux系统调用六、stat函数与 struct stat 文件信息结构体深度刨析

&#x1f381;文章目录 &#x1f388;1. inode节点与硬链接&#x1f388;2. stat函数与 struct stat 结构体&#x1f388;3. stat函数实例分析及stat命令&#x1f388;4. 实现 ls -l filename命令&#x1f388;5. 穿透与非穿透 &#x1f388;1. inode节点与硬链接 通过上图可以…

Linux 应用编程之stat 函数

Linux 下可以使用 stat 命令查看文件的属性&#xff0c;其实这个命令内部就是通过调用 stat() 函数来获取文件属性的&#xff0c;stat 函数是 Linux 中的系统调用&#xff0c;用于获取文件相关的信息。&#xff08;可通过"man 2 stat"命令查看&#xff09;&…

pytorch stat

stat的作用是输出下面的参数 from torchstat import stat net FaceParseNet34(pretrainedTrue) stat(net, (3, 256, 256))

stat

stat 用于显示文件或者文件系统的状态 例如用stat grubaa64.efi 就可以看到文件的大小等信息

stat函数(stat、fstat、lstat)

#include <sys/types.h> #include <sys/stat.h> #include <unistd.h> //需包含头文件 有如下三个函数的函数原型&#xff1a; int stat(const char *path, struct stat *buf); 第一个形参&#xff1a;指出文件&#xff08;文件路径&#xff09;&…

stat函数

文章目录 (一)struct stat 结构体(二) st_mode 变量(三) struct timespec 结构体 Linux 下可以使用 stat 命令查看文件的属性&#xff0c;其实这个命令内部就是通过调用 stat()函数来获取文件属性的&#xff0c;stat 函数是 Linux 中的系统调用&#xff0c;用于获取文件相关的信…

Linux命令之stat命令

一、stat命令简介 stat命令用于显示文件的状态信息。stat命令的输出信息比ls命令的输出信息要更详细。stat命令可以查看的信息包括&#xff1a; File&#xff1a;显示文件名Size&#xff1a;显示文件大小Blocks&#xff1a;文件使用的数据块总数IO Block&#xff1a;IO块大小r…

面经 - 计算机网络知识点

文章目录 资料协议层次应用层HTTP缓存机制强制缓存对比缓存 HTTP无状态Cookie & Sessioncookiesession DNS解析HTTP方法keep-alive和非keep-alive区别HTTP长连接和短连接HTTP方法GET和POST区别HTTP和HTTPS从地址栏输入URL到显示页面都发生了什么? HTTP3.0&#xff08;可靠…

计算机网络期末总复习知识点

概述 互联网的2个重要基本特点&#xff1a;连通性&#xff08;connectivity&#xff09;和资源共享&#xff08;sharing&#xff09;。端系统之间的两种通信方式&#xff1a;客户/服务器方式&#xff08;Client/Server方式、C/S方式&#xff09;、对等方式&#xff08;Peer to…

计算机网络基础知识点

1.网络介绍 由通信介质将地理位置不同、相互独立的计算机连接起来&#xff0c;实现数据和资源共享。 2.网络分类 2.1 按照拓扑结构分类 1.总线型 &#xff08;一根线上串好多计算机&#xff09;特点&#xff1a;两端信号终结器&#xff0c;分叉处有T型头 2.环形 网络效率…

计算机网络知识点总结-第一章:概述

1.计算机网络在信息时代的作用 互联网基本特点&#xff1a; 连通性&#xff1a;互联网上用户不管距离多远&#xff0c;都能通信&#xff0c;就像这些用户终端都彼此连通 共享性&#xff1a;指资源共享&#xff0c;包含信息、软件、硬件等共享&#xff0c;就像资源在用户身边 计…

计算机网络知识总结

目录 一&#xff1a;计算机网络分类 二&#xff1a;网络拓扑结构 三&#xff1a;ISO/OSI模型&#xff08;七层模型&#xff09; 四&#xff1a;五层模型 五&#xff1a;五层模型和七层模型对比 六&#xff1a;TCP/IP协议族 一&#xff1a;计算机网络分类 局域网&#xff…

计算机网络期末考试知识点汇总

一、TCP五层协议 1.体系结构 2.各层功能&#xff08;精简版&#xff09; 应用层:为应用程序提供各种功能&#xff0c;有各种协议表示层:数据格式转化&#xff0c;数据编码&#xff0c;解压&#xff0c;解密等会话层:建立&#xff0c;管理&#xff0c;维护会话&#xff0c;流量…

计算机网络知识整理-计算机网络概述(计算机网络入门参考指南)

第1章 计算机网络概述 1.1为什么要学习计算机网络 在当前的互联网时代&#xff0c;计算机网络已经成为了我国的一项重要的通信基础设施&#xff0c;无论是你是在校的计算机专业大学生&#xff0c;还是正在从事网络相关工作的从业人员&#xff0c;计算机网络的学习都是十分重要…

计算机网络知识点复习(适合春招面试复习)

计算机网络知识点 HTTP协议HTTP协议各版本之间的区别**HTTP1.0默认是短链接。****HTTP1.1默认持久连接。****HTTP2.0****HTTP3.0** HTTPS的过程HTTP是如何保存用户状态&#xff0c;Cookie和Session OSI体系结构TCP的三次握手和四次挥手三次握手四次挥手2MSL时间SYN泛洪攻击解决…

计算机网络知识点汇总(谢希仁 第七版)

目录 第一章 概述 重要内容 计算机网络的一些相关知识 互联网概述 因特网的标准化工作 互联网的组成 计算机网络的类别 计算机网络的性能指标 计算机网络的体系结构——-分层次的体系结构 第二章 物理层 重要内容 物理层的基本概念 数据通信的基本知识 信道复用技…

计算机网络知识点全面总结(有这一篇就够了!!!)

一、计算机网络概述 1.1 计算机网络的分类 按照网络的作用范围&#xff1a;广域网&#xff08;WAN&#xff09;、城域网&#xff08;MAN&#xff09;、局域网&#xff08;LAN&#xff09;&#xff1b; 按照网络使用者&#xff1a;公用网络、专用网络。 1.2 计算机网络的层次结…