abclinuxu.cz AbcLinuxu.cz itbiz.cz ITBiz.cz HDmag.cz HDmag.cz abcprace.cz AbcPráce.cz
AbcLinuxu hledá autory!
Inzerujte na AbcPráce.cz od 950 Kč
Rozšířené hledání
×
eParkomat, startup z ČR, postoupil mezi finalisty evropského akcelerátoru ChallengeUp!
Robot na pivo mu otevřel dveře k opravdovému byznysu
Internet věcí: Propojený svět? Už se to blíží...
dnes 06:00 | Zajímavý software

OMG! Ubuntu! představuje emulátor terminálu Hyper (GitHub) postavený na webových technologiích (HTML, CSS a JavaScript). V diskusi k článku je zmíněn podobný emulátor terminálu Black Screen. Hyper i Black Screen používají framework Electron, stejně jako editor Atom nebo vývojové prostředí Visual Studio Code.

Ladislav Hagara | Komentářů: 3
dnes 06:00 | Zajímavý článek

I letos vychází řada ajťáckých adventních kalendářů. QEMU Advent Calendar 2016 přináší každý den nový obraz disku pro QEMU. Programátoři se mohou potrápit při řešení úloh z kalendáře Advent of Code 2016. Kalendáře Perl Advent Calendar 2016 a Perl 6 Advent Calendar přinášejí každý den zajímavé informace o programovacím jazyce Perl. Stranou nezůstává ani programovací jazyk Go.

Ladislav Hagara | Komentářů: 4
3.12. 16:24 | Nová verze

Byla vydána Mageia 5.1. Jedná se o první opravné vydání verze 5, jež vyšla v červnu loňského roku (zprávička). Uživatelům verze 5 nepřináší opravné vydání nic nového, samozřejmě pokud pravidelně aktualizují. Vydání obsahuje všechny aktualizace za posledního téměř půldruhého roku. Mageia 5.1 obsahuje LibreOffice 4.4.7, Linux 4.4.32, KDE4 4.14.5 nebo GNOME 3.14.3.

Ladislav Hagara | Komentářů: 9
3.12. 13:42 | Pozvánky

V Praze probíhá konference Internet a Technologie 16.2, volné pokračování jarní konference sdružení CZ.NIC. Konferenci lze sledovat online na YouTube. K dispozici je také archiv předchozích konferencí.

Ladislav Hagara | Komentářů: 0
2.12. 22:44 | Komunita

Joinup informuje, že Mnichov používá open source groupware Kolab. V srpnu byl dokončen dvouletý přechod na toto řešení. V provozu je asi 60 000 poštovních schránek. Nejenom Kolabu se věnoval Georg Greve ve své přednášce Open Source: the future for the European institutions (SlideShare) na konferenci DIGITEC 2016, jež proběhla v úterý 29. listopadu v Bruselu. Videozáznam přednášek z hlavního sálu je ke zhlédnutí na Livestreamu.

Ladislav Hagara | Komentářů: 24
2.12. 15:30 | Zajímavý projekt

Společnost Jolla oznámila v příspěvku Case study: Sailfish Watch na svém blogu, že naportovala Sailfish OS na chytré hodinky. Využila a inspirovala se otevřeným operačním systémem pro chytré hodinky AsteroidOS. Použita je knihovna libhybris. Ukázka ovládání hodinek na YouTube.

Ladislav Hagara | Komentářů: 8
2.12. 14:15 | Nová verze

Byla vydána verze 7.1.0 skriptovacího jazyka PHP používaného zejména k vývoji dynamických webových stránek. Jedná se o první stabilní verzi nejnovější větvě 7.1. Přehled novinek v dokumentaci. Podrobnosti v ChangeLogu. K dispozici je také příručka pro přechod z PHP 7.0.x na PHP 7.1.x.

Ladislav Hagara | Komentářů: 4
2.12. 12:55 | Nová verze

Google Chrome 55 byl prohlášen za stabilní. Nejnovější stabilní verze 55.0.2883.75 tohoto webového prohlížeče přináší řadu oprav a vylepšení (YouTube). Opraveno bylo také 36 bezpečnostních chyb. Mariusz Mlynski si například vydělal 22 500 dolarů za 3 nahlášené chyby (Universal XSS in Blink).

