文件管理--文件类型

linux环境下有7种文件:

1.普通文件,包括文本文件和二进制可执行文件。

2.目录文件

3.块特殊文件,这是对代缓冲的设备的抽象

4.字符特殊文件,这是对不带缓冲的设备的抽象。linux的设备不是块设备就是字符设备

5.命名管道(named pipe,FIFO)

6.符号链接

7.套接字,用于网络进程之间通信的一种文件

 

 

linux提供一系列宏来判断文件的类型。

 

对应的宏                   文件类型

S_ISREG()               普通文件

S_ISDIR()                目录文件

S_ISCHR()               字符特殊文件

S_ISBLK()                块特殊文件

S_ISFIFO()              命名管道

S_ISLNK()               符号链接

S_ISSOCK()             套接字

 

使用上述宏时,将stat结构中的st_mode传进去即可。

 

范例:

//de.c

#include <stdio.h>
#include <stdlib.h>
#include <sys/stat.h>

int main(int argc, char * argv[])
{
    char *str;
    int i;
    struct stat buf; /* 存储文件状态信息 */
   
    for(i = 1; i < argc; i++){
        printf("%s ", argv[i]);

        if(stat(argv[i], &buf) == -1){ /* 得到文件的状态 */
            perror("fail to stat");
            continue;
        }

        if(S_ISREG(buf.st_mode)) /* 普通文件 */
            printf("regular file /n");
        else if(S_ISDIR(buf.st_mode)) /* 目录文件 */
            printf( "directory file/n");
        else if(S_ISCHR(buf.st_mode)) /* 字符特殊文件 */
            printf( "character special file/n");
        else if(S_ISBLK(buf.st_mode)) /* 块特殊文件 */
            printf( "block special file/n");
        else if(S_ISFIFO(buf.st_mode)) /*命名管道文件 */
            printf( "FIFO file/n");
        else if(S_ISSOCK(buf.st_mode)) /* 套接字文件 */
            printf( "socket file/n");
        else if(S_ISLNK(buf.st_mode)) /* 符号链接文件 */
            printf( "symbolic link file/n");
        else /* 未知类型 */
            printf( "unkonw/n");
}
   
      return 0;
}

 

 

你可能感兴趣的:(linux,socket,struct,File,存储,character)