十6、文件和目錄——設備特殊文件

16.1 設備特殊文件介紹

  • 每一個文件系統所在的存儲設備都由主、次設備號表示,文件系統爲設備文件
  • major 和 minor 這兩個宏可用來得到主、次設備號。全部文件都由對應的主設備號和次設備號,能夠經過 st_dev 加這兩個宏得到
  • 只有字符特殊文件和塊特殊文件俺纔有 st_rdev 值,其餘的設備通常都是 st_dev ,這個兩個值都在 stat 結構體中

  

  8 爲主設備號,1爲次設備號spa

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 }

  

相關文章
相關標籤/搜索