fstat函数及struct stat结构

告别手动改Hex!用Vector HexView命令行5分钟搞定固件数据“乾坤大挪移” 本文详细介绍了如何利用Vector HexView命令行工具快速实现嵌入式固件数据的自动化迁移,告别手动修改Hex文件的繁琐流程。通过实战案例和脚本示例,展示了如何5分钟内完成数据地址范围的重新映射,提升嵌入式开发效率,特别适用于烧录文件的内存布局调整。 阅读详情

fstat函数及struct stat结构


  
一、fstat 函数
功能
:由文件描述符取得文件状态。

相关函数:stat 、lstat 、chmod 、chown 、readlink 、utime。

头文件:  #include<sys/stat.h>
         #include<unistd.h>

函数声明: int fstat (int filedes,struct *buf);

描述: fstat()用来将参数filedes 所指向的文件状态复制到参数buf 所指向的结构中(structstat)。fstat()与stat()作用完全相同,不同之处在于传入的参数为已打开的文件描述符。

返回值:执行成功返回0,失败返回-1,错误代码保存在errno。

下面举一个小例子:
------------------------------
#include <stdio.h>
#include <stdlib.h>
#include <sys/stat.h>
#include <unistd.h>
#include <fcntl.h>

main()
{
           struct stat buf;
           intfd;
           fd = open( "/etc/passwd", O_RDONLY);
           fstat (fd,&buf);
          printf("/etc/passwd file size = %d\n",(int)(buf.st_size));
}

------------------------------
执行结果:
/etc/passwd file size = 1656
   
也许,你看到这里会产生和我一样的疑惑:这个struct stat 结构到底是什么样的呢?
下面我就来详细的介绍一下它了哦~~~      


二、struct stat结构体

定义如下:

struct stat { 
         dev_t     st_dev; // 文件所在设备ID 
         ino_t     st_ino;     // 结点(inode)编号  
         mode_t    st_mode;    // 保护模式 
         nlink_t   st_nlink;   // 硬链接个数  
         uid_t     st_uid;     // 所有者用户ID  
         gid_t     st_gid;     // 所有者组ID  
         dev_t     st_rdev;    // 设备ID(如果是特殊文件) 
         off_t     st_size;    // 总体尺寸,以字节为单位 
         blksize_t st_blksize; // 文件系统 I/O 块大小
         blkcnt_t  st_blocks;  // 已分配 512B 块个数
         time_t    st_atime;   // 上次访问时间 
         time_t    st_mtime;   // 上次更新时间 
         time_t    st_ctime;   // 上次状态更改时间 
};

st_dev字段描述该文件所在的设备。(major() 和minor()宏可能在分析这个设备ID域时有用。)

st_rdev 字段描述这个文件(inode)本身代表的设备。

st_size字段给出文件字节尺寸(如果它是一个普通文件或符号链接)。对于符号链接而言是它所有包含路径名长度,不包括结尾的空字符。

st_blocks 字段指明文件已经分配数据块的个数,数据块以 512 字节为单位。(这可能小于st_size/512,当文件有空洞时。)

st_blksize 给出对于高效文件系统 I/O 操作的优先块尺寸。(数据以小尺寸块写入文件时可能导致低效的读-更改-覆盖 操作。)

不是所有的 Linux 文件系统实现了所有的时间域。一些文件系统允许挂载时不去访问文件或目录且不会导致st_atime 字段更新。(参考 mount() 的noatime、nodiratime 和relatime,以及mount() 中相关的信息。)此外,如果文件以O_NOATIME 标志打开,st_atime 不会被更新。

st_atime字段在文件访问时更改,比如,execve()、mknod()、pipe()、utime() 和read()(多于零个字节)。

域 st_mtime在文件更改时更新,比如,mknod()、truncate()、utime() 和write()(多于零个字节)。再者,一个目录的 st_mtime在这个目录里创建或删除文件时更新。st_mtime 在更改所有者、组、硬链接个数或权限模式时 不会更新。

