• 第九篇:使用 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 函数。

  • 相关阅读:
    sql 同一行中,不同结果在不同列显示
    用jstl的if或when标签判断字符串是否为空
    RESTful 接口规范
    HTTP协议详解
    easyui datagrid 去除单击行选中事件
    easyui datagrid 选中行效果
    Nodejs
    VMware 中的win7虚拟机在一段时间后就会自动挂起
    Vmware 安装 ghost 版 win 7
    idea tomcat 乱码问题的解决及相关设置
  • 原文地址:https://www.cnblogs.com/muchen/p/6354479.html
Copyright © 2020-2023  润新知