Chinaunix首页 | 论坛 | 博客
  • 博客访问: 398960
  • 博文数量: 75
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 645
  • 用 户 组: 普通用户
  • 注册时间: 2015-06-03 18:24
文章分类

全部博文(75)

文章存档

2019年(1)

2018年(20)

2017年(14)

2016年(10)

2015年(30)

分类: LINUX

2015-11-25 20:55:03

linux下有下面7种文件类型:
1、普通文件:
        这是最常见的文件类型,我们写的.c文件、可执行的二进制文件都是普通文件。

2、目录文件:
        这个文件包含了其他文件的名字以及指向与这些文件有关的信息。

3、字符设备文件:
        这类文件提供了对设备不带缓冲区的访问,每次访问长度可变。

4、块设备文件:
        这类型的文件提供对设备(如磁盘)带缓冲的访问,每次访问以固定的长度单位进行。

5、FIFO:
        这类文件用于进程间的通信。

6、套接字:
        这类文件用于进程间的网络通信。

7、链接文件:
        这类文件指向于另一个文件。

在linux下想要知道一个文件到底是属于哪种文件类型,直接通过指令ls -l就可以获取

下面我们通过写代码来获取文件的类型:



点击(此处)折叠或打开

  1. #include <stdio.h>
  2. #include <sys/types.h>
  3. #include <sys/stat.h>
  4. #include <unistd.h>
  5. #include <stdlib.h>

  6. int main(int argc,char **argv)
  7. {
  8.     int i;
  9.     struct stat buf;
  10.     int ret_val;
  11.     for(i = 1;i < argc;i++)
  12.     {
  13.         printf("%s:",argv[i]);
  14.         ret_val = lstat(argv[i],&buf);
  15.         if(-1 == ret_val)
  16.         {
  17.             perror("lstat");
  18.             exit(1);
  19.         }

  20.         if(S_ISREG(buf.st_mode))
  21.         {
  22.             printf("regular file\n");
  23.         }
  24.         else if(S_ISDIR(buf.st_mode))
  25.         {
  26.             printf("directory file\n");
  27.         }
  28.         else if(S_ISCHR(buf.st_mode))
  29.         {
  30.             printf("character dev file\n");
  31.         }
  32.         else if(S_ISBLK(buf.st_mode))
  33.         {
  34.             printf("block dev file\n");
  35.         }
  36.         else if(S_ISFIFO(buf.st_mode))
  37.         {
  38.             printf("fifo file\n");
  39.         }
  40.         else if(S_ISLNK(buf.st_mode))
  41.         {
  42.             printf("link file\n");
  43.         }
  44.         else if(S_ISSOCK(buf.st_mode))
  45.         {
  46.             printf("socket file\n");
  47.         }
  48.     }
  49. }

执行结果:








阅读(1565) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~