前言

在之前的文章中,描述过如何用 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 函数。

最新文章

  1. 配置eclipse J2EE环境
  2. Gym - 100917H
  3. C语言学习020:可变参数函数
  4. 以对象的方式来访问xml数据表(三)
  5. 各种兼容的placeholder
  6. 021,lambda 表达式
  7. Spring事务管理使用
  8. collections——高性能容器数据类型
  9. 小程序--改变子级别页面导航栏信息 / navigationBarTitleText
  10. Python强大的自省简析
  11. javascript . 05 json的组成、for...in 遍历对象、简单数据类型与复杂数据类型的传值与传址、内置对象
  12. APP测试点归纳
  13. Mycat 分片规则详解--枚举分片
  14. 纪念 参与GitHub上第一个组织
  15. 【转】maven跳过单元测试-maven.test.skip和skipTests的区别
  16. springboot(十三):springboot结合mybatis generator逆向工程自动生成代码
  17. hdu1890 splay维护区间翻转
  18. BigDecimal提供了8种舍入方式
  19. webpack使用五
  20. Elasticsearch 5.2.x 使用 Head 插件连接不上集群

热门文章

  1. zabbix_get :command not found 解决办法
  2. 【Linux设备驱动程序】Chapter 2 - 构造和运行模块
  3. easyui tree自定义属性用法
  4. angularJS 使用自定义指令输出模板
  5. STM32的IO口灌入电流和输出驱动电流最大是多少?
  6. idea lib下有jar包但是仍然报错 找不到类
  7. redis安装和配置(一)
  8. Memcache集群安装与配置
  9. mysql general log 查看mysql 运行历史
  10. atitit.系统架构图 的设计 与工具 attilax总结