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 01:11 | Zajímavý článek

Na webu Libre Graphics World vyšel dvoudílný rozhovor s Paulem Davisem, hlavním vývojářem DAW Ardour. První část se zabývá především vývojem právě Ardouru a přepisem jeho částí, druhá část se věnuje jednak zvuku na Linuxu (PipeWire, PulseAudio, JACK) a jednak interoperabilitě s jinými DAW.

Fluttershy, yay! | Komentářů: 0
včera 15:55 | Komunita

V oblasti informačních a komunikačních technologií probíhají změny v názvosloví. Ke změnám se tento týden oficiálně vyjádřil CTO Red Hatu Chris Wright: nahrazením problematických slov se open source stane inkluzivnější. Také vývojáři Linuxu diskutují o inkluzivní terminologii. Do jádra se dostane soubor inclusive-terminology.rst.

Ladislav Hagara | Komentářů: 33
včera 13:55 | Nová verze

MaXX Interactive Desktop (navazující na projekt 5dwm.org) je linuxový port IRIX Interactive Desktop, desktopového prostředí z pracovních stanic Silicon Graphics. Vzniká s vědomím a svolením SGI, ale proto je také licence částečně proprietární. Aktuální, nově vydaná verze je 2.1. Do konce roku je plánováno přepracování grafické konfigurace, správce plochy a správce souborů.

Fluttershy, yay! | Komentářů: 4
3.7. 19:44 | Nová verze

Byla vydána nová verze 1.7.0 svobodného multiplatformního Markdown editoru Zettlr postaveného na platformě Electron. Podrobný přehled novinek na GitHubu.

Ladislav Hagara | Komentářů: 1
3.7. 08:00 | Humor

Linus Torvalds se v květnu v rámci oznámení o vydání Linuxu 5.7-rc7 pochlubil svým novým hlavním počítačem: Poprvé za 15 let není uvnitř Intel, není to ještě ARM, je to AMD Threadripper 3970x, allmodconfig je třikrát rychlejší. Následně v rozhovoru pro server ZDNet svůj nový počítač podrobně popsal. Linus Sebastian z YouTube kanálu Linus Tech Tips na základě tohoto rozhovoru včera na YouTube publikoval video s názvem Linus staví Linusův nový počítač.

Ladislav Hagara | Komentářů: 16
2.7. 23:55 | IT novinky

Společnost Purism představila svůj nový notebook Librem 14 s předinstalovaným PureOS. Předobjednat jej lze za cenu od 1 199 dolarů. Dle Purism o 300 dolarů levněji než o několik měsíců. Expedice je plánována na čtvrté čtvrtletí letošního roku.

Ladislav Hagara | Komentářů: 11
2.7. 16:44 | Zajímavý článek

Bylo vydáno 2. číslo magazínu NODE věnovanému zajímavým open source softwarovým a hardwarovým projektům. Elektronická verze ve formátu pdf (180 stránek, 98,5 MiB) je volně k dispozici. Tištěnou verzi lze do zítra 3. července předobjednat za £18.50.

Ladislav Hagara | Komentářů: 0
2.7. 15:11 | Komunita

Společnost Valve aktualizovala přehled o hardwarovém a softwarovém vybavení uživatelů služby Steam. Podíl uživatelů Linuxu aktuálně činí 0,88 %. Nejčastěji používanou linuxovou distribucí je Ubuntu 20.04 LTS 64 bit. Přehled her oficiálně podporujících SteamOS a Linux na stránkách Steamu. Přehled her pro Windows běžících na Linuxu díky Protonu na stránkách ProtonDB.

Ladislav Hagara | Komentářů: 9
2.7. 14:00 | Nová verze

Bylo vydáno openSUSE Leap 15.2. Přehled novinek v nejnovější verzi této linuxové distribuce v do češtiny přeloženém oznámení o vydání a v poznámkách k vydání.

Ladislav Hagara | Komentářů: 0
2.7. 12:44 | Nová verze

Apache Guacamole, řešení pro vzdálený přístup k počítačům pomocí protokolů VNC, RDP a SSH z webového prohlížeče, bylo vydáno ve verzi 1.2.0. Přehled novinek v oficiálním oznámení. Zdůraznit lze podporu SAML 2.0, Wake-on-LAN, nové rozhraní pro přepínání mezi sezeními nebo překlad webového rozhraní do češtiny.

Ladislav Hagara | Komentářů: 0
Používáte některé open-source řešení [protokol] pro šifrovaný instant messaging?
 (23%)
 (30%)
 (4%)
 (11%)
 (18%)
 (6%)
 (13%)
 (26%)
Celkem 298 hlasů
 Komentářů: 32, poslední 28.6. 17:51
Rozcestník

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

12.12.2019 12:17 | Přečteno: 1313× | 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: 22
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.