Как получить имя и размер файловой системы в C? - PullRequest
2 голосов
/ 14 апреля 2020

Я передаю файл или каталог моей Unix C программе и хочу определить, к какой файловой системе она принадлежит и каков ее размер. Я пытался использовать getmntent() из mntent.h и некоторые функции из fstab.h, но безуспешно. Есть ли какой-нибудь способ сделать это вообще?

Редактировать: Я имел в виду, не случайно, что, например, при использовании getmntent() поле mnt_type было пустым. Я использовал это так:

struct mntent* storage = getmntent(fopen(argv[1], "r"));
if(storage) printf("File system type: %s\n", storage->mnt_type);

и с помощью fstab.h всегда возвращал NULL.

РЕДАКТИРОВАТЬ 2:

struct statvfs* statisticVfs = malloc(sizeof(struct statvfs));
rtrn = statvfs(argv[1], statisticVfs);
if(rtrn != -1)
{
    printf("Block size: %lu\n", statisticVfs->f_bsize);
    FILE* myFile = fopen(argv[1], "r");
    if(myFile) puts("Opened!");
    struct mntent* storage = getmntent(myFile);
    if(storage) printf("Type: %s\n", storage->mnt_type);
}
else puts("Error when using statvfs!");

1 Ответ

1 голос
/ 15 апреля 2020

Вы можете имитировать c поведение команды coreutil stat (например, stat -f -c "Blocks:%b Type:%T" $FILENAME), чтобы получить информацию. По сути, он делает statfs(2) файл и анализирует детали. Вы можете сравнить (statfsbuf->f_type) со списком дел и получить тип файловой системы. См. Список для stat.c, чтобы понять, что он делает.

...