1.依赖的头文件

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

2.函数定义:

//通过传入文件路径,struct stat结构体指针的方式

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

//通过文件描述符获取文件对应的属性。文件打开后这样操作
int fstat(int fd, struct stat *buf);

//通过文件描述符获取文件对应的属性。文件打开后这样操作
int lstat(const char *path, struct stat *buf);

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

注意:

给定一个path

A:stat函数返回一个与此命名文件有关的信息结构

B:fstat函数获得已在描述符filedes上打开的文件信息

C:lstat函数类似于stat,但是当命名的文件时一个符号连接是,lstat返回该符号连接的有关信息,而不是由此符号链接引用的文件的信息

3.这些函数的功能是返回关于一个文件的信息;

A:stat既有命令也有同名函数,用来获取文件的Inode里主要信息,stat跟踪符号链接

B:lstat不跟踪符号链接

4.stat里面时间辨析

atime(最近访问时间)

mtime(最近更改时间):指最近修改文件内容的时间

ctime(最近改动时间):指最近改动Innode的时间,要注意的是mtime信息是Innode中的一项,所以一旦它修改了,这一项也会修改

5.所有的这些系统调用后返回一个stat的结构体,这个结构体包括以下内容:

struct stat {
               dev_t     st_dev;         /* ID of device containing file   文件设备编号*/
               ino_t     st_ino;           /* inode number  节点号*/
               mode_t    st_mode;    /* protection  文件的类型和存取的权限*/
               nlink_t   st_nlink;        /* number of hard links  连到该文件的硬连接数目,刚建立的文件值为1*/
               uid_t     st_uid;           /* user ID of owner   用户ID*/
               gid_t     st_gid;           /* group ID of owner 组ID*/
               dev_t     st_rdev;        /* device ID (if special file)  (设备类型)若此文件尾设备文件,则为其设备编号*/
               off_t     st_size;          /* total size, in bytes  文件字节数(文件大小)*/
               blksize_t st_blksize;  /* blocksize for filesystem I/O   块大小(文件系统的I/O缓冲区大小),类型为unsigned long类型*/
               blkcnt_t  st_blocks;   /* number of 512B blocks allocated  ,分配的512字节的块数,类型为unsigned long类型*/
               time_t    st_atime;     /* time of last access 最后一个访问时间*/
               time_t    st_mtime;    /* time of last modification 最后更改的时间*/
               time_t    st_ctime;     /* time of last status change   inode的更改时间*/
           };

6.通过下面的宏(macros)定义文件类型,下面的st_mode域包括以下几个部分:

S_ISREG(m)  is it a regular file?                                      是否是一个常规文件

S_ISDIR(m)  directory?                                                    是否是一个目录

S_ISCHR(m)  character device?                                      是否是一个字符设备

S_ISBLK(m)  block device?                                              是否是一个块设备

S_ISFIFO(m) FIFO (named pipe)?                                   是否是输入输出(管道)

S_ISLNK(m)  symbolic link?  (Not in POSIX.1-1996.)      是否是符号链接

S_ISSOCK(m) socket?  (Not in POSIX.1-1996.)              是否是socket

7.下面的flags为了这个st_mode域而定义的

S_IFMT     0170000   bit mask for the file type bit fields   为bit域定义的位元掩码
           S_IFSOCK   0140000   socket                                          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_ISUID    0004000   set-user-ID bit                                 文件的(set user-id on execution)位
           S_ISGID    0002000   set-group-ID bit (see below)           文件的(set group-id on execution)位
           S_ISVTX    0001000   sticky bit (see below)                      文件的sticky为

S_IRWXU    00700     mask for file owner permissions     文件拥有者的掩码
           S_IRUSR    00400     owner has read permission             拥有者有读权限
           S_IWUSR    00200     owner has write permission            拥有者有写权限
           S_IXUSR    00100     owner has execute permission        拥有者有执行权限

S_IRWXG    00070     mask for group permissions           组权限的掩码          
           S_IRGRP    00040     group has read permission             组有读权限

S_IWGRP    00020     group has write permission            组有些权限
           S_IXGRP    00010     group has execute permission        组有执行权限

S_IRWXO    00007     mask for permissions for others (not in group)      其它者(不在组中)的权限掩码
           S_IROTH    00004     others have read permission                                  其它者有读权限
           S_IWOTH    00002     others have write permission                                 其它者有写权限
           S_IXOTH    00001     others have execute permission                             其它者有执行权限

8.关于黏住位

若一个目录具有sticky位(S_ISVTX) 则表示在此目录下的文件只能被文件所有者,次目录的所有者或者root来删除或修改

9.此外

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

10.stat()函数调用案例(通过程序的方式调用stat(),并且呈现 stat 结构体中的信息 )

