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

结果如上图所示

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值