dev_t和ino_t是否必须是整数类型?

Joh*_*all 6 c standards posix libc

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);
}
Run Code Online (Sandbox Code Playgroud)

便携.

usr*_*usr 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);
Run Code Online (Sandbox Code Playgroud)

否则,您的代码是安全的.