Uživatelské nástroje

Nástroje pro tento web


stdin

stdin (Standard Input)

stdin je standardní komunikační kanál, přes který proces přijímá data. V technické dokumentaci a programování se mu přiřazuje tzv. deskriptor souboru (file descriptor) s hodnotou 0.

1. Zdroje vstupu pro stdin

V závislosti na tom, jak program spustíte, může být zdrojem pro stdin:

  • Klávesnice: Výchozí stav. Program čeká, až uživatel něco napíše a stiskne Enter.
  • Soubor: Pomocí přesměrování (znaku <) lze obsahu souboru „vnutit“ programu jako vstup.
  • Jiný program: Pomocí pipeline (znaku |) se výstup jednoho programu stane standardním vstupem druhého.

2. Tři pilíře standardních proudů

stdin nikdy nefunguje osamoceně, je součástí trojice proudů:

Proud Název Deskriptor Účel
stdin Standard Input 0 Příjem dat (vstup).
stdout Standard Output 1 Výpis výsledků (výstup).
stderr Standard Error 2 Výpis chybových hlášení.

3. Přesměrování a Pipeline v praxi

Přesměrování ze souboru (Redirection)

Místo psaní na klávesnici pošleme soubor do programu:

  • sort < seznam_jmen.txt

Tímto způsobem program sort přečte obsah souboru přes svůj stdin, seřadí ho a vypíše na obrazovku.

Propojení programů (Pipelining)

Toto je základní kámen linuxové filozofie:

  • cat data.txt | grep „Praha“

Zde výstup příkazu cat teče do stdin příkazu grep.

4. stdin v programování

Téměř každý programovací jazyk má zabudovanou cestu, jak číst ze stdin:

  • Python: input() nebo sys.stdin.read()
  • C: scanf() nebo fgets(stdin, …)
  • Java: System.in

Tato abstrakce je velmi mocná, protože programátor nemusí řešit, jestli data píše člověk na klávesnici, nebo jestli přicházejí z gigabajtového logovacího souboru přes rouru.

5. Ukončení vstupu (EOF)

Když program čte ze stdin (např. v terminálu), potřebuje vědět, kdy data končí. K tomu slouží znak EOF (End Of File).

  • V Linuxu/macOS se posílá zkratkou Ctrl+D.
  • Ve Windows se v příkazové řádce používá Ctrl+Z.
Zajímavost: Mnoho začátečníků se snaží v interaktivních programech zadat heslo přes stdin pomocí echo „heslo“ | program. To však může být nebezpečné, protože heslo zůstane v historii příkazů. Bezpečnější programy proto pro hesla často stdin obcházejí a čtou přímo z terminálu, aby zabránily nechtěnému přesměrování.

Zpět na Linux

stdin.txt · Poslední úprava: autor: admin