Как я могу получить размер сектора файловой системы из unix / linux / osx и windows? - PullRequest
4 голосов
/ 12 января 2010

Я хочу иметь возможность определить во время выполнения, каков размер сектора для данной файловой системы. Код C приемлем. например, я форматирую свои разделы данных с размером сектора 32 КБ, в котором много больших видеофайлов Я хочу иметь возможность получить это значение во время выполнения.

Ответы [ 3 ]

4 голосов
/ 12 января 2010

Я думаю, что вы хотите statvfs (если под размером страницы вы подразумеваете размер сектора?), Который, насколько я помню, работает под Linux и OSX. Я думаю, вам нужно использовать поле f_bsize, но, к сожалению, у меня нет linux-бокса для тестирования на atm.

Для окон вам нужна функция GetDiskFreeSpace .

2 голосов
/ 12 января 2010

В Windows вызовите функцию GetSystemInfo ()

void WINAPI GetSystemInfo(
  __out  LPSYSTEM_INFO lpSystemInfo
);

Затем получите доступ к значению dwPageSize в возвращенной структуре SYSTEM_INFO . Этот размер гарантированно дает выравнивание страницы файловой системы. Например, используйте этот размер для чтения и записи файлов в небуферизованном режиме.

Если вам нужен размер сектора объема, просто вызовите функцию GetDiskFreeSpace () , затем прочитайте значение lpBytesPerSector.

2 голосов
/ 12 января 2010
#include <stdlib.h>
#include <stdint.h>
#include <unistd.h>

int main(int argc, char *argv[])
{
        int page_size = getpagesize();
        printf("The page size is %d\n", page_size);
        exit(0);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...