第九篇:使用 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\n", ptr);
38     }
39     exit(0);
40 }

运行测试

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

小结

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

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

时间: 2024-12-21 07:32:04

第九篇:使用 lstat 函数获取文件信息的相关文章

stat()函数--------------获取文件信息

stat():用于获取文件的状态信息,使用时需要包含<sys/stat.h>头文件. 函数原型:int stat(const char *path, struct stat *buf): 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_nli

【转】linux C++ 获取文件信息 stat函数详解

stat函数讲解 表头文件:    #include <sys/stat.h>             #include <unistd.h>定义函数:    int stat(const char *file_name, struct stat *buf);函数说明:    通过文件名filename获取文件信息,并保存在buf所指的结构体stat中返回值:      执行成功则返回0,失败返回-1,错误代码存于errno 错误代码:    ENOENT         参数fi

用仿ActionScript的语法来编写html5——第九篇,仿URLLoader读取文件

第九篇,仿URLLoader读取文件 先看看最后的代码 function readFile(){ urlloader = new LURLLoader(); urlloader.addEventListener(LEvent.COMPLETE,readFileOk); urlloader.load("../file/test.txt","text"); } function readFileOk(){ mytxt.text = urlloader.data; } 基

关于finfo_file函数获取文件mime值验证出错的问题

今天在做图片上传 验证图片mime值时 突然发现  个别特殊情况下finfo_file 获取的MIME值不能直接使用, 按照官方的写法是 $finfo=finfo_open(FILEINFO_MIME); $mime=finfo_file($finfo,$file_path); finfo_close($finfo); alert($mime); 这样子获得文件mime类型的 但是今天发现这样子不行,在文件传输中如果有charset设置传输类型为二进制流的话, 就会出现类似如下图那样: 可以明显

【转】windows c++获取文件信息——_stat函数的使用

_stat函数的功能 _stat函数用来获取指定路径的文件或者文件夹的信息. 函数声明 int _stat( const char *path, struct _stat *buffer ); 参数: path——文件或者文件夹的路径 buffer——获取的信息保存在内存中 返回值: 正确——返回0 错误——返回-1,具体错误码保存在errno中 struct _stat结构体 _stat结构体是文件(夹)信息的结构体,定义如下: struct stat { _dev_t st_dev; //文

php 获取文件信息相关基础函数

<?phpheader('content-type:text/html;charset=utf-8');date_default_timezone_set('PRC');/** * 文件信息相关API */$filename="./test1.txt";// $filename="test";//filetype($filename):获取文件的类型,返回的是文件的类型echo '文件类型为:',filetype($filename),'<br/>

Linux获取文件信息

项目中需要对文件进行处理并分析,首先需要根据要求找到该文件,比如最后修改的文件 代码实现: 1 #include <unistd.h> 2 #include <sys/stat.h> 3 #include <time.h> 4 5 #include <iostream> 6 7 using namespace std; 8 9 int main(int argc, char **argv) 10 { 11 struct stat STFile; 12 sta

HttpWebRequest / HttpWebResponse 远程获取文件信息

HttpWebRequest myReq = (HttpWebRequest)WebRequest.Create(path+filename); //创建一个请求(获得需要的文件信息) HttpWebResponse myRes = (HttpWebResponse)myReq.GetResponse(); string gorlseftDate = myRes.LastModified.ToString("yyyy-MM-dd hh:mm:ss");//获得dataServer.ra

linux stat系统调用,获取文件信息。

stat 函数原型: int stat(const char *path, struct stat *buf); struct stat 说明 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