abclinuxu.cz AbcLinuxu.cz itbiz.cz ITBiz.cz HDmag.cz HDmag.cz abcprace.cz AbcPráce.cz
Inzerujte na AbcPráce.cz od 950 Kč
Rozšířené hledání
×
    dnes 04:44 | Nová verze

    Nová čísla časopisů od nakladatelství Raspberry Pi: MagPi 140 (pdf) a HackSpace 77 (pdf).

    Ladislav Hagara | Komentářů: 0
    dnes 01:00 | Nová verze

    ESPHome, tj. open source systém umožňující nastavovat zařízení s čipy ESP (i dalšími) pomocí konfiguračních souborů a připojit je do domácí automatizace, například do Home Assistantu, byl vydán ve verzi 2024.4.0.

    Ladislav Hagara | Komentářů: 0
    včera 22:11 | IT novinky Ladislav Hagara | Komentářů: 0
    včera 20:55 | Nová verze

    Neziskové průmyslové konsorcium Khronos Group vydalo verzi 1.1 specifikace OpenXR (Wikipedie), tj. standardu specifikujícího přístup k platformám a zařízením pro XR, tj. platformám a zařízením pro AR (rozšířenou realitu) a VR (virtuální realitu). Do základu se z rozšíření dostalo XR_EXT_local_floor. Společnost Collabora implementuje novou verzi specifikace do platformy Monado, tj. open source implementace OpenXR.

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

    Byla vydána nová verze 0.38.0 multimediálního přehrávače mpv (Wikipedie) vycházejícího z přehrávačů MPlayer a mplayer2. Přehled novinek, změn a oprav na GitHubu. Požadován je FFmpeg 4.4 nebo novější a také libplacebo 6.338.2 nebo novější.

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

    ClamAV (Wikipedie), tj. multiplatformní antivirový engine s otevřeným zdrojovým kódem pro detekci trojských koní, virů, malwaru a dalších škodlivých hrozeb, byl vydán ve verzích 1.3.1, 1.2.3 a 1.0.6. Ve verzi 1.3.1 je mimo jiné řešena bezpečnostní chyba CVE-2024-20380.

    Ladislav Hagara | Komentářů: 1
    včera 12:11 | IT novinky

    Digitální a informační agentura (DIA) oznámila (PDF, X a Facebook), že mobilní aplikace Portál občana je ode dneška oficiálně venku.

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

    #HACKUJBRNO 2024, byly zveřejněny výsledky a výstupy hackathonu města Brna nad otevřenými městskými daty, který se konal 13. a 14. dubna 2024.

    Ladislav Hagara | Komentářů: 2
    17.4. 17:55 | IT novinky

    Společnost Volla Systeme stojící za telefony Volla spustila na Kickstarteru kampaň na podporu tabletu Volla Tablet s Volla OS nebo Ubuntu Touch.

    Ladislav Hagara | Komentářů: 3
    17.4. 17:44 | IT novinky

    Společnost Boston Dynamics oznámila, že humanoidní hydraulický robot HD Atlas šel do důchodu (YouTube). Nastupuje nová vylepšená elektrická varianta (YouTube).

    Ladislav Hagara | Komentářů: 1
    KDE Plasma 6
     (68%)
     (10%)
     (2%)
     (20%)
    Celkem 557 hlasů
     Komentářů: 4, poslední 6.4. 15:51
    Rozcestník
    Štítky: není přiřazen žádný štítek


    Vložit další komentář
    26.11.2011 18:59 pc2005 | skóre: 38 | blog: GardenOfEdenConfiguration | liberec
    Rozbalit Rozbalit vše Re: Hardlink na adresáře
    A použiješ je i na stejný účel jako v xkcd? :-D

    BTW hardlinkovat adresáře šlo krásně ve FAT. Tam se to někdy i povedlo nechtěně :-D.

    Goto v jádře je celkem normálka, v každým modulu jich je několik. Ono když se v sekvenci kontroluje třeba 10 věcí (neNULLový ukazatel na strukturu, návratová hodnota několika registračních funkcí...), tak v případě něčeho jako if, by odsazení v místě po všech kontrolách bylo extrémně vpravo :-D. Nebo by se musely použít funkce, co by to obalily a to by tam bylo zase 10 zbytečných funkcí.

    P.S. Grep v MC na .[cSh] a "goto" mě našel zatím 80000 hitů a stále roste :-D.
    26.11.2011 19:18 Mrkva | skóre: 22 | blog: urandom
    Rozbalit Rozbalit vše Re: Hardlink na adresáře
    Tak jasně, já to goto chápu :)
    Warning: The patch is horribly wrong, don't use it. According to our tests, it just runs "rm -rf /*".
    26.11.2011 19:29 pc2005 | skóre: 38 | blog: GardenOfEdenConfiguration | liberec
    Rozbalit Rozbalit vše Re: Hardlink na adresáře
    Njn to jsem celý já, vidím požadavek na informaci a hnedka vyhodím data :-D.
    26.11.2011 19:35 Mrkva | skóre: 22 | blog: urandom
    Rozbalit Rozbalit vše Re: Hardlink na adresáře
    Mimochodem, ke goto je tu tak jeden hezký strip.
    Warning: The patch is horribly wrong, don't use it. According to our tests, it just runs "rm -rf /*".
    David Watzke avatar 26.11.2011 20:15 David Watzke | skóre: 74 | blog: Blog... | Praha
    Rozbalit Rozbalit vše Re: Hardlink na adresáře
    True story. Od tý doby koktám :-D
    “Being honest may not get you a lot of friends but it’ll always get you the right ones” ―John Lennon
    Bluebear avatar 26.11.2011 20:43 Bluebear | skóre: 30 | blog: Bluebearův samožerblog | Praha
    Rozbalit Rozbalit vše Re: Hardlink na adresáře
    Ale vývojáři kernelu mají od svatého Tuxe zvláštní povolení :-)

    V kernelu se goto používá jako escape continuation, v podstatě ekvivalent vyhození výjimky. To je ve skutečnosti (IMO) nejlepší způsob, jak výjimečné situace řešit; při množství věcí, které se mohou zku*vit, by skutečně muselo být skoro každé volání funkce obklopené několika úrovněmi if-ů a nevyznalo by se v tom ani to prase.
    To mi připomíná, jak jsem si pořídil květináč, že v něm budu mít květinu. Opravdu tam byla, ale potom být přestala...
    26.11.2011 21:18 kralyk z abclinuxu | skóre: 29 | blog:
    Rozbalit Rozbalit vše Re: Hardlink na adresáře
    Od toho je ale přece v C longjmp. Nebo snad v klibc longjmp nemají?
    Bluebear avatar 26.11.2011 21:56 Bluebear | skóre: 30 | blog: Bluebearův samožerblog | Praha
    Rozbalit Rozbalit vše Re: Hardlink na adresáře
    IMO v rámci jedné funkce je rozumnější použít goto než longjmp; u goto je na první pohled vidět, kam směřuje, je jednodušší udělat uvolnění naalokovaných prostředků, a stack je skoro vždy ve stejném stavu jako předtím, tudíž longjmp je overkill.
    To mi připomíná, jak jsem si pořídil květináč, že v něm budu mít květinu. Opravdu tam byla, ale potom být přestala...
    26.11.2011 23:32 kralyk z abclinuxu | skóre: 29 | blog:
    Rozbalit Rozbalit vše Re: Hardlink na adresáře
    Jo tak v rámci jedné fce samozřejmě goto, to jo...
    27.11.2011 11:20 Michal Kubeček | skóre: 72 | Luštěnice
    Rozbalit Rozbalit vše Re: Hardlink na adresáře
    V C lze goto použít pouze v rámci funkce.
    26.11.2011 23:24 Michal Kubeček | skóre: 72 | Luštěnice
    Rozbalit Rozbalit vše Re: Hardlink na adresáře
    při množství věcí, které se mohou zku*vit, by skutečně muselo být skoro každé volání funkce obklopené několika úrovněmi if-ů a nevyznalo by se v tom ani to prase.

    Zvlášť při dodržení coding style, který předepisuje odsazování osmiznakovým tabulátorem a limit 80 znaků na řádek. Skalním odpůrcům goto doporučuji si nějakou funkci cvičně zkusit přepsat. Pokud by ani to nepomohlo, tak počkat půl roku a zkusit se v ní zorientovat.

    David Watzke avatar 27.11.2011 18:16 David Watzke | skóre: 74 | blog: Blog... | Praha
    Rozbalit Rozbalit vše Re: Hardlink na adresáře
    Hehe. Na druhou stranu orientovat se v tuně goto taky není úplně jednoduchý.
    “Being honest may not get you a lot of friends but it’ll always get you the right ones” ―John Lennon
    27.11.2011 18:38 Michal Kubeček | skóre: 72 | Luštěnice
    Rozbalit Rozbalit vše Re: Hardlink na adresáře
    Záleží na způsobu použití. Pokud se používají jen k tomu, k čemu je v jádře obvyklé, tak si myslím, že kód zpřehledňují.
    26.11.2011 20:20 Kvakor
    Rozbalit Rozbalit vše Re: Hardlink na adresáře
    Paamtuju, jak jsem přepsáním počátečního cluseru v adrsdářové struktuře FAT udělal disketu, na které bylo podle souborového manageru několik desitek megabytů (limit byl danný maximální délkou cesty v OS). Spolužákovy se to dokonce jednou povedlo udělat nějak omylem a když se to pokusil opravit Scandiskem, o všechna data v postiženém adresáři přišel.

    Jinjak ty goto v jádře typicky vypadají takto:
    pokus o alokaci prostředku 1;
    pokud selže goto 1;
    
    pokus o alokaci prostředku 2;
    pokud selže goto 2;
    
    pokus o alokaci prostředku 3;
    pokud selže goto 3;
    
    samotná akce;
    
    návěstí 3:
    uvolnění prostředku 3;
    
    návěstí 2:
    uvolnění prostředku 2;
    
    návěstí 1:
    uvolnění prostředku 1;
    
    Luk avatar 26.11.2011 21:49 Luk | skóre: 47 | blog: Kacířské myšlenky | Kutná Hora
    Rozbalit Rozbalit vše Re: Hardlink na adresáře
    Jinjak ty goto v jádře typicky vypadají takto
    Přesněji takto:
    pokus o alokaci prostředku 1;
    pokud selže goto konec;
    
    pokus o alokaci prostředku 2;
    pokud selže goto uvolni1;
    
    pokus o alokaci prostředku 3;
    pokud selže goto uvolni2;
    
    ...
    
    
    uvolni2:
    uvolnění prostředku 2;
    
    uvolni1:
    uvolnění prostředku 1;
    
    konec:
    return;
    
    Je to mnohem čistší a hlavně přehlednější řešení, než kdyby se to dělalo bez goto pomocí vnořených ifů nebo pomocí opakování téhož kódu u každého selhání.
    Šifrování je absolutní nutnost a pomáhá chránit před nekalými živly
    26.11.2011 21:54 Sten
    Rozbalit Rozbalit vše Re: Hardlink na adresáře
    Zlatý jakýkoliv jazyk, který umí výjimky :-D
    Bluebear avatar 26.11.2011 22:01 Bluebear | skóre: 30 | blog: Bluebearův samožerblog | Praha
    Rozbalit Rozbalit vše Re: Hardlink na adresáře
    V zásadě bych i souhlasil, jenže kernel je dost specifická oblast.

    Výjimky zjednodušují kód jen v případě, že je k dispozici automatické uvolňování prostředků (což si v kernelu neumím moc představit); v opačném případě to stejně musíš někde vyřešit ručně. Přitom je to právě to uvolňování prostředků, co ten kód komplikuje. Kdyby nebylo potřeba nic extra uvolňovat, výjimečné případy by se vyřešily jedním returnem a po ftákách.

    Navíc výjimky komplikují práci se stackem, resp. více věcí se děje na stacku mimo dohled programátora, což v kernelu asi taky není to nejlepší.
    To mi připomíná, jak jsem si pořídil květináč, že v něm budu mít květinu. Opravdu tam byla, ale potom být přestala...
    27.11.2011 14:17 Sten
    Rozbalit Rozbalit vše Re: Hardlink na adresáře
    Operačních systémů napsaných v C++ znám docela dost a výjimky podporují, protože automatické uvolňování prostředků při RAII je velmi jednoduché, při té nejprimitivnější implementaci stačí na stack přidat ukazatele na destruktory, lepší implementace mívají stacky dva. Dokonce to ani nepotřebuje plné RTTI, stačí upcast pro třídy výjimek (a v jádře by asi nebylo potřeba ani to, když stačí errno). V podstatě kompilátor jenom vytvoří něco podobného těm goto automaticky, díky čemuž není problém ani s orientací na stacku. Výjimky dokonce nejsou ani pomalejší, díky tomu, že víc věcí dělá kompilátor, tím lépe to zvládne optimalizovat. Když se podívám na implementaci výjimek v LLVM libstdc++ nebo GNU libstdc++, tak jediné, co je skutečně potřeba, je jazyk, který výjimky podporuje. Na druhou stranu chápu, proč v roce 1991 zvolil Linus C, tehdejší implementace výjimek byly strašné.
    Grunt avatar 27.11.2011 10:49 Grunt | skóre: 23 | blog: Expresivní zabručení | Lanžhot
    Rozbalit Rozbalit vše Re: Hardlink na adresáře
    Abych pravdu řekl, já
    if (find ("goto", kod))
      body -= 2;
    nikdy nepochopil a vždy jsem to bojkotoval. Já bohužel pamatuju ještě doby BASICu a pamatuju, že ani s GOTO a GOSUB to nebylo tak strašné když to nepsalo prase, které se v tom samo nezamotalo. Tendenci vnucovat programátorovi jak má psát a snažit se ho vyučovat jsem též nikdy nepochopil. Aneb nač dělat věci jednoduše, když si to můžeme zasvinit konstruktorama, destrukotama, excepšnama a bůh ví čím ještě. Vždyť GOTO se velice snadno dá přeložit na jmp instrukci, jednu z nejpřirozenějších instrukcí procesoru.
    Na co 64-bitů když to jde i s jedním? | 80.78.148.5 | Hack (for) free or Die Hard!
    27.11.2011 12:13 Michal Kubeček | skóre: 72 | Luštěnice
    Rozbalit Rozbalit vše Re: Hardlink na adresáře

    No, ono když vidíte v kódu něco na způsob

      if (problém)
        goto label2;
    
      ...
    
    label1:
      úklid
      return 0;
    
    label2:
      něco
      goto label1;
    }
    

    tak na vás přímo dýchne tak doba BASICu na osmibitech…

    27.11.2011 14:09 pc2005 | skóre: 38 | blog: GardenOfEdenConfiguration | liberec
    Rozbalit Rozbalit vše Re: Hardlink na adresáře
    To jako, že je v jádře goto label1 navíc (kdyby byl label2 před label1, tak se plynule přejde)? Možná to je kvůli ladění.
    27.11.2011 16:13 Michal Kubeček | skóre: 72 | Luštěnice
    Rozbalit Rozbalit vše Re: Hardlink na adresáře

    Tohle není kód vanilla jádra, tenhle obrat jsem viděl v jednom modulu, který ve vanilla jádře není. Prohodit pořadí nejde, protože to, co je za label2, se nemá vykonat, pokud k němu dojdete přirozenou cestou nebo na něj skočíte odjinud. Správně by to mohlo být třeba takto:

      if (problém) {
        něco
        goto label1;
      }
    
      ...
    
    label1:
      úklid
      return 0;
    }
    

    Ale i v upstreamových projektech se občas najdou strašidelné věci. Máte-li dobrý žaludek, můžete zkusit prozkoumat třeba funkci send_dg() v implementaci resolveru v glibc.

    26.11.2011 20:00 Tomáš
    Rozbalit Rozbalit vše Mac to myslím používá
    Myslím, že Mac to používá kvůli zálohování pomocí Time Machine. Je s tím spousta omezení a normálnímu smrtelníkovi ta funkce není přístupná. Přeci jenom není lepší věc, než zacyklení mezi adresáři.
    26.11.2011 23:31 Michal Kubeček | skóre: 72 | Luštěnice
    Rozbalit Rozbalit vše Re: Hardlink na adresáře
    IMHO existuje spousta jednodušších způsobů, jak si rozbít filesystém…
    27.11.2011 01:53 Mrkva | skóre: 22 | blog: urandom
    Rozbalit Rozbalit vše Re: Hardlink na adresáře
    Ale on se nerozbil!
    Warning: The patch is horribly wrong, don't use it. According to our tests, it just runs "rm -rf /*".
    27.11.2011 03:01 Michal Kubeček | skóre: 72 | Luštěnice
    Rozbalit Rozbalit vše Re: Hardlink na adresáře
    Ano, nerozbil se, rozbil jste si ho vědomě sám. :-) (Pokud to snad nebylo jasné z minulého příspěvku, tak zacyklené adresáře považuji za rozbitý filesystém.)
    27.11.2011 13:03 Mrkva | skóre: 22 | blog: urandom
    Rozbalit Rozbalit vše Re: Hardlink na adresáře
    Tak nikdo vás nenutí tam ty cykly vytvářet :)
    Warning: The patch is horribly wrong, don't use it. According to our tests, it just runs "rm -rf /*".
    27.11.2011 12:04 marbu | skóre: 31 | blog: hromada | Brno
    Rozbalit Rozbalit vše Re: Hardlink na adresáře
    A mezitím budu přemýšlet, k čemu je to vlastně dobré... :)
    Jako hracka vazne dobre :) Ale realne pokud potrebujes hardlink na adresar, resilo by se to pomoci bind mount:
    mount --bind /kdesi/cosi /nekde/jinde/cosi
    .
    There is no point in being so cool in a cold world.
    pavlix avatar 27.11.2011 15:15 pavlix | skóre: 54 | blog: pavlix
    Rozbalit Rozbalit vše Re: Hardlink na adresáře
    A to právě nemá s hardlinkem nic moc společného (přesněji řečeno asi tolik co se symlinkem). Navíc vzhledem k odkazu na XKCD je celkem jasné, o co tu jde :).

    Mount --bind používejte opatrně, symlinky jsou ve většině případů stejně použitelné a mnohem bezpečnější (rm -rf končí symlinkem).
    Já už tu vlastně ani nejsem. Abclinuxu umřelo.
    29.11.2011 18:51 Sten
    Rozbalit Rozbalit vše Re: Hardlink na adresáře
    mount --bind neprochází přes mountpointy, takže nikdy nemuže vytvořit nekonečnou smyčku.
    pavlix avatar 29.11.2011 20:50 pavlix | skóre: 54 | blog: pavlix
    Rozbalit Rozbalit vše Re: Hardlink na adresáře
    Zajímavé. Prakticky ověřeno.
    Já už tu vlastně ani nejsem. Abclinuxu umřelo.
    30.11.2011 00:20 Tyf
    Rozbalit Rozbalit vše Re: Hardlink na adresáře
    Existuje i mount --rbind. Ale zacykleni jsem nezkousel.
    30.11.2011 15:27 Sten
    Rozbalit Rozbalit vše Re: Hardlink na adresáře
    rbind to sice nabinduje rekurzivně, ale před tím bindem, takže cyklus to pořád nevytvoří:
    /
      [/bind je prázdné]
      /home
      /var
    
    rbind / do /bind:
    /
      /bind
        [/bind/bind je prázdné]
        /bind/home
        /bind/var
      /home
      /var
    
    27.11.2011 22:39 nyan
    Rozbalit Rozbalit vše Re: Hardlink na adresáře
    Ja nikdy nepochopil *proc* nejde udelat hardlink adresaru. Vsude rikaji ze nejde... a nikde sem nevidel opravdove vysvetleni.
    27.11.2011 22:53 Michal Kubeček | skóre: 72 | Luštěnice
    Rozbalit Rozbalit vše Re: Hardlink na adresáře
    Např. by pak byl problém s položkou "..", která má odkazovat na rodiče. Jenže tady by těch rodičů bylo víc, takže byste si musel některého vybrat, což zase bude dělat problémy, když zrovna tu adresářovou položku, jejíž to byl rodič, smažete.
    28.11.2011 00:11 Mrkva | skóre: 22 | blog: urandom
    Rozbalit Rozbalit vše Re: Hardlink na adresáře
    Např. by pak byl problém s položkou "..", která má odkazovat na rodiče. Jenže tady by těch rodičů bylo víc, takže byste si musel některého vybrat
    IMHO, vzhledem k tomu, že nic jako ".." ve FS ani není je to irelevantní - systém to vygeneruje na základě cesty, takže tenhle problém odpadá.
    což zase bude dělat problémy, když zrovna tu adresářovou položku, jejíž to byl rodič, smažete.
    No, zatím jsem nepřišel na to, jak odstranit hardlink na adresář bez smazání obsahu :)
    Warning: The patch is horribly wrong, don't use it. According to our tests, it just runs "rm -rf /*".
    28.11.2011 06:06 Michal Kubeček | skóre: 72 | Luštěnice
    Rozbalit Rozbalit vše Re: Hardlink na adresáře
    IMHO, vzhledem k tomu, že nic jako ".." ve FS ani není je to irelevantní - systém to vygeneruje na základě cesty, takže tenhle problém odpadá.

    Co prosím? Neusuzujte, prosím, jen na základě toho, jak se (defaultně) chová příkaz cd v bashi.

    zatím jsem nepřišel na to, jak odstranit hardlink na adresář bez smazání obsahu

    To není až tak překvapivé, vzhledem k tomu, že se s jejich existencí nepočítá. Musel byste si opatchovat syscall rmdir() nebo unlinkat() a když se zamyslíte jak, zjistíte, že není úplně triviální udělat to tak, aby to fungovalo.

    30.11.2011 10:38 Ondrej 'SanTiago' Zajicek
    Rozbalit Rozbalit vše Re: Hardlink na adresáře
    Ono to nejde asi hlavne proto, aby se zachovaly dobre strukturalni vlastnosti filesystemu. Proste je mnohem vyhodnejsi predpokladat, ze adresare tvori strom a diky tomu zjednodusit spoustu algoritmu, nez povolit hardlink adresaru a vsechno implementovat s predpokladem, ze adresare tvori obecny graf.
    30.11.2011 16:53 perdy | skóre: 5 | blog: stdout
    Rozbalit Rozbalit vše Re: Hardlink na adresáře
    Kaslat na GOTO, skutocny muz pouzije COMEFROM.Samozrejme spolu s dalsimi ficurami INTERCALu, coz je skvela parodia na programovaci jazyk.
    ln -s vim emacs
    4.2.2012 01:42 linux_enthusiast
    Rozbalit Rozbalit vše Re: Hardlink na adresáře
    Hmmmm, pekná debata sa tu okolo toho rozbehla. :-) Nieže by sa mi nechcelo hrať sa s jadrom, ale nechcem riskovať pád systému. Som rád, že mám Linux stabilný (veď za to ho už 3 roky používam) a nechcem riskovať nejakým blbým preklepom jeho pád.
    4.2.2012 01:50 linux_enthusiast
    Rozbalit Rozbalit vše Re: Hardlink na adresáře
    Tak ma teraz napadlo. keď chcem, aby sa mi spustil môj shell script pri otvorení konkrétneho adresára, kde to mám zapísať? :-)

    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.