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

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

转载链接:http://www.cnblogs.com/hnrainll/archive/2011/05/11/2043361.html

转载于:https://www.cnblogs.com/-colin/p/7561499.html

linux stat函数讲解 -(转自秋水Leo)相关推荐

  1. linux stat函数讲解

    stat函数讲解 表头文件:    #include <sys/stat.h>              #include <unistd.h> 定义函数:    int st ...

  2. linux execl函数讲解,Linux下execl函数学习

    Linux下头文件 #include 函数定义 int execl(const char *path, const char *arg, ...); 函数说明 execl()其中后缀"l&q ...

  3. Linux access函数讲解

    函数: #include<unistd.h> int access(const char* pathname, int mode); 参数介绍: pathname 是文件的路径名+文件名 ...

  4. 【Linux C】access 函数讲解

    Linux access函数讲解_0729Liang-CSDN博客_access函数 函数: #include<unistd.h> int access(const char* pathn ...

  5. 十、Linux文件 - fread函数讲解

    目录 1.fread函数讲解 2.fread函数实战 1.fread函数讲解 从文件中读入数据到指定的地址中 函数原型: size_t fread(void*buff , size_t size, s ...

  6. 十二、Linux文件 - fseek函数讲解

    目录 一.fseek函数讲解 二.fseek函数实战 一.fseek函数讲解 重定向文件内部的指针 注:光标 ---- 文件内部的指针 函数原型: int fseek(FILE *stream,lon ...

  7. php crc32 作用,PHP crc32()函数讲解

    PHP crc32()函数讲解 PHP crc32() 函数 实例 输出 crc32() 的结果: $str = crc32("Hello World!"); printf(&qu ...

  8. mkdir c语言 头文件,mkdir和chdir函数讲解.doc

    mkdir和chdir函数讲解 Linux下mkdir函数 头文件库: #include #include 函数原型: int mkdir(const char *pathname, mode_t m ...

  9. 【100道面试题真题讲解】C++面试题讲解+JAVA面试题讲解+Linux面试题讲解+数据结构面试题+计算机网络面试题 讲解视频-持续更新中

    最近找到了一个非常好的公众号:IT笔试面试真题讲解,每天视频分享一道IT公司面试高频题目,完全免费哦,非常适合找工作的学生复习+总结+提炼. 白嫖不敢独吞,分享给大家,也给作者增加一点访问量,鼓励作者 ...

最新文章

  1. matlab学习笔记之常用命令(一)
  2. php7对象转换成数组,php 如何把对象转换成数组对象
  3. ubuntun安装ssh,并远程链接服务器操作
  4. 钉钉一个人怎么多部门 钉钉一个人加入多个部门的技巧
  5. 02 unix文件系统和命令
  6. 如何做到免驱打印_创想三维:3D打印机制造光感护眼台灯
  7. 苹果Mac Dock 栏应用窗口预览:​​​​​​​​​​​​DockView
  8. 微信提现php 该怎么加密,关于php 调用接口 微信云支付 HmacSha256 加密 request_content...
  9. 2021阿里云ECS镜像导入本地VMware虚拟机
  10. php快照劫持代码,php快照劫持跳转代码,php快照劫持源码下载
  11. 11月第5周业务风控关注|重磅!瓜子二手车“遥遥领先”被罚天价1250万
  12. 【PM杂谈】我理解的项目管理
  13. 橘子学ES10之搜索API入门
  14. kinect v2 面部模型
  15. [Flutter]微信分享并从分享链接跳回APP指定页面
  16. 大数据介绍项目流程_大数据介绍
  17. ubuntu下(wifi)硬件开关控制的设置
  18. OOM系列之一:java.lang.OutOfMemoryError: Java堆空间问题详解
  19. git中的revert和reset
  20. 基于APP Designer 实现串口数据监测功能App总结(2)——app设计

热门文章

  1. 云笔记Leanote,超级好用的一款开源云笔记
  2. IOS iap处理逻辑流程图再次梳理
  3. iOS苹果IAP 充值
  4. zoj3380 Patchouli's Spell Cards
  5. matlab 莫比乌斯曲面,『Rhino实例.2』莫比乌斯曲面
  6. 复杂场景下的权限系统该怎么玩?ABAC权限模型帮你搞定它!
  7. Zabbix poller processes more than 75% busy报错解决方案
  8. linux 基础常用命令集
  9. 循序渐进自学爬虫(一): 基础篇2
  10. c++ 模糊搜索 正则表达式_模糊搜索算法(近似字符串匹配算法)