Russian Qt Forum

Компиляторы и платформы => Linux => Тема начата: Igors от Октябрь 09, 2009, 19:51



Название: diskfree?
Отправлено: Igors от Октябрь 09, 2009, 19:51
Добрый вечер

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

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

Спасибо


Название: Re: diskfree?
Отправлено: Rcus от Октябрь 09, 2009, 20:25
Есть один способ, у меня всегда работает чтение исходников.
Вот и сейчас man -k regexp ничего не дал, поэтому apt-get source coreutils, ставим dpkg-dev ибо в первый раз не получилось сверить контрольную сумму. Читаем читаем (читать там довольно мало надо - пару десятков строк) - понимаем чего не хватало. apt-get install manpages-posix-dev. man 3 statvfs.


Название: Re: diskfree?
Отправлено: Пантер от Октябрь 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;
       }
 


Название: Re: diskfree?
Отправлено: kuzulis от Октябрь 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

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


Название: Re: diskfree?
Отправлено: Igors от Октябрь 12, 2009, 17:46
Спасибо, разобрался со statvfs. правда, применить метод Rcus у меня пока не получилось - ничего, не все сразу.
У меня надо выводить для пользователя информацию сколько памяти и места на диске свободно и сколько занято программой. 

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


Название: Re: diskfree?
Отправлено: pastor от Октябрь 12, 2009, 17:59
все рассказывают про "df" но, как я понял, то команда а мне надо делать это их программы. Man pages есть, написано хорошо, понятно - но оглавлений нет и нужный вызов найти трудно.

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


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


Название: Re: diskfree?
Отправлено: Rcus от Октябрь 12, 2009, 18:12
Ненене :) Парсить вывод командных утилит это прерогатива скриптов. Нужные функции почти всегда представлены как интерфейсом командной строки для пользователя, так и разделяемыми библиотеками для программ. Начиная от обработки графики (libmagick/imagemagick) и заканчивая IPC (libdbus/qdbus)