首页 > 其他 > 详细

stat中的st_dev和st_rdev

时间:2019-11-27 22:17:31      阅读:520      评论:0      收藏:0      [点我收藏+]

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);
}

stat中的st_dev和st_rdev

原文:https://www.cnblogs.com/zongzi10010/p/11945545.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!