linux系统编程之文件与I/O(四):文件的属性
2016-06-18 15:07
555 查看
#include<sys/types.h> #include<sys/stat.h> #include<unistd.h> #include<fcntl.h> #include<stdio.h> #include<stdlib.h> #include<errno.h> #include<string.h> #define ERR_EXIT(m) \ do { \ perror(m); \ exit(EXIT_FAILURE); \ } while(0) #define MAJOR(a) (int)((unsigned short)a >> 8) // 高8位,主设备号 #define MINOR(a) (int)((unsigned short)a & 0xFF) int filetype(struct stat *buf) { int flag = 0; printf("Filetype:"); mode_t mode; mode = buf->st_mode; switch (mode & S_IFMT) { case S_IFSOCK: printf("socket\n"); break; case S_IFLNK: printf("symbolic link\n"); break; case S_IFREG: printf("regular file\n"); break; case S_IFBLK: printf("block device\n"); flag = 1; break; case S_IFDIR: printf("directory\n"); break; case S_IFCHR: printf("character device\n"); flag = 1; break; case S_IFIFO: printf("FIFO\n"); break; default: printf("unknown file type\n"); break; } return flag; } void fileperm(struct stat *buf, char perm []) { strcpy(perm, "----------"); perm[0] = '?'; mode_t mode; mode = buf->st_mode; switch (mode & S_IFMT) { case S_IFSOCK: perm[0] = 's'; break; case S_IFLNK: perm[0] = 'l'; break; case S_IFREG: perm[0] = '-'; break; case S_IFBLK: perm[0] = 'b'; break; case S_IFDIR: perm[0] = 'd'; break; case S_IFCHR: perm[0] = 'c'; break; case S_IFIFO: perm[0] = 'p'; break; } if (mode & S_IRUSR) perm[1] = 'r'; if (mode & S_IWUSR) perm[2] = 'w'; if (mode & S_IXUSR) perm[3] = 'x'; if (mode & S_IRGRP) perm[4] = 'r'; if (mode & S_IWGRP) perm[5] = 'w'; if (mode & S_IXGRP) perm[6] = 'x'; if (mode & S_IROTH) perm[7] = 'r'; if (mode & S_IWOTH) perm[8] = 'w'; if (mode & S_IXOTH) perm[9] = 'x'; perm[10] = '\0'; } int main(int argc, char *argv []) { printf("Filename:%s\n", "test.txt"); struct stat sbuf; if (lstat("test.txt", &sbuf) == -1) ERR_EXIT("stat error"); printf("file in Dev number:major %d, minor %d\n", MAJOR(sbuf.st_dev), MINOR(sbuf.st_dev)); printf("File inode:%d\n", (int) sbuf.st_ino); if (filetype(&sbuf)) { printf("Device number:major %d, minor %d\n", MAJOR(sbuf.st_rdev), MINOR(sbuf.st_rdev)); } char perm[11] = {0}; fileperm(&sbuf, perm); printf("File permission bits=%o %s\n", sbuf.st_mode & 0777, perm); // 0777 是八进制数 return 0; } /* Filename:test.txt file in Dev number:major 253, minor 0 File inode:901535 Filetype:regular file File permission bits=644 -rw-r--r-- */
相关文章推荐
- centos6.5 MySQL安全模式修改Root 密码
- linux系统系动参数
- linux系统编程之文件与I/O(三):目录的操作
- 【Linux编程】多线程与多进程的区别
- linux系统编程之文件与I/O(二):文件的读取写入
- linux系统编程之文件与I/O(一):文件的打开关闭
- 用 Python 脚本实现对 Linux 服务器的监控
- 如何提高Linux下块设备IO的整体性能?
- Linux内核-抢占
- centos 6.5下安装、配置并启动SSH远程访问
- linux入门-cpu种类
- Linux共享库(动态库)与进程之间全局变量是无法共享的
- linux 粘贴位t
- 纯命令行linux系统下查看日志, 修改文件的方法
- 完美解决 Linux 下 Sublime Text 中文输入
- 配置 yum 源--怎么也配置不好,最后选择配置本地yum源
- split large file linux
- Linux 创建本地YUM Repo
- 负载均衡集群HAProxy讲解篇
- 详细介绍Linux硬盘挂载步骤(一)