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í
×
    včera 21:33 | Nová verze

    Desktopové prostředí Budgie bylo vydáno ve verzi 10.10. Dokončena byla migrace z X11 na Wayland. Budgie 10 vstupuje do režimu údržby. Vývoj se přesouvá k Budgie 11. Dlouho se řešilo, v čem bude nové Budgie napsáno. Budgie 10 je postaveno nad GTK 3. Přemýšlelo se také nad přepsáním z GTK do EFL. Budgie 11 bude nakonec postaveno nad Qt 6.

    Ladislav Hagara | Komentářů: 0
    včera 13:00 | Humor

    OpenChaos.dev je 'samovolně se vyvíjející open source projekt' s nedefinovaným cílem. Každý týden mohou lidé hlasovat o návrzích (pull requestech), přičemž vítězný návrh se integruje do kódu projektu (repozitář na GitHubu). Hlasováním je možné změnit téměř vše, včetně tohoto pravidla. Hlasování končí vždy v neděli v 9:00 UTC.

    NUKE GAZA! 🎆 | Komentářů: 2
    včera 03:00 | Nová verze

    Byl vydán Debian 13.3, tj. třetí opravná verze Debianu 13 s kódovým názvem Trixie a Debian 12.13, tj. třináctá opravná verze Debianu 12 s kódovým názvem Bookworm. Řešeny jsou především bezpečnostní problémy, ale také několik vážných chyb. Instalační média Debianu 13 a Debianu 12 lze samozřejmě nadále k instalaci používat. Po instalaci stačí systém aktualizovat.

    Ladislav Hagara | Komentářů: 0
    10.1. 03:00 | Komunita

    Na stránkách Evropské komise, na portálu Podělte se o svůj názor, se lze do 3. února podělit o názor k iniciativě Evropské otevřené digitální ekosystémy řešící přístup EU k otevřenému softwaru.

    Ladislav Hagara | Komentářů: 6
    9.1. 19:44 | Zajímavý software

    Společnost Kagi stojící za stejnojmenným placeným vyhledávačem vydala (𝕏) alfa verzi linuxové verze (flatpak) svého proprietárního webového prohlížeče Orion.

    Ladislav Hagara | Komentářů: 5
    9.1. 19:11 | IT novinky

    Firma Bose se po tlaku uživatelů rozhodla, že otevře API svých chytrých reproduktorů SoundTouch, což umožní pokračovat v jejich používání i po plánovaném ukončení podpory v letošním roce. Pro ovládání také bude stále možné využívat oficiální aplikaci, ale už pouze lokálně bez cloudových služeb. Dokumentace API dostupná zde (soubor PDF).

    NUKE GAZA! 🎆 | Komentářů: 2
    9.1. 14:22 | Zajímavý článek

    Jiří Eischmann se v příspěvku na svém blogu rozepsal o open source AdGuard Home jako domácí ochraně nejen před reklamou. Adguard Home není plnohodnotným DNS resolverem, funguje jako DNS forwarder s možností filtrování. To znamená, že když přijme DNS dotaz, sám na něj neodpoví, ale přepošle ho na vybraný DNS server a odpovědi zpracovává a filtruje dle nastavených pravidel a následně posílá zpět klientům. Dá se tedy používat k blokování reklamy a škodlivých stránek a k rodičovské kontrole na úrovni DNS.

    Ladislav Hagara | Komentářů: 7
    9.1. 03:33 | Zajímavý software

    AI Claude Code od Anthropicu lépe rozumí frameworku Nette, tj. open source frameworku pro tvorbu webových aplikací v PHP. David Grudl napsal plugin Nette pro Claude Code.

    Ladislav Hagara | Komentářů: 1
    9.1. 00:11 | Nová verze

    Byla vydána prosincová aktualizace aneb nová verze 1.108 editoru zdrojových kódů Visual Studio Code (Wikipedie). Přehled novinek i s náhledy a videi v poznámkách k vydání. Ve verzi 1.108 vyjde také VSCodium, tj. komunitní sestavení Visual Studia Code bez telemetrie a licenčních podmínek Microsoftu.

    Ladislav Hagara | Komentářů: 0
    8.1. 20:44 | IT novinky

    Na lasvegaském veletrhu elektroniky CES byl předveden prototyp notebooku chlazeného pomocí plazmových aktuátorů (DBD). Ačkoliv se nejedná o první nápad svého druhu, nepochybně to je první ukázka praktického použití tohoto způsobu chlazení v běžné elektronice. Co činí plazmové chladící akční členy technologickou výzvou je především vysoká produkce jedovatého ozonu, tu se prý podařilo firmě YPlasma zredukovat dielektrickou

    … více »
    NUKE GAZA! 🎆 | Komentářů: 15
    Které desktopové prostředí na Linuxu používáte?
     (8%)
     (4%)
     (0%)
     (9%)
     (20%)
     (3%)
     (5%)
     (3%)
     (10%)
     (50%)
    Celkem 374 hlasů
     Komentářů: 8, poslední 10.1. 23:18
    Rozcestník

    Zjištění, zda je STDIO terminál nebo soubor/roura

    12.12.2019 12:17 | Přečteno: 2314× | GNU/Linux

    Občas se hodí vědět, zda náš program běží na terminálu nebo jsou jeho vstupy a výstupy přesměrované z/do souboru či jiného procesu. Pak můžeme upravit chování programu např. podle toho, jestli jeho vstup zadává ručně uživatel.

    V první řadě je potřeba říct, že neexistuje nějaké jedno STDIO zařízení a nejde říct, zda program jako takový běží či neběží na terminálu. Máme tu tři souborové popisovače (FD – file descriptor):

    a u nich má smysl se ptát, zda jsou napojené na terminál nebo ne. Běžně tedy může nastat situace, že vstup se čte z terminálu, zatímco výstup se zapisuje do souboru – nebo naopak.

    (nejde o nic objevného, ale psal jsem to teď jako komentář do jedné diskuse, a protože by se to mohlo hodit i někomu dalšímu, dávám to sem do blogu, aby to nezapadlo)

    Zda je daný FD terminál (TTY) nebo ne, nám řekne funkce isatty(). Ukázka v céčku:

    #include <stdio.h>
    #include <unistd.h>
    
    void zkontroluj(int fd) {
    	if (isatty(fd))  printf("FD %d je TTY (terminál)\n", fd);
    	else             printf("FD %d je roura nebo soubor\n", fd);
    }
    
    int main(int argc, char** argv) {
    	zkontroluj(fileno(stdin));
    	zkontroluj(fileno(stdout));
    	zkontroluj(fileno(stderr));
    }
    

    Přeložíme pomocí gcc a vyzkoušíme si různé varianty:

    $ ./a.out
    FD 0 je TTY (terminál)
    FD 1 je TTY (terminál)
    FD 2 je TTY (terminál)
    
    $ ./a.out | cat
    FD 0 je TTY (terminál)
    FD 1 je roura nebo soubor
    FD 2 je TTY (terminál)
    
    $ echo | ./a.out
    FD 0 je roura nebo soubor
    FD 1 je TTY (terminál)
    FD 2 je TTY (terminál)
    
    $ ./a.out 2>/dev/null
    FD 0 je TTY (terminál)
    FD 1 je TTY (terminál)
    FD 2 je roura nebo soubor
    
    $ echo | ./a.out 2>/dev/null | cat
    FD 0 je roura nebo soubor
    FD 1 je roura nebo soubor
    FD 2 je roura nebo soubor

    Pokud tuto funkci budeme využívat s rozumem a střídmě, můžeme upravit výchozí chování programu tak, aby lépe odpovídalo předpokládanému použití dle toho, v jakém prostředí resp. jakým způsobem byl program spuštěn. Při spuštění na terminálu např. můžeme zobrazovat prompt, nebo používat nějaký lidsky přívětivý formát… Vždy by ale toto chování mělo být dobře zdokumentované a mělo by být možné ho změnit (typicky parametrem na příkazové řádce nebo třeba proměnnou prostředí).

    Také bychom měli pamatovat na to, že někdo může chtít náš program spouštět jako podproces svého programu – a pak je opravdu nežádoucí zaneřádit standardní či chybový výstup nějakými hláškami pro uživatele nebo na druhé straně zablokovat STDIN čtením či požrat data, která nebyla určena pro nás. Naprosté minimum je rozlišovat STDOUT od STDERR a zachovávat na STDOUT data v co nejčistší a dobře specifikované podobě. Měli bychom dodržovat klasické unixové pravidlo mlčení:

    When a program has nothing surprising to say, it should say nothing.

    One of Unix's oldest and most persistent design rules is that when a program has nothing interesting or surprising to say, it should shut up. Well-behaved Unix programs do their jobs unobtrusively, with a minimum of fuss and bother. Silence is golden.

    This “silence is golden” rule evolved originally because Unix predates video displays. On the slow printing terminals of 1969, each line of unnecessary output was a serious drain on the user's time. That constraint is gone, but excellent reasons for terseness remain.

    I think that the terseness of Unix programs is a central feature of the style. When your program's output becomes another's input, it should be easy to pick out the needed bits. And for people it is a human-factors necessity — important information should not be mixed in with verbosity about internal program behavior. If all displayed information is important, important information is easy to find.

    -- Ken Arnold

    Well-designed programs treat the user's attention and concentration as a precious and limited resource, only to be claimed when necessary.

    A pokud se náš software používá jako knihovna, platí toto pravidlo dvojnásob – se STDIO bychom nikdy neměli pracovat přímo a měli bychom si nechat předat příslušné proudy či FD jako parametry a umožnit tomu, kdo nás volá, správně nasměrovat vstupy a výstupy. (když se náš program volá jako podproces, tak má dotyčný šanci mezi fork()exec() přesměrovat FD a zabránit našemu programu manipulovat s původním STDIO, ale u knihovny to takhle snadno nejde, když se volá ve stejném vlákně/procesu)

           

    Hodnocení: 88 %

            špatnédobré        

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

    Komentáře

    Vložit další komentář

    Heron avatar 12.12.2019 12:27 Heron | skóre: 53 | blog: root_at_heron | Olomouc
    Rozbalit Rozbalit vše Re: Zjištění, zda je STDIO terminál nebo soubor/roura
    Podobně v Pythonu:

    sys.stdout.isatty()
    13.12.2019 15:34 jiwopene | skóre: 31 | blog: Od každého trochu…
    Rozbalit Rozbalit vše Re: Zjištění, zda je STDIO terminál nebo soubor/roura
    V shellu:
    if test -t 0
    then
        : # FD 0 je terminál
    fi
    .sig virus 3.2_cz: Prosím, okopírujte tento text do vaší patičky.
    ISSN 1214-1267   www.czech-server.cz
    © 1999-2015 Nitemedia s. r. o. Všechna práva vyhrazena.