1.Linux中stat结构体包含了一个文件的各种属性。
struct stat {
dev_t st_dev; //文件的设备编号
ino_t st_ino; //节点
mode_t st_mode; //文件的类型和存取的权限
nlink_t st_nlink; //连到该文件的硬连接数目,刚建立的文件值为1
uid_t st_uid; //用户ID
gid_t st_gid; //组ID
dev_t st_rdev; //(设备类型)若此文件为设备文件,则为其设备编号
off_t st_size; //文件字节数(文件大小)
unsigned long st_blksize; //块大小(文件系统的I/O 缓冲区大小)
unsigned long st_blocks; //块数
time_t st_atime; //最后一次访问时间
time_t st_mtime; //最后一次修改时间
time_t st_ctime; //最后一次改变时间(指属性)
};
2.Linux中文件的类型
一般有7种类型:
普通文件 目录文件 字符设备文件 块设备文件 链接文件 管道文件 Socket文件
利用lstat函数来显示不同文件类型,注意lstat与stat函数不同,stat函数不能检测出链接文件;
测试程序:
| 1 #include <stdio.h> | 2 #include <stdlib.h> | 3 #include <unistd.h> | 4 #include <sys/stat.h> | 5 | 6 int main(int argc, char **argv) | 7 { | 8 int i; | 9 char *pInfo; | 10 struct stat stBuf; | 11 | 12 if(argc < 2) | 13 { | 14 printf("Usage:./test xxx xxx xxx\n"); | 15 exit(-1); | 16 } | 17 | 18 for(i=1; i<argc; i++) | 19 { | 20 printf("%s\n", argv[i]); | 21 if(lstat(argv[i], &stBuf) < 0) | 22 { | 23 perror("Open File error"); | 24 continue; | 25 } | 26 if(S_ISREG(stBuf.st_mode)) | 27 pInfo = "Regular"; | 28 else if(S_ISDIR(stBuf.st_mode)) | 29 pInfo = "Directory"; | 30 else if(S_ISCHR(stBuf.st_mode)) | 31 pInfo = "Char special"; | 32 else if(S_ISBLK(stBuf.st_mode)) | 33 pInfo = "Block special"; | 34 else if(S_ISFIFO(stBuf.st_mode)) | 35 pInfo = "Fifo"; | 36 else if(S_ISLNK(stBuf.st_mode)) | 37 pInfo = "Link"; | 38 else if(S_ISSOCK(stBuf.st_mode)) | 39 pInfo = "Socket"; | 40 else | 41 pInfo = "**Unknown Type**"; | 42 | 43 printf("%s file\n\n", pInfo); | 44 } | 45 | 46 return 0; | 47 }
测试命令:./test test /home/ /dev/log /dev/tty /dev/sda /dev/scd0
测试结果:
test
Regular file
/home/
Directory file
/dev/log
Socket file
/dev/tty
Char special file
/dev/sda
Block special file
/dev/scd0
Link file
Linux系统编程_3_文件属性