码迷,mamicode.com
首页 > 其他好文 > 详细

十六、文件和目录——设备特殊文件

时间:2018-05-23 22:44:35      阅读:207      评论:0      收藏:0      [点我收藏+]

标签:void   lstat   bubuko   %s   amp   文件系统   sage   ems   sign   

16.1 设备特殊文件介绍

  • 每个文件系统所在的存储设备都由主、次设备号表示,文件系统为设备文件
  • major 和 minor 这两个宏可用来获得主、次设备号。所有文件都由对应的主设备号和次设备号,可以通过 st_dev 加这两个宏获得
  • 只有字符特殊文件和块特殊文件俺才有 st_rdev 值,其他的设备一般都是 st_dev ,这个两个值都在 stat 结构体中

  技术分享图片

  8 为主设备号,1为次设备号

16.2 例子

  

 1 #include <unistd.h>
 2 #include <fcntl.h>
 3 #include <string.h>
 4 #include <stdlib.h>
 5 #include <stdio.h>
 6 #include <sys/stat.h>
 7 #include <memory.h>
 8 
 9 
10 void out_dev(unsigned long devno)
11 {
12     //生成主设备号和次设备号
13     int mj = major(devno);
14     int mi = minor(devno);
15     printf("(%5d, %5d)\n", mj, mi);
16 }
17 
18 int main(int argc, char *argv[])
19 {
20     if(argc < 2) {
21         fprintf(stderr, "usage: %s files\n", argv[0]);
22         exit(1);
23     }
24 
25     struct stat buff;
26     int i;
27     for(i = 1; i < argc; i++) {
28         memset(&buff, 0, sizeof(buff));
29         //获取文件属性信息
30         if(lstat(argv[i], &buff) < 0) {
31             perror("lstat error");
32             continue;
33         }
34         printf("%-20s", argv[i]);
35 
36         //判断是否是字符设备文件和块设备文件
37         if(S_ISCHR(buff.st_mode) || S_ISBLK(buff.st_mode)) {
38             //输出特殊设备文件具有的特殊设备号(包括主、次设备号)
39             //字符设备和块设备文件
40             out_dev(buff.st_rdev);
41         }
42 
43         printf("    on:");
44         
45         //输出所有文件都具有的设备号(包括主次设备号)
46         out_dev(buff.st_dev);
47     }
48 
49     return 0;
50 }

  技术分享图片

 

十六、文件和目录——设备特殊文件

标签:void   lstat   bubuko   %s   amp   文件系统   sage   ems   sign   

原文地址:https://www.cnblogs.com/kele-dad/p/9080030.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!