标签:soc name sizeof set nis des ima [] sch
文件属性都存放在 stat 结构体中
1 #include <asm/stat.h> 2 struct stat { 3 unsigned long st_dev; /* 磁盘分区上的设备编号,主要用于驱动开发 */ 4 unsigned long st_ino; /* 文件 i-node 号 */ 5 unsigned int st_mode; /* 文件类型和权限。如 O_WRONLY */ 6 unsigned int st_nlink; /* 链接数量 */ 7 unsigned int st_uid; /* 文件所有者的用户 ID */ 8 unsigned int st_gid; /* 文件所有组的组 ID */ 9 unsigned long st_rdev; /* 如果是真实设备的话,为真实设备号 */ 10 unsigned long __pad1; 11 long st_size; /* 文件大小,单位为 bytes */ 12 int st_blksize; /* I/O 操作中的块的大小,即磁盘块的大小 */ 13 int __pad2; 14 long st_blocks; /* 分配的 512 字节磁盘块的数量 */ 15 long st_atime; /* 最后一次次访问时间 */ 16 unsigned long st_atime_nsec; 17 long st_mtime; /* 最后一次的修改时间 */ 18 unsigned long st_mtime_nsec; 19 long st_ctime; /* 最后一次的文件状态改变时间 */ 20 unsigned long st_ctime_nsec; 21 unsigned int __unused4; 22 unsigned int __unused5; 23 };
获取文件属性:
1 #include <sys/stat.h> 2 #include <unistd.h> 3 int stat(const char * file_name,struct stat *buf); //取得文件状态 4 int fstat(int fd, struct stat *buf); //由文件描述符取得文件状态 5 int lstat (const char * file_name, struct stat * buf); //由文件描述符取得文件状态
分析指定文件类型
file_type.c
1 #include <sys/types.h> 2 #include <sys/stat.h> 3 #include <fcntl.h> 4 #include <unistd.h> 5 #include <string.h> 6 #include <errno.h> 7 #include <stdlib.h> 8 #include <stdio.h> 9 10 int main(int argc, const char *argv[]) 11 { 12 if(argc < 2) { 13 fprintf(stderr, "usage: %s files\n", argv[0]); 14 exit(1); 15 } 16 17 int i; 18 struct stat buff; 19 20 for(i = 1; i < argc; i++) { 21 memset(&buff, 0, sizeof(buff)); 22 23 if(lstat(argv[i], &buff) < 0) { 24 perror("lstat error"); 25 continue; 26 } 27 28 printf("%-20s", argv[i]); 29 30 //判断文件是何种类型 31 if(S_ISREG(buff.st_mode)) { 32 printf("regular file"); 33 } else if(S_ISDIR(buff.st_mode)) { 34 printf("directory"); 35 } else if(S_ISBLK(buff.st_mode)) { 36 printf("block file"); 37 } else if(S_ISCHR(buff.st_mode)) { 38 printf("character file"); 39 } else if(S_ISFIFO(buff.st_mode)) { 40 printf("named pipe"); 41 } else if(S_ISSOCK(buff.st_mode)) { 42 printf("socket"); 43 } else if(S_ISLNK(buff.st_mode)) { 44 printf("symbolic link"); 45 } else { 46 printf("unknown file type"); 47 } 48 49 printf("\n"); 50 } 51 52 return 0; 53 }
编译执行:
file_perm.c
1 #include <sys/types.h> 2 #include <sys/stat.h> 3 #include <fcntl.h> 4 #include <unistd.h> 5 #include <string.h> 6 #include <errno.h> 7 #include <stdlib.h> 8 #include <stdio.h> 9 10 int main(int argc, const char *argv[]) 11 { 12 if(argc < 2) { 13 fprintf(stderr, "usage: %s files\n", argv[0]); 14 exit(1); 15 } 16 17 struct stat buff; 18 int i; 19 20 for(i = 1; i < argc; i++) { 21 memset(&buff, 0, sizeof(buff)); 22 if(lstat(argv[0], &buff) < 0) { 23 perror("lstat error"); 24 continue; 25 } 26 27 28 //获得文件的权限信息 29 mode_t mode = buff.st_mode; 30 printf("%-20s", argv[i]); 31 32 // user permission 33 if(S_IRUSR & mode) { 34 printf("r"); 35 } else { 36 printf("-"); 37 } 38 39 if(S_IWUSR & mode) { 40 printf("w"); 41 } else { 42 printf("-"); 43 } 44 45 if(S_IXUSR & mode) { 46 printf("x"); 47 } else { 48 printf("-"); 49 } 50 51 //group permission 52 if(S_IRGRP & mode) { 53 printf("r"); 54 } else { 55 printf("-"); 56 } 57 58 if(S_IWGRP & mode) { 59 printf("w"); 60 } else { 61 printf("-"); 62 } 63 64 if(S_IXGRP & mode) { 65 printf("x"); 66 } else { 67 printf("-"); 68 } 69 70 //other permission 71 if(S_IROTH & mode) { 72 printf("r"); 73 } else { 74 printf("-"); 75 } 76 77 if(S_IWOTH & mode) { 78 printf("w"); 79 } else { 80 printf("-"); 81 } 82 83 if(S_IXOTH & mode) { 84 printf("x"); 85 } else { 86 printf("-"); 87 } 88 89 90 printf("\n"); 91 } 92 93 return 0; 94 }
编译执行
标签:soc name sizeof set nis des ima [] sch
原文地址:https://www.cnblogs.com/kele-dad/p/9058624.html