Linux / struct stat 结构体简介

struct stat介绍和使用 struct stat 是在 C 和 C++ 语言中使用的一种结构体,通常用于存储文件的各种属性信息。它是 POSIX 标准的一部分,广泛应用于 Unix 和 Unix-like 操作系统(如 Linux 和 macOS)。 阅读详情

在使用这个结构体和方法时,需要引入:

#include <sys/types.h>

#include <sys/stat.h>

struct stat 这个结构体是用来描述一个 linux 系统文件系统中的文件属性的结构。

可以有两种方法来获取一个文件的属性:

1、通过路径:

int stat(const char *path, struct stat *struct_stat);

int lstat(const char *path,struct stat *struct_stat);

两个函数的第一个参数都是文件的路径,第二个参数是 struct stat 的指针。返回值为 0,表示成功执行。

执行失败是,error 被自动设置为下面的值:

  • EBADF: 文件描述词无效
  • EFAULT: 地址空间不可访问
  • ELOOP: 遍历路径时遇到太多的符号连接
  • ENAMETOOLONG:文件路径名太长
  • ENOENT:路径名的部分组件不存在,或路径名是空字串
  • ENOMEM:内存不足
  • ENOTDIR:路径名的部分组件不是目录

这两个方法区别:当文件是一个符号链接时,lstat 返回的是该符号链接本身的信息;而 stat 返回的是该链接指向的文件的信息。(似乎有些晕吧,这样记,lstat 比 stat 多了一个 l,因此它是有本事处理符号链接文件的,因此当遇到符号链接文件时,lstat 当然不会放过。而 stat 系统调用没有这个本事,它只能对符号链接文件睁一只眼闭一只眼,直接去处理链接所指文件喽)。

2、通过文件描述符

//通过文件描述符获取文件对应的属性。fdp 为文件描述符
int fstat(int fdp, struct stat *struct_stat);  

下面是这个结构的结构

struct stat {
        mode_t     st_mode;       //文件对应的模式,文件,目录等
        ino_t      st_ino;        //inode节点号
        dev_t      st_dev;        //设备号码
        dev_t      st_rdev;       //特殊设备号码
        nlink_t    st_nlink;      //文件的连接数
        uid_t      st_uid;        //文件所有者
        gid_t      st_gid;        //文件所有者对应的组
        off_t      st_size;       //普通文件,对应的文件字节数
        time_t     st_atime;      //文件最后被访问的时间
        time_t     st_mtime;      //文件内容最后被修改的时间
        time_t     st_ctime;      //文件状态改变时间
        blksize_t st_blksize;     //文件内容对应的块大小
        blkcnt_t   st_blocks;     //伟建内容对应的块数量
      };

stat 结构体中的 st_mode 则定义了下列数种情况:

  • S_IFMT   0170000    文件类型的位遮罩
  • S_IFSOCK 0140000    scoket
  • S_IFLNK 0120000     符号连接
  • S_IFREG 0100000     一般文件
  • S_IFBLK 0060000     区块装置
  • S_IFDIR 0040000     目录
  • S_IFCHR 0020000     字符装置
  • S_IFIFO 0010000     先进先出

  • S_ISUID 04000     文件的(set user-id on execution)位
  • S_ISGID 02000     文件的(set group-id on execution)位
  • S_ISVTX 01000     文件的sticky位

  • S_IRUSR(S_IREAD) 00400     文件所有者具可读取权限
  • S_IWUSR(S_IWRITE)00200     文件所有者具可写入权限
  • S_IXUSR(S_IEXEC) 00100     文件所有者具可执行权限

  • S_IRGRP 00040             用户组具可读取权限
  • S_IWGRP 00020             用户组具可写入权限
  • S_IXGRP 00010             用户组具可执行权限

  • S_IROTH 00004             其他用户具可读取权限
  • S_IWOTH 00002             其他用户具可写入权限
  • S_IXOTH 00001             其他用户具可执行权限

上述的文件类型在POSIX中定义了检查这些类型的宏定义:

  • S_ISLNK (st_mode)    判断是否为符号连接
  • S_ISREG (st_mode)    是否为一般文件
  • S_ISDIR (st_mode)    是否为目录
  • S_ISCHR (st_mode)    是否为字符装置文件
  • S_ISBLK (s3e)        是否为先进先出
  • S_ISSOCK (st_mode)   是否为socket

   
