stat函数详解_stl函数

stat函数详解_stl函数stat函数讲解表头文件:   #include            #include定义函数:   intstat(constchar*file_name,structstat*buf);函数说明:   通过文件名filename获取文件信息,并保存在buf所指的结构体stat中返回值:     执行成功则返回0,失败返回-1,错误代码存于er

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺
stat函数讲解

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

             #include <unistd.h>

定义函数:    int stat(const char *file_name, struct stat *buf);

函数说明:    通过文件名filename获取文件信息,并保存在buf所指的结构体stat中

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

错误代码:

    ENOENT         参数file_name指定的文件不存在

    ENOTDIR        路径中的目录存在但却非真正的目录

    ELOOP          欲打开的文件有过多符号连接问题,上限为16符号连接

    EFAULT         参数buf为无效指针,指向无法存在的内存空间

    EACCESS        存取文件时被拒绝

    ENOMEM         核心内存不足

    ENAMETOOLONG   参数file_name的路径名称太长

#include <sys/stat.h>

#include <unistd.h>

#include <stdio.h>

int main() {

    struct stat buf;

    stat(“/etc/hosts”, &buf);

    printf(“/etc/hosts file size = %d\n”, buf.st_size);

}

—————————————————–

struct stat {

    dev_t         st_dev;       //文件的设备编号

    ino_t         st_ino;       //节点

    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;      //文件字节数(文件大小)

    unsigned long st_blksize;   //块大小(文件系统的I/O 缓冲区大小)

    unsigned long st_blocks;    //块数

    time_t        st_atime;     //最后一次访问时间

    time_t        st_mtime;     //最后一次修改时间

    time_t        st_ctime;     //最后一次改变时间(指属性)

};

先前所描述的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来删除或改名。

—————————————————–

struct statfs {

    long    f_type;          //文件系统类型

    long    f_bsize;         //块大小

    long    f_blocks;        //块多少

    long    f_bfree;         //空闲的块

    long    f_bavail;        //可用块

    long    f_files;         //总文件节点

    long    f_ffree;         //空闲文件节点

    fsid_t f_fsid;           //文件系统id

    long    f_namelen;       //文件名的最大长度

    long    f_spare[6];      //spare for later

};

stat、fstat和lstat函数(UNIX)

#include<sys/types.h>

#include<sys/stat.h>

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

提供文件名字,获取文件对应属性。感觉一般是文件没有打开的时候这样操作。

int fstat(int filedes, struct stat *buf);

通过文件描述符获取文件对应的属性。文件打开后这样操作

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

连接文件

三个函数的返回:若成功则为0,若出错则为-1

给定一个pathname,stat函数返回一个与此命名文件有关的信息结构,fstat函数获得已在描述符filedes上打开的文件的有关信息。lstat函数类似于stat,但是当命名的文件是一个符号连接时,lstat返回该符号连接的有关信息,而不是由该符号连接引用的文件的信息。

第二个参数是个指针,它指向一个我们应提供的结构。这些函数填写由buf指向的结构。该结构的实际定义可能随实现而有所不同,但其基本形式是:

struct stat{

mode_t st_mode;   /*file tpye &mode (permissions)*/

ino_t st_ino;     /*i=node number (serial number)*/

dev_t st_rdev;   /*device number for special files*/

nlink_t st_nlink; /*number of links*/

uid_t    st_uid; /*user id of owner*/

gid_t    st_gid; /*group ID of owner*/

off_t   st_size; /*size in bytes for regular files*/

time_t st_atime; /*time of last access*/

time_t st_mtime; /*time of last modification*/

time_t st_ctime; /*time of last file status change*/

long st_blksize; /*best I/O block size */

long st_blocks; /*number of 512-byte blocks allocated*/

};

   注意,除最后两个以外,其他各成员都为基本系统数据类型。我们将说明此结构的每个成员以了解文件属性。

 

使用stat函数最多的可能是ls-l命令,用其可以获得有关一个文件的所有信息。

1 函数都是获取文件(普通文件,目录,管道,socket,字符,块()的属性。

函数原型

#include <sys/stat.h>

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

提供文件名字,获取文件对应属性。

int fstat(int filedes, struct stat *buf);

通过文件描述符获取文件对应的属性。

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

连接文件描述命,获取文件属性。

2 文件对应的属性

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;     //伟建内容对应的块数量

      };

可以通过上面提供的函数,返回一个结构体,保存着文件的信息。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/171777.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 测试18

    测试18文章目录系统测试概述功能测试性能测试负载测试压力测试性能测试、压力测试、负载测试的关系兼容性测试安全测试健壮性测试配置测试可用性测试文档测试系统测试概述系统测试的定义将已

    2022年7月4日
    27
  • JS前端生成二维码的几种方式「建议收藏」

    JS前端生成二维码的几种方式「建议收藏」这里简单介绍几种前端实现js生成二维码的方式

    2022年8月31日
    4
  • 设置窗体透明 隐藏任务栏 与全屏显示

    设置窗体透明 隐藏任务栏 与全屏显示

    2021年8月6日
    58
  • LoadRunner教程(15)-LoadRunner 初识Analysis

    LoadRunner教程(15)-LoadRunner 初识Analysisanalysis简介分析器就是对测试结果数据进行分析的组件,它是LR三大组件之一,保存着大量用来分析性能测试结果的数据图,但并不一定要对每个视图进行分析,可以根据实际情况选择相关的数据视图进行分析,分析结果可以生成一些不同格式的测试报告,可以对不同的图表进行合并分析。在controller里面点击analysis,可以生成分析图表或者在开始运行场景时…

    2022年5月23日
    41
  • C# ASP.NET DROPDOWNLIST控件绑定数据库,用DropDownList1.SelectedValue.ToString 读取的选项值始终是第一项的值的解决方法

    C# ASP.NET DROPDOWNLIST控件绑定数据库,用DropDownList1.SelectedValue.ToString 读取的选项值始终是第一项的值的解决方法1、C#ASP.NETDROPDOWNLIST控件绑定数据库,数据库内容如下数据库有3个字段:id,name,map。数据库只有1个表,表名为table12、前台代码如下:<asp:DropDownListID=”DropDownList1″runat=”server”style=”z-index:1;left:360px;top:80px;position:absolute;height:35px;…

    2022年7月18日
    12
  • 跳跃表(skiplist )详解及其C++编程实现

    跳跃表(skiplist )详解及其C++编程实现跳表SkipList跳表SkipList1、背景2、定义2.1、SkipList基本数据结构及其实现3、实现4、使用方法4.1、跳表的创建4.2、跳表插入操作参考跳表SkipList1、背景为什么选择跳表?目前经常使用的平衡数据结构有:B树,红黑树,AVL树,SplayTree,Treep等。跳表是平衡树的一种替代的数据结构,但是和红黑树不相同的是,跳表对于树的平衡的实现是基于一种随机化的算法的,这样也就是说跳表的插入和删除的工作是比较简单的。用跳表吧,跳表是一种随机化的数据结构,目前开源软件

    2022年10月19日
    0

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号