Ladislav Hagara | Komentářů: 4
2.12. 11:55 | Pozvánky

Máte rádi svobodný software a hardware nebo se o nich chcete něco dozvědět? Přijďte na 135. sraz spolku OpenAlt, který se bude konat ve čtvrtek 8. prosince od 18:00 v Radegastovně Perón (Stroupežnického 20, Praha 5). Sraz bude tentokrát tématický. Bude retro! K vidění budou přístroje jako Psion 5mx nebo Palm Z22. Ze svobodného hardwaru pak Openmoko nebo čtečka WikiReader. Přijďte se i vy pochlubit svými legendami, nebo alespoň na pivo. Moderní hardware má vstup samozřejmě také povolen.

xkucf03 | Komentářů: 1
2.12. 00:10 | Nová verze

Byla vydána verze 3.2 svobodného systému pro detekci a prevenci průniků a monitorování bezpečnosti počítačových sítí Suricata. Z novinek lze zmínit například podporu protokolů DNP3 a CIP/ENIP, vylepšenou podporu TLS a samozřejmě také aktualizovanou dokumentaci.

Ladislav Hagara | Komentářů: 0
Kolik máte dat ve svém domovském adresáři na svém primárním osobním počítači?
 (32%)
 (24%)
 (29%)
 (7%)
 (5%)
 (3%)
Celkem 771 hlasů
 Komentářů: 50, poslední 29.11. 15:50
Rozcestník
Reklama
Štítky: není přiřazen žádný štítek

Dotaz: Jak zjistit volné místo na disku? (C/C++)

kralуk avatar 30.1.2010 20:25 kralуk | skóre: 29 | blog: Untitled
Jak zjistit volné místo na disku? (C/C++)
Přečteno: 950×
Ahoj,

potřeboval bych, aby můj program uměl zjistit volný místo na disku. Z dokumentace jsem si vytáhl statfs(2) a následně napsal takovýhle kód:
  struct statfs stats;

  cout << statfs(path.c_str(), &stats) << endl;   /* path = "/" */
  cout << stats.f_bfree << " [" << stats.f_bsize << "]" << endl;
  cout << stats.f_bfree * stats.f_bsize << endl;
Statfs proběhlo v pořádku (vrací nulu), ale výsledný volný místo se dost liší od čísla co ukazuje df, asi vo 1.5 Giga. To se mi vůbec nelíbí. Podezírám stafs(), že mi vrací nějaký bullshity. Zkoušel jsem i statvfs(), ale výsledek byl stejný.
Nahlídl jsem do zdrojáků df, no ale kdo se má v tom jejich #define pekle vyznat. Používaj tam taky statvfs(), ale dělaj okolo toho nějaký úpravy, který se mi nepodařilo dešifrovat...

Pro úplnost ještě přihodim příslišný výpisy z shellu:
root|vojta-dell /tmp #> /cesta/k/programu
0
1542023 [4096]
6316126208
root|vojta-dell /tmp #> df -h
Souborový systém  Velikost Užito Volno Uži% Připojeno do
/dev/sda1              30G   24G  4,4G  85% /
(...)
Díky za každou radu.
Abc fortunes  |  Blog  |  PHP v kostce: $a = 'z'; $a++; $a < 'z'  // vrátí true

Řešení dotazu:


Odpovědi