若一目录具有 sticky 位(S_ISVTX),则表示在此目录下的文件只能被该文件所有者、此目录所有者或 root 来删除或改名,在 linux 中,最典型的就是这个 /tmp 目录啦。

转载:struct stat结构体简介 - 楚云之南 - 博客园

(SAW:Game Over!)

uniapp:APP报错Error: Not Found:Page[2][-1,1;-1,1,0,0,2-0] at view.umd.min.js:1(uniApp安卓苹果ios出现一大堆数字错误) Error: Not Found:Page[2][一串数字] at view.umd.min.js:1,uniapp在APP端运行报错Error: Not Found:Page[2][-1,1;-1,1,0,0,2-0] at view.umd.min.js:1,uniapp真机运行偶尔出现Not Found:Page[2][-1,28] at view.umd.min.js:1,如何解决uniApp app报错:Not found -1,71 at view.umd.min.js:1,uniapp项目在H 阅读详情

相关推荐

告别Keil?在Mac上配置STM32CubeIDE + CMSIS-DAP调试器全攻略(含常见报错解决)

本文详细介绍了在Mac平台上配置STM32CubeIDE与CMSIS-DAP调试器的全流程,包括硬件准备、软件安装、工程创建及调试优化。通过实战指南,帮助开发者高效完成STM32开发,解决常见报错问题,提升开发效率。

weixin_30485379的博客 431

struct stat结构体的详解和用法

_stat函数用来获取指定路径的文件或者文件夹的信息。//! 需要包含de头文件 #include &lt;sys/types.h&gt; #include &lt;sys/stat.h&gt; int stat(  const char *filename //文件或者文件夹的路径  , struct stat *buf //获取的信息保存在内存中);...

weixin_34310785的博客 1791

【Android14 ShellTransitions】Transition就绪:双Transaction与SurfaceControl显示时机剖析

本文深入剖析了Android14 ShellTransitions框架中Transition就绪阶段的核心机制。重点解释了为何需要“双Transaction”来精确控制SurfaceControl的显示与隐藏时机,以确保Activity切换动画的流畅性。通过分析onTransactionReady流程、窗口绘制状态机及动画目标提升策略,揭示了系统如何协调WMCore与WMShell,实现从状态收集到动画播放的无缝衔接。

ooo22的博客 526

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

Linux系统调用函数stat详解,以及文件信息结构体struct stat结构体详解。

仅以此博客记录日常学习工作中所思所得,水平有限,难登大雅,万望海涵。 3399

GD32F105RBT6 keil工程模板

创建GD32F105RBT6的keil初始基础工程,未来的所有外设驱动都是基于这个基础工程进行扩展。

RMDYBW的博客 1925

手机拍视频就能训练机器人?SpatialLM开源模型实战指南(附HuggingFace部署教程)

本文详细介绍了如何利用开源模型SpatialLM通过手机视频训练机器人理解3D空间结构。从HuggingFace部署、视频预处理到模型推理和结果可视化,提供完整的实战指南,特别适合具身智能领域的开发者快速上手。

2y3u4i5o6p的博客 786

Linux struct stat介绍

