Воспроизведение команды Linux stat в C
Я пишу свою собственную версию команды stat, и мне трудно получить правильный вывод для Device
поле.
Когда я запускаю Linux stat
Команда на пустой файл в рабочем каталоге я получаю:
Device: 801h/2049d
Чтобы повторить это, я попытался извлечь из stat
структура, st_dev
поле.
Но печать st_dev
дает мне
Device: 801
Я скучаю по h
в конце, и я не уверен, где 2049d
происходит от.
Первая часть - просто проблема форматирования? Я печатаю в hex
формат. И как я могу извлечь 2049d
?
1 ответ
С (шестнадцатеричное) 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$
модификаторы, вы должны (должны) использовать его с каждой спецификацией преобразования.