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
有帮助吗?

解决方案

尝试打印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位,这使得您将其打印为long long有点可疑。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top