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 12:11 | IT novinky

    Před 30 lety, tj. v úterý 30. dubna 1996, byl spuštěn Seznam.cz.

    Ladislav Hagara | Komentářů: 0
    dnes 11:44 | Komunita

    Byly zpracovány a zveřejněny všechny videozáznamy, které stojí za zveřejnění, z konference FOSDEM 2026.

    Ladislav Hagara | Komentářů: 0
    dnes 01:11 | IT novinky

    Od úterý 28. dubna musí nově uváděné notebooky v Evropské unii podporovat nabíjení přes USB-C. Jednotná nabíječka byla schválena Evropským parlamentem v říjnu 2022.

    Ladislav Hagara | Komentářů: 51
    včera 23:44 | Bezpečnostní upozornění

    Byly publikovány informace o kritické zranitelnosti CVE-2026-31431 pojmenované Copy Fail v Linuxu, konkrétně v kryptografii (AF_ALG). Běžný uživatel může získat práva roota (lokální eskalaci práv). Na všech distribucích Linuxu vydaných od roku 2017. Pomocí 732bajtového skriptu. V upstreamu je již opraveno. Zranitelnost byla nalezena pomocí AI Xint Code.

    Ladislav Hagara | Komentářů: 2
    včera 17:44 | Nová verze

    Textový editor Zed dospěl do verze 1.0. Představení v příspěvku na blogu.

    Ladislav Hagara | Komentářů: 0
    včera 04:44 | Komunita

    Vývojáři svobodného 3D softwaru Blender představili (𝕏, Mastodon, Bluesky) nejnovějšího firemního sponzora Blenderu. Je ním společnost Anthropic stojící za AI Claude a úroveň sponzoringu je Patron, tj. minimálně 240 tisíc eur ročně. Anthropic oznámil sponzorství v tiskové zprávě Claude for Creative Work.

    Ladislav Hagara | Komentářů: 7
    včera 03:55 | Nová verze

    VNC server wayvnc pro Wayland kompozitory postavené nad wlroots - ne GNOME, KDE nebo Weston - byl vydán ve verzi 0.10.0. Vydána byla také verze 1.0.0 související knihovny neatvnc.

    Ladislav Hagara | Komentářů: 0
    28.4. 16:22 | Nová verze

    Bylo oznámeno vydání Fedora Linuxu 44. Ve finální verzi vychází šest oficiálních edic: Fedora Workstation a Fedora KDE Plasma Desktop pro desktopové, Fedora Server pro serverové, Fedora IoT pro internet věcí, Fedora Cloud pro cloudové nasazení a Fedora CoreOS pro ty, kteří preferují neměnné systémy. Vedle nich jsou k dispozici také další atomické desktopy, spiny a laby. Podrobný přehled novinek v samostatných článcích na stránkách

    … více »
    Ladislav Hagara | Komentářů: 7
    28.4. 15:44 | Zajímavý článek

    David Malcolm se na blogu vývojářů Red Hatu rozepsal o vybraných novinkách v GCC 16, jež by mělo vyjít v nejbližších dnech. Vypíchnuta jsou vylepšení čitelnosti chybových zpráv v C++, aktualizovaný SARIF (Static Analysis Results Interchange Format) výstup a nová volba experimental-html v HTML výstupu.

    Ladislav Hagara | Komentářů: 0
    28.4. 15:11 | Nová verze

    Byla vydána verze R14.1.6 desktopového prostředí Trinity Desktop Environment (TDE, fork KDE 3.5, Wikipedie). Přehled novinek v poznámkách k vydání, podrobnosti v seznamu změn.

    JZD | Komentářů: 0
    Které desktopové prostředí na Linuxu používáte?
     (14%)
     (8%)
     (2%)
     (13%)
     (31%)
     (3%)
     (6%)
     (3%)
     (15%)
     (24%)
    Celkem 1464 hlasů
     Komentářů: 30, poslední 3.4. 20:20
    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: 1101×
    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.