zoukankan      html  css  js  c++  java
  • 第九篇:使用 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 函数。

  • 相关阅读:
    stl学习笔记—set/multimap
    2013 杭州站 hdoj4778 Gems Fight!
    矩阵加速数列递推
    暑假写的两个数据结构
    AC自动机模板 hdoj2222 UVA-11468
    树莓派安装3.5英寸触摸屏幕
    树莓派设置NTP同步
    在树莓派上设置无线静态IP
    运行tomcat7w.exe未安装指定的服务
    LoadRunner 11安装Micosoft Visual C++ 2005 SP1时提示命令行选项语法错误
  • 原文地址:https://www.cnblogs.com/muchen/p/6354479.html
Copyright © 2011-2022 走看看