st_ctime 字段在写入或设置结点(inode)信息(如所有者、组、链接数、权限等等)时会更改。

下面 POSIX 宏用于使用 st_mode 字段测试文件类型:

S_ISREG(m)
它是普通文件吗?
S_ISDIR(m)
目录吗?
S_ISCHR(m)
字符设备?
S_ISBLK(m)
块设备?
S_ISFIFO(m)
FIFO(命名管道)?
S_ISLNK(m)
符号链接?(不在 POSIX.1-1996。)
S_ISSOCK(m)
套接口?(不在 POSIX.1-1996。)

下面标志为 st_mode 域定义:

S_IFMT0170000文件类型位域掩码
S_IFSOCK0140000套接口
S_IFLNK0120000符号链接
S_IFREG0100000普通文件
S_IFBLK0060000块设备
S_IFDIR0040000目录
S_IFCHR0020000字符设备
S_IFIFO0010000FIFO
S_ISUID0004000设置 UID 位
S_ISGID0002000设置 组ID 位 (看下面)
S_ISVTX0001000粘滞位(看下面)
S_IRWXU00700文件所有者权限掩码
S_IRUSR00400所有者有读权限
S_IWUSR00200所有者有写权限
S_IXUSR00100所有者有执行权限
S_IRWXG00070组权限掩码
S_IRGRP00040组有读权限
S_IWGRP00020组有写权限
S_IXGRP00010组有执行权限
S_IRWXO00007其他用户权限掩码(不在组内)
S_IROTH00004其他有读权限
S_IWOTH00002其他有写权限
S_IXOTH00001其他有执行权限

设置组ID位S_ISGID)有多个特殊用处。对于一个目录而言,它指明 BSD语义应用到这个目录;创建的文件继承其父目录的组ID,而不是来自创建进程的有效组ID,并且创建的目录同时也会获得S_SIGID位设置。对于一个没有组执行权限位(S_IXGRP)文件而言,设置组ID位用于指明托管文件/记录锁。

在目录上的粘滞位(S_ISVTX)表示目录里的文件只有其所有者,目录所有者,和特权进程,可以对其进行重命名或删除。

31、贝叶斯认知建模与隐马尔可夫模型:理论与应用 本文探讨了贝叶斯认知建模与隐马尔可夫模型(HMM)的理论基础及其在认知科学和神经科学中的应用。重点介绍了贝叶斯定理和HMM的基本原理,并结合实际案例,如情绪识别系统和脑机接口(BCI),展示了它们在处理复杂认知任务中的强大能力。文章还讨论了贝叶斯-HMM模型的技术细节、优势与局限性,以及未来的发展前景。 阅读详情

相关推荐

医学图像处理入门:如何用Python将CT灰度图转换为伪彩色图像(附代码)

本文详细介绍了如何使用Python将CT灰度图转换为伪彩色图像,提升医学图像的可读性和诊断效率。通过OpenCV和Matplotlib等工具,实现灰度值到彩色空间的映射,特别适用于突出显示特定组织密度差异。文章包含完整代码示例和临床实用技巧,适合医学影像分析初学者和Python开发者。

gitlab7runner的博客 326

fstat函数详解

stat系统调用系列包括了fstat、stat和lstat,它们都是用来返回“相关文件状态信息”的,三者的不同之处在于设定源文件的方式不同。 1 首先fstat, stat和lstat三者都要用到的一个结构体类型,名字叫做struct stat。 这个struct stat结构体在不同的UNIX/Linux系统中的定义是有小的区别的,但你完全不用担心,这并不会影响我们的使用。 在struc...

qq_34738528的博客 3157

NGSIM数据集字段解析:从车辆轨迹到交通行为分析