AraxoN avatar 30.1.2010 20:38 AraxoN | skóre: 45 | blog: slon_v_porcelane | Košice
Rozbalit Rozbalit vše Re: Jak zjistit volné místo na disku? (C/C++)
A nebude to tým, že df ukazuje voľné miesto využiteľné bežným používateľom? (5% veľkosti fs je rezervované pre roota)
A fine is a tax for doing wrong. A tax is a fine for doing well.
kralуk avatar 30.1.2010 20:47 kralуk | skóre: 29 | blog: Untitled
Rozbalit Rozbalit vše Re: Jak zjistit volné místo na disku? (C/C++)
Asi ne. Ta hodnota, co ukazuje df jsou asi 3/4 tý, co dostanu ze statfs()...
Abc fortunes  |  Blog  |  PHP v kostce: $a = 'z'; $a++; $a < 'z'  // vrátí true
kralуk avatar 30.1.2010 20:50 kralуk | skóre: 29 | blog: Untitled
Rozbalit Rozbalit vše Re: Jak zjistit volné místo na disku? (C/C++)
Abych byl přesný, statfs() ukazuje 6'166'932 volných 1K bloků, zatímco df jen 4'594'128 1K bloků.
Abc fortunes  |  Blog  |  PHP v kostce: $a = 'z'; $a++; $a < 'z'  // vrátí true
Jendа avatar 30.1.2010 20:56 Jendа | skóre: 73 | blog: Výlevníček | JO70FB
Rozbalit Rozbalit vše Re: Jak zjistit volné místo na disku? (C/C++)
Takže rozdíl je +/- 1,5 G (jsem líný to přepočítávat přes 1024, ale o tom radši pomlčíme ;-)). A kolik je 5% z 30 G?
kralуk avatar 30.1.2010 21:00 kralуk | skóre: 29 | blog: Untitled
Rozbalit Rozbalit vše Re: Jak zjistit volné místo na disku? (C/C++)
Hergot, sem to ale hlupák :-D
na co to svést? Jó, už vím, na notebooku se špatně pracuje s kalulačkou, nemám numpad :-D

