【Linux基础】stat函数

2023-11-18

stat函数

        函数描述获取文件属性

        函数原型

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

int stat(const char *pathname, struct stat *buf);

        函数返回值

                成功 :返回0

                失败 :返回-1

        参数类型   

                pathname :为待解析文件的路径名,可以为绝对路径,也可以为相对路径

                buf :为传出参数,传出文件的解析结果,buf为struct stat*类型,需要进一步解析,获取到的文件属性信息,就记录在struct stat结构体中

        struct stat结构体:

在man配置中,struct stat结构体如下:

struct stat {
               dev_t     st_dev;        /* 文件设备编号 */
               ino_t     st_ino;        /* inode节点 */
               mode_t    st_mode;       /* 文件的类型和存储的权限 */
               nlink_t   st_nlink;      /* 连到该文件的硬链接数,刚建立的文件值为1 */
               uid_t     st_uid;        /* 用户id */
               gid_t     st_gid;        /* 组id */
               dev_t     st_rdev;       /* (设备类型)若此文件为设备文件,则为设备编号 */
               off_t     st_size;       /* 文件大小 */
               blksize_t st_blksize;    /* 块大小(文件系统的I/O缓冲区大小) */
               blkcnt_t  st_blocks;     /* 块数 */

               /* Since Linux 2.6, the kernel supports nanosecond
                  precision for the following timestamp fields.
                  For the details before Linux 2.6, see NOTES. */

               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
           };

           st_mode表示文件的类型和存取的权限,为16位整数

//0-2bit--其他人权限
S_IROTH     00004   读权限
S_IWOTH     00002   写权限
S_IXOTH     00001   执行权限
S_IRWXO     00007   掩码,过滤st_mode中除其他人权限以外的信息

//3-5bit--所属组权限
S_IRGRP     00040   读权限
S_IWGRP     00020   写权限
S_IXGRP     00010   执行权限
S_IRWXG     00070   掩码,过滤st_mode中除所属组权限以外的信息

//6-8bit--文件所有者权限
S_IRUSR     00400   读权限
S_IWUSR     00200   写权限
S_IXUSR     00100   执行权限
S_IRWXU     00700   掩码,过滤st_mode中除文件所有者权限以外的信息
  • if(st_mode & S_IRUSR)//-----为真,表示可读
  • if(st_mode & S_IWUSR)//-----为真,表示可写
  • if(st_mode & S_IXUSR)//-----为真,表示可执行
//12-15bit--文件类型
S_IFSOCK    0140000     socket(套接字)
S_IFLNK     0120000     symbolic link(软连接)
S_IFREG     0100000     regular file(普通文件)
S_IFBLK     0060000     block device(块设备文件)
S_IFDIR     0040000     directory(目录)
S_IFCHR     0020000     character device(字符设备文件)
S_IFIFO     0010000     FIFO(管道)
S_IFMT      0170000     掩码,过滤st_mode中除文件类型以外的信息
  •  if(( st_mode & S_IFMT) == S_IFREG)//-----为真,表示普通文件
  •  if(S_ISREG (st_mode))                       //-----为真,表示普通文件
  •  if(S_ISDIR (st_mode))                       //-----为真,表示目录文件

实例:

(1)stat获取文件的大小

#include<sys/stat.h>

int main(int argc, char* argv[])
{
    struct stat statbuf;
    stat(argv[1], &statbuf);
    printf("%lu\n", statbuf.st_size);
 
    return 0;
}

输出结果:查看text.x文件的大小

(2)stat获取文件类型 

#include<sys/stat.h>

int main(int argc, char* argv[])
{
        
        struct stat statbuf;
        stat(argv[1], &statbuf);
        printf("%lu\n",statbuf.st_size);
        //获取文件类型,S_IFREG表示普通文件
        if((statbuf.st_mode & S_IFMT) == S_IFREG)
        {
                
                printf("这是一个普通文件\n");
        }

        return 0;
}

