stattest.c:
// compile: gcc -o stattest stattest.c
#include <stdio.h>
#include <sys/stat.h>
int main(int argc, char *argv[]) {
struct stat stats;
stat(argv[1], &stats);
printf("%lli\n", (long long)stats.st_dev);
return 0;
}
用法:
stat -f "%r" /dev/disk0 => 234881024 (Value that I'm looking for.) ./teststat /dev/disk0 => 44921876 python -c 'import os,sys; print os.stat(sys.argv[1]).st_dev' /dev/disk0 => 44921876
为什么我的代码没有给我stat
命令给我的值?
更新1
提取主要数字44921876给我2 /dev/tty
。
更新2
指定文件系统上的文件有效。 (我这里只使用python,因为它更快。)
python -c "import sys,os; print os.stat(sys.argv[1]).st_dev" /path/to/file => 234881024
答案 0 :(得分:4)
尝试打印st_rdev
成员。手册页说:
struct stat {
dev_t st_dev; /* device inode resides on */
[ ... snip ... ]
dev_t st_rdev; /* device type, for special file inode */
};
我认为你没有打印%r格式化程序访问的相同字段。您对设备文件所在的设备不感兴趣,但对文件描述的设备不感兴趣。
这些数字至少与您的ls
输出一致; major = 14和minor = 0,打印234881024,十六进制为0xE000000。 0xE当然是14位小数。这表示Mac OS X将主要数字存储在前8位中,次要数字存储在较低的24位中。这反过来意味着dev_t
类型为32位,这使得您将其打印为{ {1}}有点可疑。