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