本文深度解析NGSIM数据集的核心字段及其在交通行为分析中的应用。详细解读了车辆时空定位、状态属性及交互关系等关键字段,并通过高速路“幽灵堵车”和城市路口左转行为两个实战案例,展示了如何利用该数据集进行微观交通行为建模与驾驶特征提取,为交通流研究和自动驾驶算法测试提供数据基础。

weixin_29172963的博客 147

linux st_mode权限详解,Linux中用st_mode判断文件类型

在Linux中,可以利用stat()函数来获取一个文件的状态#include#includeintstat(constchar*file_name,structstat*buf);这个函数执行成功返回0,失败返回-1。取得的文件状态存放在buf指针指向的struct stat结构提中, struct stat的定义如下:structstat{dev_tst_dev;/*...

weixin_34653651的博客 1067

Qt入门教程【Core篇】singal and slot信号与槽

Qt中信号与槽singal and slot

小鱼酱的博客 2450

STM32智能小车控制舵机转向

文章目录前言一、舵机简单介绍及接线方式二、cubeMX配置三、代码解析总结 前言 本文将带大家学习如何驱动舵机转向 一、舵机简单介绍及接线方式 信号线(黄线)红线(电源线)棕色(地线) 舵机的控制一般需要一个20ms左右的时基脉冲,该脉冲的高电平部分一般为0.5ms-2.5ms范围内的角度控制脉冲部分,总间隔为2ms。以180度角度伺服为例,那么对应的控制关系是这样的: 0.5ms--------------0度; 1.0ms------------45度; 1.5ms------------90度; 2

m0_49476241的博客 8613

stat系列函数介绍(stat,lstat,fstat)

结构体来获取文件或目录的状态信息。这些信息可以用于确定文件的访问权限、所有者、组和其他属性,以及文件的大小、创建时间等信息。函数是一个系统调用,用于获取指定文件的元数据文件的状态信息),如文件大小、访问权限、最近访问时间等。函数类似,也用于获取文件的元数据(文件状态信息),但是可以识别符号链接并获取符号链接文件本身的信息。在打印时,我们获取了符号链接文件本身的大小、访问权限、所有者的用户ID以及最近访问时间。接着,我们打印了获取到的文件大小、文件访问权限、文件所有者的用户ID以及最近访问时间。

weixin_74128452的博客 2375

部署OpenClaw(ClawdBot、MoltBot)后访问localhost:18789报1008错误怎么办?

部署openclaw(曾用名ClawdBot、MoltBot)后访问localhost:18789出现1008授权错误❌?本文分享如何快速解决这个问题✅

XiaoqiangClub的博客 1万+

获取文件属性——stat()函数(七)

譬如,并不想通过打开文件来得到文件属性信息,那么就使用 stat,如果文件已 经打开了,那么就使用 fstat。在以前学的 open 函数的第三 个参数 mode 时也用到了类似的图,唯一不同的在于 open 函数的 mode 参数只涉及到 S、U、G、O 这 12 个 bit 位,并不包括用于描述文件类型的 4 个 bit 位。lstat()与 stat、fstat 的区别在于,对于符号链接文件,stat、fstat 查阅的是符号链接文件所指向的文件对 应的文件属性信息,而。上面代码示例的方法都可用。

weixin_73901182的博客 7622

STM32入门教程:WiFi通信

第四步:初始化串口 在生成的代码中,您可以找到一个名为 "USARTx_Init" 的函数,其中 "x" 是您选择的串口号。然后,我们使用 "AT+CIPSEND" 命令发送UDP数据,接收到服务器的回复,并在终端上显示收到的数据。在配置向导中,您可以选择启用USART串口功能,并根据您的硬件连接,将串口设置为与WiFi模块连接的串口。在上述代码中,我们使用了 "HAL_UART_Receive" 函数来接收串口数据,并使用 printf 来在终端上显示收到的数据。如果有任何问题,请随时向我提问。

2401_85258012的博客 1075

【图像超分】论文复现:经典超分 | SAN的Pytorch源码复现,跑通源码,适配高版本的python/pytorch/cuda,使用EDSR-PyTorch进行训练和测试

