使用stat (/usr/include/sys/stat.h)系统调用,接口如下:
stat (__const char *__path, struct stat *__statbuf)
得到的信息在stat结构体中:
struct stat { __dev_t st_dev; /* Device. */ #if __WORDSIZE == 32 unsigned short int __pad1; #endif #if __WORDSIZE == 64 || !defined __USE_FILE_OFFSET64 __ino_t st_ino; /* File serial number. */ #else __ino_t __st_ino; /* 32bit file serial number. */ #endif #if __WORDSIZE == 32 __mode_t st_mode; /* File mode. */ __nlink_t st_nlink; /* Link count. */ #else __nlink_t st_nlink; /* Link count. */ __mode_t st_mode; /* File mode. */ #endif __uid_t st_uid; /* User ID of the file's owner. */ __gid_t st_gid; /* Group ID of the file's group.*/ #if __WORDSIZE == 64 int pad0; #endif __dev_t st_rdev; /* Device number, if device. */ #if __WORDSIZE == 32 unsigned short int __pad2; #endif #if __WORDSIZE == 64 || !defined __USE_FILE_OFFSET64 __off_t st_size; /* Size of file, in bytes. */ #else __off64_t st_size; /* Size of file, in bytes. */ #endif __blksize_t st_blksize; /* Optimal block size for I/O. */ #if __WORDSIZE == 64 || !defined __USE_FILE_OFFSET64 __blkcnt_t st_blocks; /* Number 512-byte blocks allocated. */ #else __blkcnt64_t st_blocks; /* Number 512-byte blocks allocated. */ #endif #ifdef __USE_MISC /* Nanosecond resolution timestamps are stored in a format equivalent to 'struct timespec'. This is the type used whenever possible but the Unix namespace rules do not allow the identifier 'timespec' to appear in the <sys/stat.h> header. Therefore we have to handle the use of this header in strictly standard-compliant sources special. */ struct timespec st_atim; /* Time of last access. */ struct timespec st_mtim; /* Time of last modification. */ struct timespec st_ctim; /* Time of last status change. */ # define st_atime st_atim.tv_sec /* Backward compatibility. */ # define st_mtime st_mtim.tv_sec # define st_ctime st_ctim.tv_sec #else __time_t st_atime; /* Time of last access. */ unsigned long int st_atimensec; /* Nscecs of last access. */ __time_t st_mtime; /* Time of last modification. */ unsigned long int st_mtimensec; /* Nsecs of last modification. */ __time_t st_ctime; /* Time of last status change. */ unsigned long int st_ctimensec; /* Nsecs of last status change. */ #endif #if __WORDSIZE == 64 long int __unused[3]; #else # ifndef __USE_FILE_OFFSET64 unsigned long int __unused4; unsigned long int __unused5; # else __ino64_t st_ino; /* File serial number. */ # endif #endif };
成员变量好多~
不要慌,st_rdev 就是需要设备文件对应的设备号了。
要得到主设备号&此设备号,需要使用<linux/kdev_t.h>中定义的宏:
MAJOR() 得到主设备号
MINOR() 得到次设备号
作者:ziziwu 发表于2011-10-17 19:54:29
原文链接
阅读:26 评论:0
查看评论