设备特殊文件

st_dev和st_rdev:

每个文件系统所在的存储设备都由主、次设备号表示。

设备号所用的数据类型是基本系统数据类型dev_t。

主设备号标识设备驱动程序,有时编码为与其通信的外设板;次设备号标识特定的子设备。

例如,磁盘驱动器经常包含若干个文件系统。

在同一磁盘驱动器上的各文件系统通常具有相同的主设备号,但它们的次设备号却不同。

我们通常可以使用两个宏,即major和minor来访问主、次设备号,大多数实现都定义了这两个宏。

Linux将宏major和minor定义在头文件<sys/sysmacros.h>中,而该头文件又包括在<sys/type.h>中

#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_dev))
    {
    printf(" (%s) rdev=%d/%d",
    (S_ISCHR(buf.st_mode)) ? "character":"block",
    major(buf.st_rdev),minor(buf.st_rdev));

    }
  printf(" ");

  }
  exit(0);
  }

原文地址:https://www.cnblogs.com/hezhangyear/p/4031966.html