特殊设备文件

stdev是设备号,分为主次设备号:

major(buf.st_dev) //主设备号
minor(buf.st_dev) //次设备号

主设备号表示设备驱动程序,而次设备号表示特定的子设备。比如在同一个磁盘上面 不同的文件系统,设备驱动程序相当,但是次设备号不同。

strdev只有字符特殊文件和块特殊文件才有这个值,表示实际设备的设备编号。

#include <sys/types.h>
#include <sys/stat.h>
#include <cstdio>
int main(int argc,char * const* argv){
    for(int i=1;i<argc;i++){
        struct stat buf;
        stat(argv[i],&buf);
        printf("%s dev=%d/%d",argv[i],
               major(buf.st_dev),minor(buf.st_dev));
        if(S_ISCHR(buf.st_mode) || S_ISBLK(buf.st_mode)){
            if(S_ISCHR(buf.st_mode)){
                printf(" (character)");
            }else if(S_ISBLK(buf.st_mode)){
                printf(" (block)");
            }
            printf(" rdev=%d/%d",
                   major(buf.st_rdev),minor(buf.st_rdev));
        }
        printf("\n");
    }
    return 0;
}
[[email protected]]$ mount
/dev/mapper/VolGroup00-LogVol00 on / type ext3 (rw)
proc on /proc type proc (rw)
sysfs on /sys type sysfs (rw)
devpts on /dev/pts type devpts (rw,gid=5,mode=620)
/dev/sda1 on /boot type ext3 (rw)
tmpfs on /dev/shm type tmpfs (rw)
none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw)
sunrpc on /var/lib/nfs/rpc_pipefs type rpc_pipefs (rw)
[[email protected]]$ df
Filesystem           1K-blocks      Used Available Use% Mounted on
/dev/mapper/VolGroup00-LogVol00
                      19552940   2649028  15894660  15% /
/dev/sda1               194442     12450    171953   7% /boot
tmpfs                   127628         0    127628   0% /dev/shm
[[email protected]]$ ./main /boot/ /dev/shm /tmp /home /dev/cdrom /dev/tty0 
/boot/ dev=8/1
/dev/shm dev=0/18
/tmp dev=253/0
/home dev=253/0
/dev/cdrom dev=0/16 (block) rdev=11/0
/dev/tty0 dev=0/16 (character) rdev=4/0

TODO(zhangyan04):其实对于设备号这个东西还不是非常地了解,认识有待加深。




你可能感兴趣的:(特殊设备文件)