Ero sivun ”Standardivirrat” versioiden välillä
Siirry navigaatioon
Siirry hakuun
p
ei muokkausyhteenvetoa
LP (keskustelu | muokkaukset) (graafiset ohjelmat; terminaali -> pääteikkuna) |
pEi muokkausyhteenvetoa |
||
(5 välissä olevaa versiota 5 käyttäjän tekeminä ei näytetä) | |||
Rivi 1: | Rivi 1: | ||
[[Tiedosto:Stdstreams-notitle.svg|thumb|right|200px|Standardisyöttövirrat tilanteessa, jossa prosessia ajetaan [[terminaaliemulaattori|pääteikkunassa]] tms.]] | [[Tiedosto:Stdstreams-notitle.svg|thumb|right|200px|Standardisyöttövirrat tilanteessa, jossa prosessia ajetaan [[terminaaliemulaattori|pääteikkunassa]] tms.]] | ||
'''Standardivirroilla''' (engl. '''standard streams''') tarkoitetaan Unix- ja Linux-ohjelmien syöttö- ja tulostusvirtoja, joilla ohjelma kommunikoi ajoympäristönsä (useimmiten [[terminaaliemulaattori|pääteikkunan]]) kanssa. Jokaisella [[prosessi]]lla on sen käynnistyksessä avattuna kolme standardivirtaa: ''standardisyöte'' ('''stdin'''), ''standardituloste'' ('''stdout''') ja ''standardivirhe'' ('''stderr'''). Kolmen standardivirran [[tiedostokuvain|tiedostokuvaimet]] (''file descriptor'') ovat numeroitu nollasta kahteen siten, että | '''Standardivirroilla''' (engl. '''standard streams''') tarkoitetaan Unix- ja Linux-ohjelmien syöttö- ja tulostusvirtoja, joilla ohjelma kommunikoi ajoympäristönsä (useimmiten [[terminaaliemulaattori|pääteikkunan]]) kanssa. Jokaisella [[prosessi]]lla on sen käynnistyksessä avattuna kolme standardivirtaa: ''standardisyöte'' ('''stdin'''), ''standardituloste'' ('''stdout''') ja ''standardivirhe'' ('''stderr'''). Kolmen standardivirran [[tiedostokuvain|tiedostokuvaimet]] (''file descriptor'') ovat numeroitu nollasta kahteen siten, että standardisyötteellä on numerokoodi '''0''' ja standardivirheellä numerokoodi '''2'''. | ||
Kun ohjelma käynnistetään valikosta tai kuvakkeen avulla, sillä ei yleensä ole pääteikkunaa, jonne lähettää standardivirtojaan, eikä näppäimistöä saa yhdistettyä standardisyötteeseen. Osa ohjelmista yhdistää standardivirran johonkin tiedostoon (usein [[piilotiedosto]]on ~/.xsession-errors) tai lokituksesta huolehtivalle ohjelmalle, mutta usein kaikki standardivirrat ohjataan [[laitetiedostot|laitetiedostoon]] /dev/null. Kun ohjelman virheilmoitukset haluaa talteen, sen voi käynnistää komentoriviltä, jolloin standardivirtoja voi käsitellä normaaliin tapaan. | Kun ohjelma käynnistetään valikosta tai kuvakkeen avulla, sillä ei yleensä ole pääteikkunaa, jonne lähettää standardivirtojaan, eikä näppäimistöä saa yhdistettyä standardisyötteeseen. Osa ohjelmista yhdistää standardivirran johonkin tiedostoon (usein [[piilotiedosto]]on ~/.xsession-errors) tai lokituksesta huolehtivalle ohjelmalle, mutta usein kaikki standardivirrat ohjataan [[laitetiedostot|laitetiedostoon]] [[:/dev/null]]. Kun ohjelman virheilmoitukset haluaa talteen, sen voi käynnistää komentoriviltä, jolloin standardivirtoja voi käsitellä normaaliin tapaan. | ||
== Esimerkki == | == Esimerkki == | ||
Rivi 22: | Rivi 22: | ||
Tässä cat lukee tiedostoa tiedosto1, ja ohjaa sen stdoutin kautta tiedostoon /tmp/data1. | Tässä cat lukee tiedostoa tiedosto1, ja ohjaa sen stdoutin kautta tiedostoon /tmp/data1. | ||
cat tiedosto1 >> /tmp/data1 | cat tiedosto1 >> /tmp/data1 | ||
Tämä on täysin sama, mutta cat:in tuloste (tiedosto1) lisätään tiedoston /tmp/data1 loppuun. | Tämä on täysin sama, mutta cat:in tuloste (tiedosto1) lisätään tiedoston /tmp/data1 loppuun. Yhden suurempi kuin -merkin tapauksessa /tmp/data1 päällekirjoitetaan, eli tiedoston mahdollinen aiempi sisältö katoaa pysyvästi. | ||
=== Stderr === | === Stderr === | ||
Rivi 36: | Rivi 36: | ||
tai | tai | ||
cat tiedosto1 2>&1 > kaikki.txt | cat tiedosto1 2>&1 > kaikki.txt | ||
Nimestään huolimatta stderr ei ole pelkkä virhe- vaan myös infotuloste. Esimerkiksi dd-komennolla voi kopioida dataa ja muokata sitä muutamalla yksinkertaisella tavalla | |||
echo heippa | dd conv=ucase | |||
tulostaa HEIPPA ja kertoo sitten stderr-virtaan paljonko dataa käsitteli. Tämä voidaan putkittaa esimerkiksi | |||
echo heippa | dd conv=ucase | rev > tulos.txt | |||
jolloin putkessa eteenpäin ja lopuksi tiedostoon siirtyy stdout, ja stderr (ja näin mahdolliset virheilmoitukset) tulostuvat heti ruudulle. Tarvittaessa kunkin komennon stderr-tuloste voidaan ottaa talteen em. 2> -merkinnällä. | |||
Standardivirhe eroaa standardisyötteestä myös siten, että se on järjestelmän standardikirjaston tasolla oletuksena [[wikipedia:fi:Puskurimuisti|puskuroimaton]]. Näin ohjelman virheilmoitukset tulostuvat ruudulle aina heti. | Standardivirhe eroaa standardisyötteestä myös siten, että se on järjestelmän standardikirjaston tasolla oletuksena [[wikipedia:fi:Puskurimuisti|puskuroimaton]]. Näin ohjelman virheilmoitukset tulostuvat ruudulle aina heti. | ||
Rivi 59: | Rivi 69: | ||
==Katso myös== | ==Katso myös== | ||
*[[Komentorivin perusteet]] | *[[Komentorivin perusteet]] | ||
*[[Xargs]] | |||
*[[Nimetty putki]] | *[[Nimetty putki]] | ||
[[Luokka:Järjestelmä]] | [[Luokka:Järjestelmä]] | ||
[[Luokka:Komentorivi]] | [[Luokka:Komentorivi]] |