输出结果:

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【Linux基础】stat函数 的相关文章

  • 为什么pow函数比简单运算慢?

    从我的一个朋友那里 我听说 pow 函数比简单地将底数乘以它的指数的等价函数要慢 例如 据他介绍 include
  • IdentityServer 4 对它的工作原理感到困惑

    我阅读和观看了很多有关 Identity Server 4 的内容 但我仍然对它有点困惑 因为似乎有很多移动部件 我现在明白这是一个单独的项目 它处理用户身份验证 我仍然不明白的是用户如何注册它 谁存储用户名 密码 我打算进行此设置 Rea
  • 如何在C(Linux)中的while循环中准确地睡眠?

    在 C 代码 Linux 操作系统 中 我需要在 while 循环内准确地休眠 比如说 10000 微秒 1000 次 我尝试过usleep nanosleep select pselect和其他一些方法 但没有成功 一旦大约 50 次 它
  • 如何判断计算机是否已重新启动?

    我曾经使用过一个命令行 SMTP 邮件程序 作为试用版的限制 它允许您在每个 Windows 会话中最多接收 10 封电子邮件 如果您重新启动计算机 您可能还会收到 10 个以上 我认为这种共享软件破坏非常巧妙 我想在我的应用程序中复制它
  • 如何使用 Castle Windsor 将对象注入到 WCF IErrorHandler 实现中?

    我正在使用 WCF 开发一组服务 该应用程序正在使用 Castle Windsor 进行依赖注入 我添加了一个IErrorHandler通过属性添加到服务的实现 到目前为止一切正常 这IErrorHandler对象 一个名为FaultHan
  • 查看 NuGet 包依赖关系层次结构

    有没有一种方法 文本或图形 来查看 NuGet 包之间的依赖关系层次结构 如果您使用的是新的 csproj 您可以在此处获取所有依赖项 在项目构建后 项目目录 obj project assets json
  • Visual Studio 在构建后显示假错误

    我使用的是 Visual Studio 2017 构建后 sln在调试模式下 我收到错误 但是 当我通过双击错误列表选项卡中的错误来访问错误时 错误会从页面中消失 并且错误数量也会减少 我不太确定这种行为以及为什么会发生这种情况 有超过 2
  • unordered_map 中字符串的 C++ 哈希函数

    看起来 C 标准库中没有字符串的哈希函数 这是真的 在任何 c 编译器上使用字符串作为 unordered map 中的键的工作示例是什么 C STL提供模板专业化 http en cppreference com w cpp string
  • 对 std::vector 进行排序但忽略某个数字

    我有一个std vector
  • Python 属性和 Swig

    我正在尝试使用 swig 为一些 C 代码创建 python 绑定 我似乎遇到了一个问题 试图从我拥有的一些访问器函数创建 python 属性 方法如下 class Player public void entity Entity enti
  • 为什么可以通过ref参数修改readonly字段?

    考虑 class Foo private readonly string value public Foo Bar ref value private void Bar ref string value value hello world
  • 为什么我的单选按钮不起作用?

    我正在 Visual C 2005 中开发 MFC 对话框应用程序 我的单选按钮是 m Small m Medium 和 m Large 它们都没有在我的 m Summary 编辑框中显示应有的内容 可能出什么问题了 这是我的代码 Pizz
  • 在mysql连接字符串中添加应用程序名称/程序名称[关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 我正在寻找一种解决方案 在连接字符串中添加应用程序名称或程序名称 以便它在 MySQL Workbench 中的 客户端连接 下可见 SQL
  • WPF DataGridTemplateColumn 组合框更新所有行

    我有这个 XAML 它从 ItemSource 是枚举的组合框中选择一个值 我使用的教程是 http www c sharpcorner com uploadfile dpatra combobox in datagrid in wpf h
  • Unity:通过拦截将两个接口注册为一个单例

    我有一个实现两个接口的类 我想对该类的方法应用拦截 我正在遵循中的建议Unity 将两个接口注册为一个单例 https stackoverflow com questions 1394650 unity register two inter
  • 实体框架中的“it”是什么

    如果以前有人问过这个问题 请原谅我 但我的任何搜索中都没有出现 它 我有两个数据库表 Person 和 Employee 对每个类型的表进行建模 例如 Employee is a Person 在我的 edmx 设计器中 我定义了一个实体
  • 可访问性不一致:参数类型的可访问性低于方法

    我试图在两个表单之间传递一个对象 基本上是对当前登录用户的引用 目前 我在登录表单中有一些类似的内容 private ACTInterface oActInterface public void button1 Click object s
  • 灵气序列解析问题

    我在使用 Spirit Qi 2 4 编写解析器时遇到一些问题 我有一系列键值对以以下格式解析
  • 如何使用 C++11 using 语法键入定义函数指针?

    我想写这个 typedef void FunctionPtr using using 我该怎么做呢 它具有类似的语法 只不过您从指针中删除了标识符 using FunctionPtr void 这是一个Example http ideone
  • ubuntu:升级软件(cmake)-版本消歧(本地编译)[关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 我的机器上安装了 cmake 2 8 0 来自 ubuntu 软件包 二进制文件放置在 usr bin cmake 中 我需要将 cmake 版本至少

随机推荐

  • .NET 6 ‘Unable to configure HTTPS endpoint...

    Mac M1 NET 6 Exception has occurred CLR System InvalidOperationException System InvalidOperationException 类型的未经处理的异常在 Sy
  • 蓝桥杯 c/c++ 算法提高 最长滑雪道

    算法提高 最长滑雪道 资源限制 时间限制 1 0s 内存限制 256 0MB 问题描述 小袁非常喜欢滑雪 因为滑雪很刺激 为了获得速度 滑的区域必须向下倾斜 而且当你滑到坡底 你不得不再次走上坡或者等待升降机来载你 小袁想知道在某个区域中最
  • CSS(非)实用技巧——背景与边框

    参考 CSS揭秘 CSS Secrets 背景 CSS3 尽管 CSS3 这个名词非常流行 但它严格意义上并不是一个规范 因为在CSS2之后 CSS这门语言已经庞大到无法放进单个规范中了 CSS工作组将其分成不同的模块 其中在CSS2 1已
  • 图书馆数据库服务器设备性能分析,高校图书馆数据库利用率统计与绩效的浅析.doc...

    PAGE PAGE 1 高校图书馆数据库利用率统计与绩效的浅析 摘要 现代的社会是一个信息社会 社会经济发展步伐和高科技信息技术的发展已经超过了我们想象的能力范围 随着越来越多的高校图书馆的建立 为了更好的服务学生和学校教师的教学 科研工作
  • 线程的优先级

    package com kuang Demo05 测试线程的优先级 public class TestPriority public static void main String args System out println Threa
  • Eclipse 从Debug模式中退出

    如果您尚未处于Java透视图中 请在主菜单中选择Window gt Open Perspective gt Java或单击下面的 Click to Perform 链接 Eclipse的右侧有新手教学 简单来说就是菜单栏里按顺序点击 就能切
  • tensorflow-gpu版本详细安装教程(Win10,Python3.7.9,cuda11.2,cudnn8.1.0)

    目录 cuda安装 cudnn安装 python安装 tensorflow安装 cuda安装下载 首先要注意自己的显卡支持cuda的版本 可以这样自查 可以看到适合自己的cuda版本 这里我选择了cuda11 2版本 cuda安装包下载链接
  • 虚拟机与物理机的三种连接方式

    引言 vmware为我们提供了三种网络工作模式 它们分别是 Bridged 桥接模式 NAT 网络地址转换模式 Host Only 仅主机模式 我们在刚刚接触它们的时候 常常被搞的晕头转向 今天我就为大家介绍一下这三种连接方式 桥接模式 桥
  • web前台传递时间日期格式转换为java.util.date,initBinder或者@DateTimeFormat方式

    方法1 根据前台传递的日期格式 在后台创建一个参数绑定的方法 将对应的日期字符串 转换为 java util date 从界面传递参数到spring后台controller类中 日期格式默认只能传long类型的时间戳 如果想要传递格式化的日
  • 阿里云ECS部署Nginx配置域名访问

    目录 前言 环境 具体步骤 服务器 域名 SSL证书 Nginx配置 前言 记录下阿里云服务器建站的过程 回回建 回回忘 尴尬 环境 ECS Centos7 6 Nginx 具体步骤 服务器 首先 需要购买一台服务器 域名 需要购买一个域名
  • Python unicode equal comparison failed

    用python进行判断的时候 如果包含中文会报错 name 这里是中文 if i name print right 修改成 name 这里是中文 decode utf 8
  • 聊聊undefined 和 undeclared

    一 undefined 在Js中 有两个表示 空 的值undefined和null 其中比较有用的是 undefined undefined 是一个值为 undefined 的类型 JavaScript语言也定义了一个全局变量 它的值是 u
  • oracle存储过程----异常的写法介绍

    上一篇 oracle存储过程 case条件控制语句的用法 oracle存储过程 异常介绍 参考PL SQL 存储过程中的异常来自于程序本身 也有的来自开发人员自定义的数据 而所有的这些错误我们称之为异常 编译时的错误不能称为异常 esmp
  • kubeadm配置虚拟机k8s集群

    环境 centos7 vm pro windows terminal termius 虚拟机 硬件配置 2核2G 实验用 具体可根据电脑调整 配置3台 master01 node01 node02 通过克隆虚拟机直接复制 配置通一项以后建议
  • spark-submit 报错 Initial job has not accepted any resources

    spark submit 报这样的错误 WARN scheduler TaskSchedulerImpl Initial job has not accepted any resources check your cluster UI to
  • [pytest源码4]-pluggy之Plugin注册逻辑分析

    前言 本篇将详细对plugin的注册逻辑进行分析 个人拙见 有错请各位指出 如果的我的文章对您有帮助 不符动动您的金手指给个Star 予人玫瑰 手有余香 不胜感激 GitHub pluggy注册逻辑分析性 我们来详细分析一下plugin的注
  • 有道无术,术尚可求,有术无道,止于术

    有道无术 术尚可求 有术无道 止于术 老子 道德经 道和术在一直是一个引起人们广泛讨论的话题 古今中外许多人对此皆有见解 道和术放在道德和能力上来说 到底哪个更重要许多名人名言中都有阐述 1 因为道德是做人的根本 根本一坏 纵然使你有一些学
  • 一文精通常量池

    大家好 今天来和大家一起探索下Java的常量池 在阅读本篇之前 我为大家准备了一个测试 共15道判断题 每题1分 满分15分 大约花费1 2分钟时间 如果你全部答对了 那么恭喜你大神 本篇可能已经满足不了你了 如果结果不理想也不要气馁 读完
  • OpenCV进阶--图像变换(三)

    继上文 五 图像透视变换 首先透视变换是按照物体成像投影规律进行变换 即将物体重新投影到新的成像平面 在透视变换中 透视前的图像和透视后的图像之间的变换关系可以用一个3 3的变换矩阵表示 该矩阵可以通过两幅图像中4个对应点的坐标求取 因此透
  • 【Linux基础】stat函数

    stat函数 函数描述 获取文件属性 函数原型 include