glibc的文档保持它们是整数类型(不比unsigned int窄),但是我没有找到一个标准引用,它说它们必须是整数类型(参见time_t)。
所以最后,问题变成了:是
#include <stdio.h>
#include <stdint.h>
struct stat st;
if (stat("somefile", &st) == 0) {
printf("%ju %ju\n", (uintmax_t)st.st_dev, (uintmax_t)st.st_ino);
}
便携式的。
答案 0 :(得分:6)
POSIX标准要求dev_t
为整数类型,ino_t
为无符号整数。
dev_t应为整数类型。
fsblkcnt_t,fsfilcnt_t和ino_t应定义为无符号整数 类型。
由于intmax_t
和uintmax_t
应该是“最大宽度”整数,因此您的代码是安全的。
只是为了确保st_dev
恰好是否定的,你可以把它写成:
printf("%jd %ju\n", (intmax_t)st.st_dev, (uintmax_t)st.st_ino);
否则,您的代码是安全的。
答案 1 :(得分:2)
来自current POSIX specifications:
dev_t 应为整数类型。
[...]
ino_t 应定义为无符号整数类型