Linux struct stat介绍 在使用这个结构体和方法时,需要引入: &amp;lt;sys/types.h&amp;gt; &amp;lt;sys/stat.h&amp;gt; struct stat这个结构体是用来描述一个linux系统文件系统中的文件属性的结构。 可以有两种方法来获取一个文件的属性: 1. stat 与 lstat函数 int stat(const char *path, struc...

Erice_s的博客 4893

别再一个个BAPI调了!用CVI_EI_INBOUND_MAIN一次性搞定SAP BP主数据(附完整ABAP代码)

本文详细介绍了如何使用SAP标准函数CVI_EI_INBOUND_MAIN高效维护业务伙伴(BP)主数据,替代传统的多BAPI调用方式。通过完整ABAP代码示例,展示了如何一站式处理供应商、客户、公司代码等所有视图的创建与更新,提升数据一致性和开发效率。

weixin_29204205的博客 289

linux C/C++ struct stat示例

前言 struct stat这个结构体是用来描述一个linux系统文件系统中的文件属性的结构。stat函数获取文件的所有相关信息,一般情况下,我们关心文件大小和创建时间、访问时间、修改时间。 struct stat 结构体介绍 首先还是先来所用到的struct stat结构体函数原型: int stat(const char *path, struct stat *buf); int lstat(...

chen1415886044的博客 8396

人工智能面试总结-分类与聚类

目录说说常用的分类算法,以及各自的优缺点?说说为什么正确率有时不能有效评估分类算法?说说什么样的分类器最好?说说聚类算法有哪些衡量标准?(选看)各聚类算法性能比较汇总说说什么是聚类,你知道哪些聚类算法?具体展开介绍你知道的聚类算法?说说K-Means聚类算法流程?说说K-Means聚类算法如何调优?说说K-Means聚类算法如何选择初始点?说说K-Means聚类聚的是特征还是样本?说说K-Means聚类的特征距离是如何计算的?说说聚类与分类的区别?手撕K-Means聚类 说说常用的分类算法,以及各自的优缺点

啥都生的博客 3860

RAP 值帮助实战:用 CDS 注解把 Fiori Elements 的输入体验做得又快又准

本文系统介绍了如何在SAP RAP应用中实现高效的值帮助(Value Help)功能。通过复用标准CDS View和自定义View Entity,开发者可以快速为字段添加弹窗选择、搜索和下拉框功能。文章详细讲解了三种核心实现方式:复用标准值帮助CDS View实现快速集成;构建自定义View Entity支持企业特定编码;利用搜索注解(@Search)和下拉框注解(@ObjectModel)优化用户体验。特别强调了文本显示、模糊搜索和小结果集下拉等实用技巧,并提供了可直接复用的国家代码值帮助示例。这些方法能

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 6464

struct stat结构体简介

struct stat结构体简介 struct stat这个结构体是用来描述一个linux系统文件系统中的文件属性的结构 可以有两种方法来获取一个文件的属性: 1、通过路径: int stat(const char *path, struct stat *struct_stat); int lstat(const char *path,struct stat *struct_stat); 两个函数...

sunshineywz的博客 2822

Google 二次签名 导致 Facebook , Google 登录失败

google 授权登录

xq610928的博客 1957

linux stat 结构,struct stat结构体简介

在使用这个结构体和方法时,需要引入:struct stat这个结构体是用来描述一个linux系统文件系统中的文件属性的结构。可以有两种方法来获取一个文件的属性:1、通过路径:int stat(const char *path, struct stat *struct_stat);int lstat(const char *path,struct stat *struct_stat);两个函数的第一...

weixin_39662611的博客 887

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

Linux:struct stat结构体

在使用这个结构体和方法时,需要引入: <sys/types.h> <sys/stat.h> struct stat这个结构体是用来描述一个linux系统文件系统中的文件属性的结构。 可以有两种方法来获取一个文件的属性: 1、通过路径: int stat(const char *path, struct stat *struct_stat); int lst...

JIWilliams 1371

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

linux struct stat 结构

stat() -- 获取文件大小 #include       #include          //exit()       #include          //strerror()       #include           //errno       #include      //stat()

jiangxinyu的专栏 9180

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

_stat函数/struct stat 结构体使用笔记

内容来自互联网,非原创,方便以后查看。 另,关于获取文件信息——_stat函数的使用详见http://blog.youkuaiyun.com/frank_liuxing/article/details/18604517#comments 在使用这个结构体和方法时,需要引入:<sys/types.h><sys/stat.h>struct stat这个结构体是用来描述...

ditong1284的博客 340

c/c++ linux struct stat示例

stat函数获取文件的所有相关信息,一般情况下,我们关心文件大小和创建时间、访问时间、修改时间。这两个方法区别在于stat没有处理字符链接(软链接)的能力,如果一个文件是符号链接,stat会直接返回它所指向的文件的属性;而lstat返回的就是这个符号链接的内容。两个函数的第一个参数都是文件的路径,第二个参数是struct stat的指针。可以看出stat.c打印的信息跟shell stat命令打印的信息都是一样的。跟stat.c函数做对比。下面的程序调用stat()并在返回的stat结构中显示所选字段。

qq_70252366的博客 489

Linux中的struct stat 结构体和 stat() 函数

Linux中的struct stat 结构体和 stat() 函数

Lucien_zhou的专栏 3921

struct stat结构体

最近在做cmu15-445的实验时,在源文件中第一次遇见了这个结构体,这里简要的记载一下其用法。

weixin_62210536的博客 534
上一篇: Linux 中三种引号(单引号、双引号、反引号)的区别
下一篇: 如何在海量数据中判断某个数据是否存在?
Ruo_Xiao
博客等级 码龄12年 506粉丝 419原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值