本文介绍了单幅图像超分辨率重建方法SAN(二阶注意网络)的代码实现。文章详细说明了在高版本Python/Pytorch环境下适配SAN源码的方法,并提供了修改后的完整代码和预训练模型下载链接。 主要亮点包括: 将SAN模型实现整合到EDSR-Pytorch框架中,解决了高版本环境下的兼容性问题 提供了完整的数据集准备指南(DIV2K训练集和5个测试集) 给出了详细的测试命令,涵盖x2、x3、x4不同放大倍率 公开了预训练模型和可视化结果的下载资源 提供了修改后的适配高版本环境的代码。

主要更新底层视觉(去噪、超分等)相关的科研内容,形式为【论文精读】+【论文复现】 1413

日常笔记之fstat函数

fstat函数及struct stat结构(2011-08-04 17:29:10) 转载▼ 标签: 杂谈 分类: Linux 一、fstat 函数 功能:由文件描述符取得文件状态。 相关函数:stat 、lstat 、chmod 、chown 、readlink 、utime。 头文件:  #include

hxHardway的博客 690

华为OD机试双机位C卷-字符串解密(Py/Java/C/C++/Js/Go)

华为OD机试(机考)双机位C卷 【字符串解密】,提供C语言、Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解,以及在线OJ模拟做题。华为OD机试 - 字符串解密。

qq_45776114的博客 734

fstat函数

stat系统调用系列包括了fstat、stat和lstat,它们都是用来返回“相关文件状态信息”的,三者的不同之处在于设定源文件的方式不同。 1 首先隆重介绍的是一个非常重要的”VIP”人物,他是fstat, stat和lstat三者都要用到的一个结构体类型,名字叫做struct stat。可以说,没有这个struct stat的支持,上述三个系统调用将寸步难行。 这个struct st

总结 2万+

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

fstat、stat和lstat 区别

stat系统调用系列包括了fstat、stat和lstat,它们都是用来返回“相关文件状态信息”的,三者的不同之处在于设定源文件的方式不同。 1 首先隆重介绍的是一个非常重要的”VIP”人物,他是fstat, stat和lstat三者都要用到的一个结构体类型,名字叫做struct stat。可以说,没有这个struct stat的支持,上述三个系统调用将寸步难行。 这个struct s

星星之火的Blog 547

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

C/C++ struct stat介绍

C/C++ struct stat介绍

qq_45730378的博客 1782

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

stat函数(stat、fstat、lstat)

#include <sys/types.h> #include <sys/stat.h> #include <unistd.h> //需包含头文件 有如下三个函数的函数原型: int stat(const char *path, struct stat *buf); 第一个形参:指出文件(文件路径); 第二个形参:出参数(函数对该参数操作,然后...

luciusvorenus 6002

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_39632693的博客 308

Linux / struct stat 结构体简介

若一目录具有 sticky 位(S_ISVTX),则表示在此目录下的文件只能被该文件所有者、此目录所有者或 root 来删除或改名,在 linux 中,最典型的就是这个 /tmp 目录啦。这两个方法区别:stat 没有处理字符链接(软链接)的能力,如果一个文件是符号链接,stat 会直接返回它所指向的文件的属性;两个函数的第一个参数都是文件的路径,第二个参数是 struct stat 的指针。struct stat 这个结构体是用来描述一个 linux 系统文件系统中的文件属性的结构。

布袋和尚 846

APUE编程:33---文件目录(文件类型:struct stat、stat、fstat、fstatat、lstat函数)

一、文件类型 二、struct stat结构体 struct stat { mode_t st_mode; /* file type & mode (permissions) */ ino_t st_ino; /* i-node number (serial number) */ dev_t st_dev; /* device number (file s...

董哥的黑板报 910
上一篇: cluster meet
下一篇: 一.fileno()函数
TuxedoLinux
博客等级 码龄9年 268粉丝 34原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值