运行结果:

Linux服务器开发之:stat(),fstat(),lstat()详细介绍+案例演示相关推荐

  1. Linux服务器开发之:chmod()函数,chmod命令,以及文件屏蔽umask命令,程序修改umask,详细介绍+案例演示

     1.依赖的头文件 #include<sys/stat.h> 2.函数定义: //通过传入path中给定的文件名的方式来改变文件制定的权限 int chmod(const char * ...

  2. 高性能服务器开发之C++定时器

    高性能服务器开发之C++定时器 来源: https://www.cnblogs.com/junye/p/5836552.html 写这篇文章前搜了下网上类似的文章,有很多,所以笔者的这篇文章就不对定时 ...

  3. Linux/Unix开发之make和makefile详解

     无论是在Linux还是在Unix环境中,make都是一个非常重要的编译命令.不管是自己进行项目开发还是安装应用软件,我们都经常要用到make或make install.利用make工具,我们可以 ...

  4. Java游戏服务器开发之A星算法

    Java游戏服务器开发之A星算法    学习这个主要是用于寻路算法.    参考资料主要是siki学院的视频,A计划--人工智能--A星算法. 网址http://www.sikiedu.com/cou ...

  5. Linux服务器上备份mysql数据库(详细教程)

    废话不多说,直接上教程 首先使用  mysql -V  查看服务器是否安装了mysql,没有一定要安装,因为脚本编写中需要mysql命令进行备份. 安装详细教程请移步看:Linux服务器装mysql数 ...

  6. chromedriver放在哪个目录下_python | Linux各目录及每个目录的详细介绍 - MR_黄Python之路...

    [常见目录说明] 目录 /bin 存放二进制可执行文件(ls,cat,mkdir等),常用命令一般都在这里. /etc 存放系统管理和配置文件 /home 存放所有用户文件的根目录,是用户主目录的基点 ...

  7. Linux各目录及每个目录的详细介绍

    [常见目录说明] 目录 /bin 存放二进制可执行文件(ls,cat,mkdir等),常用命令一般都在这里. /etc 存放系统管理和配置文件 /home 存放所有用户文件的根目录,是用户主目录的基点 ...

  8. linux各个目录介绍,Linux各目录及每个目录的详细介绍

    作者:郎思呈 学号:16020188007 转载自https://blog.csdn.net/qq_39633973/article/details/85157900 [常见目录说明] 目录 /bin ...

  9. python中的目录是什么_python | Linux各目录及每个目录的详细介绍

    [常见目录说明] 目录 /bin 存放二进制可执行文件(ls,cat,mkdir等),常用命令一般都在这里. /etc 存放系统管理和配置文件 /home 存放所有用户文件的根目录,是用户主目录的基点 ...

最新文章

  1. (59)Linux操作系统深入应用
  2. 数字图像处理:第四章 点运算
  3. java对象如何保存日期_如何在Java中的日期对象中存储和检索毫秒?
  4. SpringMVC接受JSON参数详解及常见错误总结我改
  5. C语言之去掉https链接的默认443端口
  6. WinCE Boot方式及 Bootloader架构概述
  7. 把握本质规律——《数学之美》作者吴军
  8. C# 线程池ThreadPool
  9. 2008php多版本共存,ECS Windows 2008 IIS如何同时配置多版本的php
  10. 程序员面试题之从字节截断谈起
  11. 剑指offer:二叉树打印成多行(层次遍历)
  12. centos7设置输入密码三次错误锁定账号
  13. 如何在微博侧栏中加入自己的微博[js]
  14. 开源巨献:腾讯最热门30款开源项目
  15. 借贷行业,还有明天吗?
  16. 【Adobe Illustrator 教程】4. 认识渐变工具
  17. drupal主题_50个精心挑选的美丽Drupal 6个主题
  18. 苹果app退款_苹果app退款流程:App Store应用如何申请iOS退款教程
  19. 搜扣扣三大频道闹元宵 优惠券、聚划算、九块邮正式上线
  20. 学习VSC配置opencv

热门文章

  1. OpenCASCADE:使用扩展数据交换 XDE之自定义注释note
  2. boost::mp11::mp_reverse相关用法的测试程序
  3. boost::lambda::is_instance_of_1用法的测试程序
  4. boost::integer::extended_euclidean用法的测试程序
  5. boost::fusion::erase_key用法的测试程序
  6. boost::detail模块实现数字特征的测试程序
  7. GDCM:将DICOM文件和XML文件相互转换的测试程序
  8. ITK:读未知的图像类型
  9. ITK:拉普拉斯递归高斯图像滤波器
  10. VTK:可视化算法之CutStructuredGrid