#c #c #linux
#c #c #linux
Вопрос:
Я хочу определить размер файла на диске в ОС Linux. Я знаю команду для этого: du -s -h
Есть ли какой-либо способ найти его с помощью кода c / c ?
Комментарии:
1. Насколько я понимаю, поскольку жесткий диск является блочным устройством, поэтому, хотя я записываю всего 10 байт в файл, ядро выделит блоки для файла в терминах block_size .т.е. (512 байт) . Предположим, что общий размер диска составляет 1 КБ, и мы создали 2 файла по 10 байт каждый, тогда диск заполнен или нет? Я прав?
2. В Linux большинство файловых систем используют размер блока 4 КБ (то есть каждый блок fs состоит из 8 блоков по 512 байт на устройстве), поэтому никакие блоки не поместятся в файловой системе размером 1 КБ (без учета накладных расходов на метаданные и т.д.).
3. я знаю это, у меня есть только 1 КБ для примера. спасибо, я получил свой ответ.
Ответ №1:
Да, используйте stat(2)
системный вызов:
#include <sys/stat.h>
...
struct stat statbuf;
if (stat("file.dat", amp;statbuf) == -1) {
/* check the value of errno */
}
printf("%9jd", (intmax_t) statbuf.st_size);
Комментарии:
1. Обратите внимание, что для получения фактического размера диска вам нужно посмотреть на st_blocks* 512, а не на st_size
2. статистика не дает того же размера, который дает du -s -h file.dat.
3. @Ashish: st_size — это размер файла, то есть количество байт, которые он содержит. Объем пространства, которое файл занимает на диске, задается с помощью st_blocks*512, как упоминал Хастуркун; это размер, который использует ‘du’.