zoukankan      html  css  js  c++  java
  • 第四章:文件类型

    文件类型

    1、普通文件:除了可执行文件,其他的文件对操作系统来说都是无格式的。

    2、目录文件:包含了其他文件的名字 和 指向这些文件的信息的指针的文件。

    3、块特殊文件:这种文件提供了对设备(例如磁盘)的带缓冲的访问。每次访问以固定长度进行。

    4、字符特殊文件:这种文件提供对设备的不带缓冲的访问,每次访问的长度可变。   系统中的所有设备要么是字符特殊文件 要么是 块特殊文件

    5、FIFO  : 这种文件用于进程间的通信,也可以称之为命名管道

    6、套接字  : 这种文件类型用于网络通信 , 也可以用于本机上的进程通信( linux上编译的时候要定义 _GNU_SOURCE宏 )

    7、符号链接:这种类型的文件指向另一个文件

     

    用于判断文件类型的 宏  定义在<sys/stat.h>


               S_ISREG(m) 普通文件?

               S_ISDIR(m)  目录文件?

               S_ISCHR(m) 字符设备?

               S_ISBLK(m)  块设备?

               S_ISFIFO(m) 命名管道?

               S_ISLNK(m)  符号链接?  (Not in POSIX.1-1996.)

               S_ISSOCK(m) 套接字?  (Not in POSIX.1-1996.)
       

       这些宏的参数是struct stat 结构中的st_mode成员

       

     1 #include<stdio.h>
     2 #include<unistd.h>
     3 #include<sys/stat.h>
     4 
     5 int
     6 main(int argc, char** argv)
     7 {
     8         struct  stat    buf;
     9         int             type;
    10         char*   p;
    11 
    12         lstat(argv[1],&buf);  //此处 用 lstat  , 因为 stat 和 fstat 跟随链接 , 这样就不能测试  S_ISLNK(mode)  宏了
    13 
    14         type = buf.st_mode;
    15         if(S_ISREG(type)){
    16                 p = "普通文件";
    17         }else if(S_ISDIR(type)){
    18                 p = "目录文件";
    19         }else if(S_ISCHR(type)){
    20                 p = "字符设备文件";
    21         }else if(S_ISBLK(type)){
    22                 p = "块设备文件";
    23         }else if(S_ISFIFO(type)){
    24                 p = "命名管道文件";
    25         }else if(S_ISLNK(type)){
    26                 p = "链接文件";  // 特指软链接
    27         }else if(S_ISSOCK(type)){
    28                 p = "套接字文件";
    29         }else{
    30                 p = "其他类型文件";
    31         }
    32         printf("%s\n",p);
    33         return  0;
    34 }
    cc  -D__GNU_SOURCE  file_type.c

    这些宏的定义如下
        #define  S_ISXXX(type)  ((type&S_IFMT) == S_IFXXX)
        例如 :
          #define  S_ISDIR(type)  ((type&S_IFMT) == S_IFDIR)

     

     

  • 相关阅读:
    转:测试驱动开发全攻略
    转:如何提高自己的归纳总结能力?
    转:从编译链接过程解析static函数的用法
    C++ 不能在类体外指定关键字static
    转:画图解释 SQL join 语句
    转:[置顶] 从头到尾彻底理解KMP(2014年8月22日版)
    转:The Knuth-Morris-Pratt Algorithm in my own words
    转:数组与指针的区别
    删除单链表中间节点
    如果判断两个单链表有交?第一个交点在哪里?
  • 原文地址:https://www.cnblogs.com/wowk/p/3107879.html
Copyright © 2011-2022 走看看