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:11 | Nová verze

Byla vydána nová major verze 3.0.0 open source dokumentově orientované NoSQL databáze Apache CouchDB (Wikipedie). Přehled novinek v poznámkách k vydání.

Ladislav Hagara | Komentářů: 0
včera 17:33 | Komunita

Sketchfab, tj. platforma pro publikování, sdílení, objevování, nákup i prodej 3D modelů, ve spolupráci s 27 kulturními organizacemi z 13 různých zemí, oznámil spuštění programu na uchování 3D modelů předmětů kulturního dědictví jako volných děl (Public Domain). Organizace nahrávající své 3D modely na Sketchfab mohou nově použít licenci CC0 1.0 Univerzální (CC0 1.0) a tím potvrdit status volného díla. Podrobnosti v diskusním fóru. Aktuálně je na Sketchfabu pod CC0 cca 1700 modelů.

Ladislav Hagara | Komentářů: 1
včera 16:00 | Nová verze

Byla vydána nová verze 1.4.95 webového prohlížeče Brave (Wikipedie, GitHub). Vychází z Chromia 80.0.3987.122 a nově při nenalezení webové stránky nabídne její kopii z Wayback Machine. Podrobnosti v příspěvku na blogu Internet Archive.

Ladislav Hagara | Komentářů: 1
včera 13:33 | Zajímavý článek

Mozilla.cz informuje o veselých i smutných zprávách o WebThings Gateway. Před necelými dvěma týdny spatřila světlo světa WebThings Gateway 0.11 s oficiální českou lokalizací. Pravděpodobně v návaznosti na horší finanční výsledky za minulý rok, které vyústily i v docela velké propouštění, se Mozilla rozhodla v roce 2020 necílit na vydání žádného komerčního produktu, který by z WebThings vycházel. S okamžitou platností byla ukončena

… více »
Ladislav Hagara | Komentářů: 2
včera 06:00 | Nová verze

Po půl roce vývoje od vydání verze 1.13 byla vydána nová verze 1.14 programovacího jazyka Go (Wikipedie). Přehled novinek v poznámkách k vydání.

Ladislav Hagara | Komentářů: 0
25.2. 22:33 | IT novinky

Mozilla na svém blogu oznámila, že dnešním dnem postupně zapíná uživatelům Firefoxu v USA DNS přes HTTPS (DoH). Jedná se o výchozí nastavení. Odpovědi na otázky v infografice.

Ladislav Hagara | Komentářů: 12
25.2. 21:33 | Komunita

Dalším open source projektem, který byl finančně podpořen z programu Epic MegaGrants společnosti Epic Games je 3D PBR software pro malování textur ArmorPaint (GitHub). Získal 25 000 dolarů.

Ladislav Hagara | Komentářů: 1
25.2. 18:11 | Zajímavý projekt

Firma vyvíjející distribuci CoreOS/Container Linux byla před dvěma lety převzata Red Hatem, v jehož portfoliu vznikla redundance: Fedora CoreOS cílí na podobná nasazení. Krátce poté vznikl fork nazvaný Flatcar Container Linux. Aktuálně je ukončení podpory CoreOS/Container Linuxu plánováno na 26. května a odstranění instalačních obrazů z distribučních kanálů na 1. září. Firma Kinvolk udržující Flatcar Linux oznamuje, že se věnuje usnadnění přechodu stávajících uživatelů CoreOS.

Fluttershy, yay! | Komentářů: 0
25.2. 17:00 | Nová verze

Byla vydána verze 19.0 z Arch Linuxu vycházející linuxové distribuce Manjaro (Wikipedie). Její kódové jméno ne Kyria. Přehled novinek v oznámení v diskusním fóru. Manjaro je ke stažení v edicích XFCE, KDE Plasma a GNOME. K dispozici je také síťová instalace Architect. Vývoj Manjara lze podpořit také zakoupením počítače z předinstalovaným Manjarem.

Ladislav Hagara | Komentářů: 0
25.2. 12:22 | Zajímavý projekt

Dne 19. února 2020 pan Kyle Finlay zahájil na Kickstarteru kampaň s názvem GamePad, jejímž cílem je získat prostředky na zprovoznění nové open source platformy pro digitální distribuci her, čistě pro OS Linux. Nová herní platforma je inspirována GOG.com a autoři slibují plnou podporu her bez ohledu na konkrétní distribuci, ale hlavně bez DRM. GamePad by měl být plně otevřený, včetně API, takže bude možné upravovat klienta, nebo si vytvořit

… více »
D.A.Tiger | Komentářů: 8
Vydržela vám novoroční předsevzetí?
 (10%)
 (5%)
 (3%)
 (82%)
Celkem 202 hlasů
 Komentářů: 0
Rozcestník

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

12.12.2019 12:17 | Přečteno: 1248× | 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: 52 | 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: 19
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.