Russian Qt Forum
Май 20, 2024, 00:41 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: diskfree?  (Прочитано 6318 раз)
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« : Октябрь 09, 2009, 19:51 »

Добрый вечер

Ищу как определить (на Linux) количество свободного места на диске. Известен путь, нужно получить drive/volume (тоже не знаю как) и вернуть свободный размер.

Еще один вопрос: нормальный букварь по Linux? Ну например тот же diskfree - гуглю, все рассказывают про "df" но, как я понял, то команда а мне надо делать это их программы. Man pages есть, написано хорошо, понятно - но оглавлений нет и нужный вызов найти трудно.

Спасибо
Записан
Rcus
Гость
« Ответ #1 : Октябрь 09, 2009, 20:25 »

Есть один способ, у меня всегда работает чтение исходников.
Вот и сейчас man -k regexp ничего не дал, поэтому apt-get source coreutils, ставим dpkg-dev ибо в первый раз не получилось сверить контрольную сумму. Читаем читаем (читать там довольно мало надо - пару десятков строк) - понимаем чего не хватало. apt-get install manpages-posix-dev. man 3 statvfs.
« Последнее редактирование: Октябрь 09, 2009, 20:31 от Rcus » Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #2 : Октябрь 12, 2009, 11:53 »

Код
C++ (Qt)
       struct statvfs st;
       if(statvfs(QFile::encodeName(fileName).data(), &st) == 0)
       {
                       total = st.f_frsize * st.f_blocks;
                       free = st.f_frsize * st.f_bfree;
                       available = st.f_frsize * st.f_bavail;
       }
 
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
kuzulis
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2812


Просмотр профиля
« Ответ #3 : Октябрь 12, 2009, 12:33 »

Цитировать
Еще один вопрос: нормальный букварь по Linux? Ну например тот же diskfree - гуглю, все рассказывают про "df" но, как я понял, то команда а мне надо делать это их программы. Man pages есть, написано хорошо, понятно - но оглавлений нет и нужный вызов найти трудно.
Я не могу понять.. Зачем это делать из программы, если есть df ?

Эта утилита ставится по умолчанию во все дистрибутивы линукса в Core! (т.е. она есть ВСЕГДА!)

Цитировать
Известен путь, нужно получить drive/volume (тоже не знаю как) и вернуть свободный размер.

В "новом ядре" Linux, для определения имени диска (а точнее соответствие имени диска в ОС - реальному диску Улыбающийся ) , используются UUID
т.е. при перезагрузке Linux , ядро производит скан ЖД и первый ответивший получает имя /dev/sda к примеру и т.п., т.е привязываться к именам устройств /dev/sda /dev/sdb /dev/hd и т.п. НЕЛЬЗЯ!

Для привязки используются UUID устройств! Они никогда не меняются!

Чтобы узнать UUID нужно жмакнуть в консоликоманду :
Цитировать
#blkid

ЗЫ: если я в тему конечно.. )
Записан

ArchLinux x86_64 / Win10 64 bit
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #4 : Октябрь 12, 2009, 17:46 »

Спасибо, разобрался со statvfs. правда, применить метод Rcus у меня пока не получилось - ничего, не все сразу.
У меня надо выводить для пользователя информацию сколько памяти и места на диске свободно и сколько занято программой. 

С самим Линуксом идет хорошо, многое как в OSX, а от командной строки я уклоняюсь как могу. Гораздо больше заморочек с IDE (Eclipse). Ну например, собрался я подключить libz.a, иду в Libraries(-l). Даю путь, даю имя libz.a - не находит. Даю libz - не находит. Ни хелпа, ни в гугле - ничего. Ну за 2 дня все-таки прорвался - нужно давать просто z  Улыбающийся
Записан
pastor
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 2901



Просмотр профиля WWW
« Ответ #5 : Октябрь 12, 2009, 17:59 »

все рассказывают про "df" но, как я понял, то команда а мне надо делать это их программы. Man pages есть, написано хорошо, понятно - но оглавлений нет и нужный вызов найти трудно.

Ну и прекрасно, что команда. Вызови "df -kT" посредством QProcess и расспарси вывод. Получишь и общий объем, и сколько свободно и сколько занято.
Записан

Integrated Computer Solutions, Inc. (ICS)
http://www.ics.com/
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #6 : Октябрь 12, 2009, 18:04 »

Ну и прекрасно, что команда. Вызови "df -kT" посредством QProcess и расспарси вывод. Получишь и общий объем, и сколько свободно и сколько занято.
Я догадываюсь что на Линуксе это в кайф, но в конкретно этом модуле я не могу использовать даже new/delete не говоря уже о Qt.
Записан
Rcus
Гость
« Ответ #7 : Октябрь 12, 2009, 18:12 »

Ненене Улыбающийся Парсить вывод командных утилит это прерогатива скриптов. Нужные функции почти всегда представлены как интерфейсом командной строки для пользователя, так и разделяемыми библиотеками для программ. Начиная от обработки графики (libmagick/imagemagick) и заканчивая IPC (libdbus/qdbus)
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.066 секунд. Запросов: 19.