《UNIX环境高级编程》笔记--文件类型
UNIX文件类型主要包含如下几种:
1.普通文件(regular file)
2.目录文件(directory file)
3.块特殊文件(block special file),这种文件提供对设备(例如硬盘)带缓冲的访问,每次访问以固定长度为单位进行。
4.字符特殊文件(character special file),这种文件提供对设备不带缓冲的访问,每次访问长度可变。
5.FIFO文件,命名管道(named pipe),用于进程间通信。
6.socket文件,用于进程间的网络通信,也可以在同一台机器上进行进程间通信。
7.符号链接文件(symbolic link),指向另外一个文件。
文件类型信息存放在stat结构体的st_mode成员中。stat结构体的声明如下:
posix.1实现允许将进程间通信(IPC)对象表示为文件,下面的宏确定可用来确定IPC对象的类型。
上述宏的参数是结构体stat。
那么如何才能获取stat结构体呢,使用下面三个函数:
#include <stdio.h>#include <sys/stat.h>int main(int argc, char * argv[]){ struct stat buf; if(argc != 2){ printf("you must specify one parameter.\n"); return -1; } if(stat(argv[1],&buf) < 0){ perror("stat"); return -1; } if(S_ISREG(buf.st_mode)){ printf("regular.\n"); }else if(S_ISDIR(buf.st_mode)){ printf("directory.\n"); }else if(S_ISBLK(buf.st_mode)){ printf("block.\n"); }else if(S_ISLNK(buf.st_mode)){ printf("symbolic link.\n"); } return 0;}运行结果:yan@yan-vm:~/apue$ ll /etc/init.d/acpid
lrwxrwxrwx 1 root root 21 Apr 12 20:33 /etc/init.d/acpid -> /lib/init/upstart-job*
yan@yan-vm:~/apue$ ./a.out /etc/init.d/acpid
regular.
如果将stat修改为lstat,结果如下:
yan@yan-vm:~/apue$ ll /etc/init.d/acpid
lrwxrwxrwx 1 root root 21 Apr 12 20:33 /etc/init.d/acpid -> /lib/init/upstart-job*
yan@yan-vm:~/apue$ ./a.out /etc/init.d/acpid
symbolic link.