• 使用 lstat 函数获取文件信息


    前言

      在之前的文章中,描述过如何用 fcntl 函数改变文件的状态标记。但,文件还有很多信息,如文件类型,权限设置,设备编号,访问时间等等。如果要获取这些信息,则使用函数 lstat 可以轻松达到这个目的。

      下面的程序将使用该函数获取文件类型信息并判断它的类型

      但在这之前,先要说明文件信息结构体文件类型判定宏

    文件信息结构体

      调用 lstat 函数将会把指定文件的信息存放到 stat 结构体中,这个结构体的定义大致如下:

      

    文件类型判定宏

      文件结构体中的文件类型字段是一个整数,对此,可以使用如下判定宏来获知判定对象所属的文件类型:

      

    代码示例

     1 #include "apue.h"
     2 
     3 int
     4 main(int argc, char *argv[])
     5 {
     6     int            i;
     7     struct stat    buf;
     8     char        *ptr;
     9 
    10     for (i = 1; i < argc; i++) {
    11         // 输出要判断的文件名    
    12         printf("%s: ", argv[i]);
    13 
    14         // 执行 lstat 函数后,文件的信息就存放在了结构体 buf 中。
    15         if (lstat(argv[i], &buf) < 0) {
    16             err_ret("lstat error");
    17             continue;
    18         }
    19             
    20         // 执行判定宏,对结构体中的文件类型变量进行判定。
    21         if (S_ISREG(buf.st_mode))
    22             ptr = "regular";
    23         else if (S_ISDIR(buf.st_mode))
    24             ptr = "directory";
    25         else if (S_ISCHR(buf.st_mode))
    26             ptr = "character special";
    27         else if (S_ISBLK(buf.st_mode))
    28             ptr = "block special";
    29         else if (S_ISFIFO(buf.st_mode))
    30             ptr = "fifo";
    31         else if (S_ISLNK(buf.st_mode))
    32             ptr = "symbolic link";
    33         else if (S_ISSOCK(buf.st_mode))
    34             ptr = "socket";
    35         else
    36             ptr = "** unknown mode **";
    37         printf("%s
    ", ptr);
    38     }
    39     exit(0);
    40 }

    运行测试

      创建一个测试文件,并用该程序判断其文件类型。

      

    小结

      1. 当判定链接类型文件时,如果需要判定的对象是链接文件所链接的那个文件而非此链接文件本身的话,则应当使用 stat 函数

      2. 当希望通过文件描述符指定文件时,则应当使用 fstat 函数

  • 相关阅读:
    mysql语句查询:查询距离某个日期10天的数据
    Http中cookie的使用以及用CookieManager管理cookie
    HttpURLConnection绕过HTTPS的SSL验证
    echarts的简单应用之(二)饼图
    echarts的简单应用之(一)柱形图
    java中字节流与字符流的区别
    对SpringMVC框架的理解(转)
    opencv之yaml和xml文件读写
    C++之读取和写入文件
    opencv之投影点云到图像中
  • 原文地址:https://www.cnblogs.com/scut-fm/p/3652990.html
Copyright © 2020-2023  润新知