我正在编写自己版本的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$
修饰符之一,则必须(应该)在每个转换规范中使用它。