【发布时间】:2016-09-14 15:15:50
【问题描述】:
我的测试程序正在调用stat(2) 以获取文件所在的设备。
stat.c(用cc stat.c -o stat构建)
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include <sys/sysmacros.h>
#include <errno.h>
#include <stdio.h>
#include <string.h>
int main()
{
char *path = "/home/smoku/test.txt";
unsigned int maj, min;
struct stat sb;
if (stat(path, &sb) < 0) {
fprintf(stderr, "Error getting stat for '%s': %d %s\n", path, errno, strerror(errno));
return 1;
}
maj = major(sb.st_dev);
min = minor(sb.st_dev);
fprintf(stderr, "Found '%s' => %u:%u\n", path, maj, min);
return 0;
}
得到0:44
$ ls -l /home/smoku/test.txt
-rw-r--r-- 1 smoku smoku 306 08-30 09:33 /home/smoku/test.txt
$ ./stat
Found '/home/smoku/test.txt' => 0:44
$ /usr/bin/stat -c "%d" /home/smoku/test.txt
44
但是...我的系统中没有这样的设备,/home 是0:35
$ grep /home /proc/self/mountinfo
75 59 0:35 /home /home rw,relatime shared:30 - btrfs /dev/bcache0 rw,ssd,space_cache,subvolid=258,subvol=/home
为什么我的系统中不存在设备 ID?
【问题讨论】:
-
你检查
stat返回什么?它不会返回失败 (-1)? -
@JoachimPileborg ...它很可能会...
-
是的,我做到了。这只是真实程序的摘录。
-
那么请尝试创建一个Minimal, Complete, and Verifiable Example,您可以向我们展示。用那个(不工作的)代码真的不可能说什么。
-
当然。我将代码修复为已满。