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í
×
    dnes 04:22 | Bezpečnostní upozornění

    Byly zveřejněny informace o kritické zranitelnosti CVE-2025-55182 s CVSS 10.0 v React Server Components. Zranitelnost je opravena v Reactu 19.0.1, 19.1.2 a 19.2.1.

    Ladislav Hagara | Komentářů: 3
    dnes 02:44 | Komunita

    Bylo rozhodnuto, že nejnovější Linux 6.18 je jádrem s prodlouženou upstream podporou (LTS). Ta je aktuálně plánována do prosince 2027. LTS jader je aktuálně šest: 5.10, 5.15, 6.1, 6.6, 6.12 a 6.18.

    Ladislav Hagara | Komentářů: 0
    dnes 02:22 | Nová verze

    Byla vydána nová stabilní verze 3.23.0, tj. první z nové řady 3.23, minimalistické linuxové distribuce zaměřené na bezpečnost Alpine Linux (Wikipedie) postavené na standardní knihovně jazyka C musl libc a BusyBoxu. Přehled novinek v poznámkách k vydání.

    Ladislav Hagara | Komentářů: 1
    včera 18:11 | Nová verze

    Byla vydána verze 6.0 webového aplikačního frameworku napsaného v Pythonu Django (Wikipedie). Přehled novinek v poznámkách k vydání.

    Ladislav Hagara | Komentářů: 0
    včera 05:55 | Nová verze

    Po více než 7 měsících vývoje od vydání verze 6.8 byla vydána nová verze 6.9 svobodného open source redakčního systému WordPress. Kódové jméno Gene bylo vybráno na počest amerického jazzového klavíristy Gene Harrise (Ray Brown Trio - Summertime).

    Ladislav Hagara | Komentářů: 13
    včera 05:11 | Komunita

    Na čem pracují vývojáři webového prohlížeče Ladybird (GitHub)? Byl publikován přehled vývoje za listopad (YouTube).

    Ladislav Hagara | Komentářů: 0
    včera 01:55 | Nová verze

    Google Chrome 143 byl prohlášen za stabilní. Nejnovější stabilní verze 143.0.7499.40 přináší řadu novinek z hlediska uživatelů i vývojářů. Podrobný přehled v poznámkách k vydání. Opraveno bylo 13 bezpečnostních chyb.

    Ladislav Hagara | Komentářů: 0
    2.12. 19:33 | Nová verze

    Společnost Valve aktualizovala přehled o hardwarovém a softwarovém vybavení uživatelů služby Steam. Podíl uživatelů Linuxu dosáhl 3,2 %. Nejčastěji používané linuxové distribuce jsou Arch Linux, Linux Mint a Ubuntu. Při výběru jenom Linuxu vede SteamOS Holo s 26,42 %. Procesor AMD používá 66,72 % hráčů na Linuxu.

    Ladislav Hagara | Komentářů: 0
    2.12. 15:22 | IT novinky

    Canonical oznámil (YouTube), že nově nabízí svou podporu Ubuntu Pro také pro instance Ubuntu na WSL (Windows Subsystem for Linux).

    Ladislav Hagara | Komentářů: 0
    2.12. 13:11 | IT novinky

    Samsung představil svůj nejnovější chytrý telefon Galaxy Z TriFold (YouTube). Skládačka se nerozkládá jednou, ale hned dvakrát, a nabízí displej s úhlopříčkou 10 palců. V České republice nebude tento model dostupný.

    Ladislav Hagara | Komentářů: 10
    Jaké řešení používáte k vývoji / práci?
     (34%)
     (47%)
     (19%)
     (18%)
     (23%)
     (15%)
     (25%)
     (16%)
     (18%)
    Celkem 426 hlasů
     Komentářů: 18, poslední 2.12. 18:34
    Rozcestník
    Štítky: není přiřazen žádný štítek

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

    30.1.2010 20:25 kralyk z abclinuxu | skóre: 29 | blog:
    Jak zjistit volné místo na disku? (C/C++)
    Přečteno: 1091×
    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.

    Řešení dotazu:


    Odpovědi

    AraxoN avatar 30.1.2010 20:38 AraxoN | skóre: 47 | 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)
    30.1.2010 20:47 kralyk z abclinuxu | skóre: 29 | blog:
    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()...
    30.1.2010 20:50 kralyk z abclinuxu | skóre: 29 | blog:
    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ů.
    Jendа avatar 30.1.2010 20:56 Jendа | skóre: 78 | blog: Jenda | 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?
    30.1.2010 21:00 kralyk z abclinuxu | skóre: 29 | blog:
    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.
    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
    30.1.2010 22:21 kralyk z abclinuxu | skóre: 29 | blog:
    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
    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: 78 | blog: Jenda | 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
    30.1.2010 22:25 kralyk z abclinuxu | skóre: 29 | blog:
    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í...
    AraxoN avatar 30.1.2010 23:16 AraxoN | skóre: 47 | 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.
    31.1.2010 00:45 kralyk z abclinuxu | skóre: 29 | blog:
    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ý...
    Jendа avatar 31.1.2010 00:49 Jendа | skóre: 78 | blog: Jenda | 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)
    31.1.2010 01:01 kralyk z abclinuxu | skóre: 29 | blog:
    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...
    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)
    31.1.2010 14:57 kralyk z abclinuxu | skóre: 29 | blog:
    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?
    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.