The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  вход/выход  слежка  RSS
"Свободное место на НЖМД в linux (sys/statfs)"
Вариант для распечатки  
Пред. тема | След. тема 
Форумы OpenNET: Виртуальная конференция (Public)
Изначальное сообщение [ Отслеживать ]

"Свободное место на НЖМД в linux (sys/statfs)"  
Сообщение от demiurg (ok) on 20-Авг-08, 14:10 
Здравствуйте!

Пытаюсь с помощью statfs получить информацию о свободном месте на файловой системе.

Код такой:
#include <sys/statfs.h>
struct statfs diskFree;
statfs ( diskPartition, &diskFree );
value = diskFree.f_bsize * diskFree.f_bavail;

Переменная diskPartition - путь до смонтированной файловой системы;
Переменная value - возвращенное количество байт свободного места;
Проблема в том что на корневом разделе место определяется правильно (сам раздел 5 гигов, свободного места - 900 мегабайт), но на большом разделе (20 гигабайт) место определяется неправильно (вместо 12 гигабайт возврашается 4 гигабайта).

Подскажите че делать?
Или придется тупо вывод команды df отрабатывать...

Высказать мнение | Ответить | Правка | Cообщить модератору

 Оглавление

Сообщения по теме [Сортировка по времени | RSS]


1. "Свободное место на НЖМД в linux (sys/statfs)"  
Сообщение от Pahanivo email(ok) on 20-Авг-08, 14:48 
>Подскажите че делать?
>Или придется тупо вывод команды df отрабатывать...

дак мож собственно код df глянуть?
и не изобретать велосипед )))

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

2. "Свободное место на НЖМД в linux (sys/statfs)"  
Сообщение от mikra on 20-Авг-08, 16:25 
>[оверквотинг удален]
>
>Переменная diskPartition - путь до смонтированной файловой системы;
>Переменная value - возвращенное количество байт свободного места;
>Проблема в том что на корневом разделе место определяется правильно (сам раздел
>5 гигов, свободного места - 900 мегабайт), но на большом разделе
>(20 гигабайт) место определяется неправильно (вместо 12 гигабайт возврашается 4 гигабайта).
>
>
>Подскажите че делать?
>Или придется тупо вывод команды df отрабатывать...

Товарищ, ты пытаешься не свободное место, а моток колючей проволоки получить от скрещивания ежа с ужом :)

long    f_bsize;    /* optimal transfer block size */

"оптимал трансфер блок сайз" это не тоже самое, что "блок сайз"

Про statvfs читай. И вообще, не принебрегай разделом "see also"

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

3. "Свободное место на НЖМД в linux (sys/statfs)"  
Сообщение от demiurg (ok) on 24-Авг-08, 13:12 
Фух... вроде разобрался...

Вот код:

#include <sys/statvfs.h>
struct statvfs diskFree;
statvfs ( diskPartition, &diskFree );
/*        cout << "f_bfree = " << diskFree.f_bfree << endl;
        cout << "f_bavail = " << diskFree.f_bavail << endl;
        cout << "f_bsize = " << diskFree.f_bsize << endl;
        cout << "f_files = " << diskFree.f_files << endl;
        cout << "f_blocks = " << diskFree.f_blocks << endl;*/
value = int(double(diskFree.f_bavail) * double(diskFree.f_bsize)/1024.0/1024.0);

Основная проблема была в том, что я забыл о преобразовании типов. Я и до вышеуказанных советов пытался использовать statvfs, но результаты вызывали легкий шок. А все просто если делишь что-то на что-то надо не забывать преобразовывать типы данных (как double в мое примере).
Всем спасибо большое... тема закрыта...

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

Архив | Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Оцените тред (1=ужас, 5=супер)? [ 1 | 2 | 3 | 4 | 5 ] [Рекомендовать для помещения в FAQ]




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру