wintree的专栏

专注于Linux系统编程,网络编程,高性能服务器技术,c/c++技术学习

unix环境高级编程-4.3-文件类型

我们都知道在unix系统中,文件分为两种--------普通文件和目录。unix大多数都是这些文件类型。但是也有另外一种。

下面简单介绍一下文件类型:

(1)普通文件。最常见的文件类型。

(2)目录文件。这种文件包含了其他文件的名字以及指向与这些文件有关的信息指针。对一个目录文件具有读权限的任一进程都可以读该目录的内容,但只有内核可以直接写目录文件。

(3)块特殊文件。这种文件类型提供对设备的带缓冲的访问。每次访问以固定的长度为单位进行。

(4)字符特殊文件。这种文件为不带缓冲的文件。

(5)FIFO.这种文件用于进程间通信。有时候也将其命名为管道。

(6)套接字。这种文件用于进程间网络通信。

(7)符号链接。这种文件类型指向另一个文件。

表 <sys/stat.h> 中的文件类型宏

S_ISREG()                   普通文本
S_ISDIR()                      目录文本
S_ISCHR() 字符特殊文本
S_ISBLK()                      块特殊文本
S_ISFIFO() 管道或fifo
S_ISLNK()                      符号连接
S_ISSOCK()                   套接字

 

<sys/stat.h>中的IPC类型宏

S_TYPEISMQ()表示消息队列; S_TYPEISSEM()表示信号量 ; S_TYPEISSHM()表示共享存储对象.

实例

下面的程序取其命令行参数然后针对每个命令行参数打印其文件类型。

 

#include "apue.h"

  int main(int argc,char* argv[])
  {
    int   i;
    struct stat buf;
    char* ptr;

    for(i=1;i<argc;i++)
    {
        printf("%s: ",argv[i]);
        if(lstat(argv[i],&buf)<0)
        {
            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="SYMBOLOC LINK";
        else if(S_ISSOCK(buf.st_mode))
            ptr="directory";
        else if(S_ISDIR(buf.st_mode))
            ptr="SORCKET";
        else
            ptr="**unknown mode***";
        printf("%s\n",ptr);

    }
    exit(0);
}

结果如上图所示

今天就说到这里。今天打球了,很累。。回去休息了~明天再战。

阅读更多
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/wallwind/article/details/6886290
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