Každopádně díky.
Abc fortunes  |  Blog  |  PHP v kostce: $a = 'z'; $a++; $a < 'z'  // vrátí true
30.1.2010 21:42 nikdo
Rozbalit Rozbalit vše kalkulačka? :-D
No nevím 5% z 30 se snad počítá z hlavy ne? 30/20 = 3/2 = 1,5 :D
kralуk avatar 30.1.2010 22:21 kralуk | skóre: 29 | blog: Untitled
Rozbalit Rozbalit vše Re: kalkulačka? :-D
No já hlavně počítal chvílema špatnej filesystém (co byl na /dev/loop), se mi to celý v mylšenkách pomíchalo, zmatek, chaos,... :-D
Abc fortunes  |  Blog  |  PHP v kostce: $a = 'z'; $a++; $a < 'z'  // vrátí true
30.1.2010 21:10 mich | skóre: 16
Rozbalit Rozbalit vše Re: Jak zjistit volné místo na disku? (C/C++)
Zajimavé. Mě ukazuje f_bavail spravne číslo.:-(
je to teď v módě, na žive o tom furt píšou
Jendа avatar 30.1.2010 21:12 Jendа | skóre: 73 | blog: Výlevníček | JO70FB
Rozbalit Rozbalit vše Re: Jak zjistit volné místo na disku? (C/C++)
Nemáš FS bez vyhrazených bloků? (asi všechny kromě ext)
30.1.2010 21:24 mich | skóre: 16
Rozbalit Rozbalit vše Re: Jak zjistit volné místo na disku? (C/C++)
ve struct stafts jsou 2 promenne ukazujici volne misto:
long    f_bfree;    /* free blocks in fs */
long    f_bavail;   /* free blocks avail to non-superuser */
neni jejich rozdil je podle me tech 5% o kterych se tu mluvi
je to teď v módě, na žive o tom furt píšou
30.1.2010 21:31 mich | skóre: 16
Rozbalit Rozbalit vše Re: Jak zjistit volné místo na disku? (C/C++)
Radši to dopíšu aby to bylo jasné - tazatel používá f_bfree, ale má používat f_bavail
je to teď v módě, na žive o tom furt píšou
kralуk avatar 30.1.2010 22:25 kralуk | skóre: 29 | blog: Untitled
Rozbalit Rozbalit vše Re: Jak zjistit volné místo na disku? (C/C++)
A proč? Mně nevadí, jestli se filesystém zabere po vrch. Příslušnej kód stejně nepůjde jinde, než pod právama roota. Šlo mi jen o to, aby to číslo nebyla nějaká úplná hovadina, a to se díky tobě prokázalo, že není...
Abc fortunes  |  Blog  |  PHP v kostce: $a = 'z'; $a++; $a < 'z'  // vrátí true
AraxoN avatar 30.1.2010 23:16 AraxoN | skóre: 45 | blog: slon_v_porcelane | Košice
Rozbalit Rozbalit vše Re: Jak zjistit volné místo na disku? (C/C++)
Vlastný C-éčkový program bežiaci pod právami roota? Podľa mňa zlý nápad. Ak nie si C/C++ guru, tak je veľmi jednoduché spraviť chybu, nedočítať manuál ku funkcii, neošetriť nejaký vstup, či zabudnúť na akúsi zriedkavú okrajovú podmienku.
A fine is a tax for doing wrong. A tax is a fine for doing well.
kralуk avatar 31.1.2010 00:45 kralуk | skóre: 29 | blog: Untitled
Rozbalit Rozbalit vše Re: Jak zjistit volné místo na disku? (C/C++)
Je možné nastavit loop device a mountovat ho bez práv roota? Pokud ano, nebyly by práva roota nezbytný...
Abc fortunes  |  Blog  |  PHP v kostce: $a = 'z'; $a++; $a < 'z'  // vrátí true
Jendа avatar 31.1.2010 00:49 Jendа | skóre: 73 | blog: Výlevníček | JO70FB
Rozbalit Rozbalit vše Re: Jak zjistit volné místo na disku? (C/C++)
man sudo

(a jinak pokud se dá do fstabu s parametry loop a user, tak přimountovat půjde bez roota)
kralуk avatar 31.1.2010 01:01 kralуk | skóre: 29 | blog: Untitled
Rozbalit Rozbalit vše Re: Jak zjistit volné místo na disku? (C/C++)
Ále sudo znám, co já potřebuju je nastavovat loop a mountovat přímo z programu - voláním API. Mountuje se voláním mount() a loop se nasstavuje před ioctl(). Tam mi je sudo nahouby.
Leda bych volal externí nástroje mount a losetup, ale to mi nepřijde jako právě čistý řešení, radši bych se tomu vyhnul...
Abc fortunes  |  Blog  |  PHP v kostce: $a = 'z'; $a++; $a < 'z'  // vrátí true
31.1.2010 13:32 vencas | skóre: 32
Rozbalit Rozbalit vše Re: Jak zjistit volné místo na disku? (C/C++)
To se řeší tak, že velmi krátký hlavní program (který např. provede mount) se pustí rootem, ale sám pak pustí jiný proces s omezeným uživatelem. Např. zde.
31.1.2010 13:34 vencas | skóre: 32
Rozbalit Rozbalit vše Re: Jak zjistit volné místo na disku? (C/C++)
(což funguje jen s mountem hned na začátku, jinak ne -- pardon)
kralуk avatar 31.1.2010 14:57 kralуk | skóre: 29 | blog: Untitled
Rozbalit Rozbalit vše Re: Jak zjistit volné místo na disku? (C/C++)
Ok, díky, mrknu na to.

V zásadě by mi mohlo stačit, když na začátku zrušim veškerý capabilities a pak ve chvíli, kdy potřebuju mount() nebo ioctl() na chvíli příslušnou capabilitie(s) povolim, ne?
Abc fortunes  |  Blog  |  PHP v kostce: $a = 'z'; $a++; $a < 'z'  // vrátí true
31.1.2010 15:05 benn | skóre: 18
Rozbalit Rozbalit vše Re: Jak zjistit volné místo na disku? (C/C++)
Kdysi jsem taky potřeboval, zjišťovat využité místo a vyšel jsem z df od BusyBoxu. Kde počítají:

Využité místo v procentech:
blocks_used = s.f_blocks - s.f_bfree;
blocks_percent_used = 0;
if (blocks_used + s.f_bavail) {
       blocks_percent_used = (blocks_used * 100ULL + (blocks_used + s.f_bavail)/2) / (blocks_used + s.f_bavail);
}

A zbytek informaci:
static unsigned long kscale(unsigned long b, unsigned long bs)
{
       return (b * (unsigned long long) bs + 1024/2) / 1024;
}

printf(" %9lu %9lu %9lu %3u%% %s\n",
	kscale(s.f_blocks, s.f_bsize),    Celkova kapacita (kB)
	kscale(s.f_blocks - s.f_bfree, s.f_bsize),   Vyuzito (kB)
	kscale(s.f_bavail, s.f_bsize),     Dostupne misto (kB)
	blocks_percent_used, mount_point); Procent zaplneni a pripojny bod

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267   www.czech-server.cz
© 1999-2015 Nitemedia s. r. o. Všechna práva vyhrazena.