读书人

《UNIX环境高级编程》札记-文件类型

发布时间: 2013-10-08 16:55:16 作者: rapoo

《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对象的类型。

《UNIX环境高级编程》札记-文件类型

上述宏的参数是结构体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.

读书人网 >编程

热点推荐