Obsah
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()nebosys.stdin.read() - C:
scanf()nebofgets(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í.
