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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 软磁盘阵列「建议收藏」

    软磁盘阵列「建议收藏」磁盘阵列是指通过软件或者硬件的技术来将多个磁盘整合成为一个大的磁盘设备,来实现存储和保护数据的功能。硬件实现的成为硬磁盘阵列,软件实现称为软磁盘阵列,硬件通过磁盘阵列卡上的芯片专门处理raid任务,性能最佳。但由于成本太高大多使用软磁盘阵列,就是mdadm软件,以分区或者磁盘为单位来进行设计。Raid-0(等量模式):将文件内容等量分配到各个磁盘中,大大增强读写速度,但只要硬盘有损坏,将会直接…

    2022年5月20日
    33
  • 用AVX2指令集优化浮点数组求和

    用AVX2指令集优化浮点数组求和用AVX2指令集优化浮点数组求和一、AVX2指令集介绍二、代码实现0.数据生成1.普通数组求和2.AVX2指令集求和:单精度浮点(float)3.AVX2指令集求和:双精度浮点(double)三、性能测试测试环境计时方式测试内容进行性能测试第一次测试第二次测试四、总结个人猜测原因:一、AVX2指令集介绍AVX2是SIMD(单指令多数据流)指令集,支持在一个指令周期内同时对256位内存进行操作。包含乘法,加法,位运算等功能。下附Intel官网使用文档。Intel®IntrinsicsGuid

    2022年5月7日
    47
  • 国内Centos镜像下载链接「建议收藏」

    国内Centos镜像下载链接「建议收藏」https://mirrors.aliyun.com/centos/转载于:https://www.cnblogs.com/Presley-lpc/p/10198845.html

    2022年5月28日
    33
  • Excel中文转拼音【真正的完整版】 拼音 驼峰命名专用

    Excel中文转拼音【真正的完整版】 拼音 驼峰命名专用一、打开Excel按  Alt+F11进入VB编程模式,选择“模块” 二、把下面的代码复制粘贴到“通用”下方的空白处Functionpinyin(pAsString)AsString’*************************************’版本说明:转载请保留此段注释’更新时间:2018年8月28日’作者:上海五航航空技…

    2022年6月21日
    33
  • 学习成功:中学生成就梦想的15堂必修课

    学习成功:中学生成就梦想的15堂必修课管斌全:《学习成功:中学生成就梦想的15堂必修课》笛案:自信国内外成功学的著作看过不少,但我只向人推荐管斌全的作品。以下内容节选自网络,个人有渠道还是买书好,也算是对作者的支持。fygub0231@sina.com0571-63311953013567128396该书已经出版了4个版本。  第一个版本是由北京海潮出版社(2002年10月)出版,书名为《我信我能我

    2022年5月1日
    27
  • 插头DP小结_dp插头接线标准

    插头DP小结_dp插头接线标准插头DP一般都是棋盘模型,找路径或者环路最值或者方案数。插头:说白了就是两个联通的格子,一个走向另一个,那么这里就有一个插头。轮廓线:DP逐格DP,那么轮廓线可以分开DP过的格子和未DP的格子。轮廓线的长度明显是m+1。插头垂直于轮廓线。转移:轮廓线在换行的时候要位移,这个画画图就出来了。然后具体问题具体讨论。比如任意多个环路,不考虑方向,那么就是eatthetrees,用最

    2025年7月5日
    3

发表回复

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

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