Как получить размер файла на диске в Linux?

#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’.