title: stat中的st_dev和st_rdev

date: 2019/11/27 21:04:25

toc: true

stat中的st_dev和st_rdev

dev_t     st_dev;         /* ID of device containing file */
dev_t st_rdev; /* Device ID (if special file) */

这两个存的都是主次设备号,都要通过宏majorminor来取出来

  • st_dev 存的是文件本身存储设备的设备号,也就是硬盘的设备号
  • st_rdev是针对驱动的字符设备和块设备文件的主次设备号

看例子,先看下我的硬盘,ls -l看下硬盘设备的设备号

$ df -h
Filesystem Size Used Avail Use% Mounted on
udev 3.9G 0 3.9G 0% /dev
tmpfs 796M 8.7M 787M 2% /run
/dev/sda1 30G 28G 908M 97% /
tmpfs 796M 0 796M 0% /run/user/1000 $ ls -l /dev/sda1
brw-rw---- 1 root disk 8, 1 Nov 18 17:06 /dev/sda1 reallin@ubuntu:/dev$ ls -l /dev/sdb
brw-rw---- 1 root disk 8, 16 Nov 18 17:06 /dev/sdb reallin@ubuntu:/dev$ ls -l /dev/sdb1
brw-rw---- 1 root disk 8, 17 Nov 18 17:06 /dev/sdb1 v$ ls -l /dev/zero
crw-rw-rw- 1 root root 1, 5 Nov 18 17:06 /dev/zero

再来执行程序,查看可以看到确实是第二块硬盘的设备号

> ./devrdev access.c ../
access.c: dev = 8/17
../: dev = 8/17

再看看其他的设备文件,后面的号是字符设备的设备号了,前面那个0-6 也不是我们的主硬盘 不知道是啥情况

/dev/ttyS0: dev = 0/6 (character) rdev = 4/64

/dev/zero: dev = 0/6 (character) rdev = 1/5

附录程序

#include "apue.h"
#ifdef SOLARIS
#include <sys/mkdev.h>
#endif
#include <sys/sysmacros.h>
int
main(int argc, char *argv[])
{
int i;
struct stat buf; for (i = 1; i < argc; i++) {
printf("%s: ", argv[i]);
if (stat(argv[i], &buf) < 0) {
err_ret("stat error");
continue;
} printf("dev = %d/%d", major(buf.st_dev), minor(buf.st_dev)); if (S_ISCHR(buf.st_mode) || S_ISBLK(buf.st_mode)) {
printf(" (%s) rdev = %d/%d",
(S_ISCHR(buf.st_mode)) ? "character" : "block",
major(buf.st_rdev), minor(buf.st_rdev));
}
printf("\n");
} exit(0);
}

最新文章

  1. 目标跟踪之Lukas-Kanade光流法
  2. uva 101 POJ 1208 The Blocks Problem 木块问题 vector模拟
  3. program_options禁止命令行短参数
  4. 域名变更后获取cookie
  5. iOS之RunLoop
  6. 【转】java缩放图片、java裁剪图片代码工具类
  7. 如何用ABP框架快速完成项目(6) - 用ABP一个人快速完成项目(2) - 使用多个成熟控件框架
  8. luogu 1972 小H的项链 莫队
  9. Java基础:整型数组(int[]、Integer[])排序
  10. ImportError: No module named &#39;xml&#39;
  11. 如何将备份的oracle数据库还原到指定用户下。
  12. LaTeX数学公式大全
  13. jsp的两个include了解
  14. 课下测试ch01修改补交
  15. [转帖]Oracle字符集的查看与修改 --- 还未尝试 找个周六 试试.
  16. Scrum 冲刺博客第四篇
  17. 【QT】QString类型转换为const char*(toLatin1)
  18. Transparent Flow Migration for NFV
  19. 【Java】JAVA开发人员常见环境工具安装
  20. 51Nod 1095 Anigram单词 | Hash

热门文章

  1. Rank HDU - 1704 【传递闭包水题】
  2. sql server 的 out 和output
  3. Oracle 进程 前台进程-服务进程
  4. Oracle 物理结构(二) 文件-口令文件
  5. MyBatisPLus入门项目实战各教程目录汇总
  6. 【概率论】4-6:协方差和相关性(Covariance and Correlation)
  7. 第十七节:Runnable创建线程,Thread创建线程,唤醒线程和计数器多线程,线程同步与等待
  8. Eclipse的快捷键设置及使用
  9. sql server解锁表
  10. mac: jenkins+ant+jmeter接口测试