Документация statfs
выглядит следующим образом:
Statfs () возвращает информацию о смонтированной файловой системе. Путь - это путь к любому файлу в смонтированной файловой системе. Buf - указатель на структуру statfs или statfs64, определенную следующим образом ...
Вы передаете /dev/disk0
в качестве пути, который даст вам размер любой файловой системы, представленной /dev
, которая скорее всего, это что-то вроде devtmpfs. Ваш путь должен быть именем файла или путем в файловой системе, содержащей /dev/disk0
, а не самим блочным устройством.
Для произвольного блочного устройства:
Выпуск IOCTL согласно документации :
int fd = open("/dev/whatever", O_RDONLY);
if(fd < 0) {
// error handling
}
uint64_t count;
if(ioctl(fd, DKIOCGETBLOCKCOUNT, &count) < 0) {
// error handling
}
uint32_t bsize;
if(ioctl(fd, DKIOCGETBLOCKSIZE, &bsize) < 0) {
// error handling
}
return count * bsize;