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;
}