我正在编写自己版本的stat命令,并且很难获得Device字段的正确输出。
当我对工作目录中的空文件运行Linuxstat命令时,我得到:

Device: 801h/2049d

为了复制这个,我试图从stat结构中提取st_dev字段。
但是打印给了我
Device: 801

我错过了结尾的st_dev,我不确定h是从哪里来的。
第一部分只是格式问题吗?我正在以2049d格式打印。我该如何提取hex

最佳答案

由于(十六进制)0x801 == 2049(十进制),您可以从以下位置获取所需的输出:

printf("Device: %xh/%dd\n", st.st_dev, st.st_dev);

格式中的h是出现在h末尾的801h%x表示“十六进制打印数”。类似地,%d表示十进制打印,后面的d表示d中的2049d
顺便说一下,在Linux和其他POSIX平台上,您还可以避免重复st.st_dev参数。例如:
#include <stdio.h>

int main(void)
{
    printf("Device: %1$xh/%1$dd\n", 0x801);
    return 0;
}

这也会产生:
Device: 801h/2049d

要了解原因,请阅读printf()
规格非常仔细。注意,如果使用1$修饰符之一,则必须(应该)在每个转换规范中使用它。

08-26 14:20