第九篇:使用 lstat 函数获取文件信息
2024-09-21 18:03:13
前言
在之前的文章中,描述过如何用 fcntl 函数改变文件的状态标记。但,文件还有很多信息,如文件类型,权限设置,设备编号,访问时间等等。如果要获取这些信息,则使用函数 lstat 可以轻松达到这个目的。
下面的程序将使用该函数获取文件类型信息并判断它的类型。
但在这之前,先要说明文件信息结构体和文件类型判定宏。
文件信息结构体
调用 lstat 函数将会把指定文件的信息存放到 stat 结构体中,这个结构体的定义大致如下:
文件类型判定宏
文件结构体中的文件类型字段是一个整数,对此,可以使用如下判定宏来获知判定对象所属的文件类型:
代码示例
#include "apue.h" int
main(int argc, char *argv[])
{
int i;
struct stat buf;
char *ptr; for (i = ; i < argc; i++) {
// 输出要判断的文件名
printf("%s: ", argv[i]); // 执行 lstat 函数后,文件的信息就存放在了结构体 buf 中。
if (lstat(argv[i], &buf) < ) {
err_ret("lstat error");
continue;
} // 执行判定宏,对结构体中的文件类型变量进行判定。
if (S_ISREG(buf.st_mode))
ptr = "regular";
else if (S_ISDIR(buf.st_mode))
ptr = "directory";
else if (S_ISCHR(buf.st_mode))
ptr = "character special";
else if (S_ISBLK(buf.st_mode))
ptr = "block special";
else if (S_ISFIFO(buf.st_mode))
ptr = "fifo";
else if (S_ISLNK(buf.st_mode))
ptr = "symbolic link";
else if (S_ISSOCK(buf.st_mode))
ptr = "socket";
else
ptr = "** unknown mode **";
printf("%s\n", ptr);
}
exit();
}
运行测试
创建一个测试文件,并用该程序判断其文件类型。
小结
1. 当判定链接类型文件时,如果需要判定的对象是链接文件所链接的那个文件而非此链接文件本身的话,则应当使用 stat 函数。
2. 当希望通过文件描述符指定文件时,则应当使用 fstat 函数。
最新文章
- 配置eclipse J2EE环境
- Gym - 100917H
- C语言学习020:可变参数函数
- 以对象的方式来访问xml数据表(三)
- 各种兼容的placeholder
- 021,lambda 表达式
- Spring事务管理使用
- collections——高性能容器数据类型
- 小程序--改变子级别页面导航栏信息 / navigationBarTitleText
- Python强大的自省简析
- javascript . 05 json的组成、for...in 遍历对象、简单数据类型与复杂数据类型的传值与传址、内置对象
- APP测试点归纳
- Mycat 分片规则详解--枚举分片
- 纪念 参与GitHub上第一个组织
- 【转】maven跳过单元测试-maven.test.skip和skipTests的区别
- springboot(十三):springboot结合mybatis generator逆向工程自动生成代码
- hdu1890 splay维护区间翻转
- BigDecimal提供了8种舍入方式
- webpack使用五
- Elasticsearch 5.2.x 使用 Head 插件连接不上集群