MC, 14:05 wtorek, 29.05.2012 r.
Ilustracja do artykułu: Linux stdin, stdout, stderr — Strumienie i przekierowania I

Linux stdin, stdout, stderr — Strumienie i przekierowania I

Standardowe strumienie są tunelami, przez które aplikacja kontaktuje się z użytkownikiem i środowiskiem, w jakim pracuje. Umiejętność posługiwania się nimi, jest zatem kluczową sprawą na drodze efektywnej współpracy z własnym systemem i oprogramowaniem. Dlatego w tym artykule postaram się dość dokładnie opisać temat standardowych strumieni i tego jak nimi operować.

Czym są standardowe strumienie?

Jak już wspomnieliśmy we wstępie, standardowe strumienie są to kanały komunikacyjne ze światem systemu. Mamy do czynienia z trzema strumieniami standardowymi: wejścia (standard input, stdin), wyjścia (standard output, stdout), błędów (standard error, stderr). Jak łatwo się domyślić, strumień wejścia jest strumieniem informacyjnym wchodzącym, wyjścia strumieniem wychodzącym, a na strumień błędów wysyłane są komunikaty o problemach. Aplikacje, z którymi mamy do czynienia w środowisku konsolowym (choć nie jako jedyne) korzystają z tych strumieni, dzięki czemu komunikacja staje się znacznie prostsza, zarówno od strony programisty, jak i użytkownika, a także systemu operacyjnego.

Przekierowanie na strumień wejścia

Najpierw zajmiemy się przekierowywaniem informacji na strumień wejścia, tak by aplikacja, która czyta z tego strumienia, mogła te informacje wykorzystać. Przekierowywać możemy pliki, a raczej ich zawartość. Robi się to za pomocą znaku <. Spójrzmy na poniższy przykład:
$ cat plik_testowy
Zawartość pliku testowego.
$ cat < plik_testowy
Zawartość pliku testowego.
Jak widać, mamy stworzony plik plik_testowy i wyświetlamy jego zawartość przy pomocy polecenia cat. Jednak za drugim wywołaniem, najpierw użyliśmy przekierowania na strumień wejściowy, z którego polecenie cat wczytało informacje.

Przekierowanie strumienia wyjścia

Tym razem spróbujemy przekierować strumień wyjścia do pliku. Jeśli plik, do którego chcemy przekierować strumień, nie istnieje, to zostanie automatycznie stworzony. Aktu przekierowania możemy dokonać za pomocą dwóch symboli: > oraz >>. Rożnica między nimi jest taka, że użycie >> spowoduje dopisanie strumienia do końca pliku, zaś użycie > spowoduje nadpisanie zawartości pliku. Zobaczmy to na przykładzie:
$ cat plik_wyjsciowy
cat: plik_wyjsciowy: Nie ma takiego pliku ani katalogu
$ cat plik_testowy
Zawartość pliku testowego.
$ cat plik_testowy > plik_wyjsciowy
$ cat plik_wyjsciowy
Zawartość pliku testowego.
$ cat plik_testowy > plik_wyjsciowy
$ cat plik_wyjsciowy
Zawartość pliku testowego.
$ cat plik_testowy >> plik_wyjsciowy
$ cat plik_wyjsciowy
Zawartość pliku testowego.
Zawartość pliku testowego.
$ echo "Koniec przykładu" >> plik_wyjsciowy
$ cat plik_wyjsciowy
Zawartość pliku testowego.
Zawartość pliku testowego.
Koniec przykładu
Myślę, że przykład jest klarowny. Najpierw przekierowujemy strumień wyjścia na nieistniejący plik, a następnie nadpisujemy lub dopisujemy do niego treść. Oczywiście przekierowania można ze sobą łączyć:
$ cat plik_wyjsciowy
cat: plik_wyjsciowy: Nie ma takiego pliku ani katalogu
$ cat < plik_testowy > plik_wyjsciowy
$ cat plik_wyjsciowy
Zawartość pliku testowego.

Zapraszam do lektury dalszej części artykułu: Linux stdin, stdout, stderr — Strumienie i przekierowania II

Komentarze (0) - Nikt jeszcze nie komentował - bądź pierwszy!

Imię:
Treść: