2. Przekierowanie strumienia danych
Każdy uruchomiony w Linuksie proces pobiera z
pewnego miejsca dane, a w inne wysyła wyniki
swojego działania i komunikaty o błędach. Dane są
przesyłane między urządzeniami w postaci
strumieni. Strumienie danych przypisane każdemu
procesowi są pokazane na schemacie:
0 1
stdin PROCES stdout
2
stderr
3. Przekierowanie strumienia danych
• stdin (standard input) – standardowe wejście, z
którego proces pobiera dane (domyślnie jest to
klawiatura),
• stdout (standard output) – standardowe
wyjście, do którego wysyłany jest wynik działania
procesu (domyślnie jest to ekran),
• stderr (standard error) – standardowe wyjście
błędów, gdzie trafiają wszystkie komunikaty o
błędach (domyślnie ekran).
4. Przekierowanie strumienia danych
Standardowe wejście i wyjście (strumienie danych) można przekierować.
Przełączanie standardowego wyjścia (stdin )
• znak „<” umożliwia przekierowanie zawartości pliku do standardowego
wyjścia, np.
more < plik,
• znak „>” umożliwia przekierowanie strumienia danych ze standardowego
wyjścia do pliku;
jeżeli plik istnieje, to jego poprzednia zawartość zostaje usunięta, np.
ls > plik,
• znaki „>>” umożliwiają przekierowanie strumienia danych ze
standardowego wyjścia do pliku, jeżeli plik istnieje, to nowe dane zostają
dopisane na końcu pliku.
5. Przekierowanie strumienia danych
Przykład 1:
ls –la /usr/bin > wynik
Rezultat działania powyższego polecenia trafi do
pliku wynik, jeśli wcześniej nie istniał plik o takiej samej
nazwie, to zostanie utworzony, jeśli istniał, cała jego
poprzednia zawartość zostanie nadpisana.
Przykład 2:
free –m >> wynik
Wynik tego polecenia (pokazanie wykorzystania
pamięci RAM i swap) zostanie dopisany na końcu pliku
wynik, nie naruszając jego wcześniejszej zawartości.
6. Przekierowanie strumienia danych
Przełączanie standardowego wejścia (stdout)
• jako standardowe wejście można zamiast klawiatury użyć pliku np.
Sort < plik
Spowoduje wyświetlenie posortowanej zawartości pliku.
Przykad 1:
bash < skrypt.sh
Spowoduje wykonanie instrukcji zawartych w pliku skrypt.sh przez
interpretator bash.
Przykład 2:
sort < grep ‘ala’ plik
Spowoduje wyświetlenie posortowanych lini zawierających ala.
7. Przekierowanie strumienia danych
Standardowy strumień błędów (stderr)
• Standardowy strumień błędów jest zwykle wykorzystywany do wyświetlania
komunikatów o błędach i informacjach przydatnych do debugowania. Jest
on niezależny od strumienia wyjścia. Zwykle celem strumienia jest,
podobnie jak przy stdout terminal z którego uruchomiono program aby
umożliwić zobaczenie błędu nawet wtedy, gdy strumień wyjścia jest
przekierowany. Jeżeli używamy potoku aby użyć danych wynikowych
jakiegoś programu jako danych wejściowych dla innego to błędy i tak
zostaną wypisane na terminalu.
• Gdy strumienie wyjścia i błędów mają ten sam cel (np. terminal) to są
wyświetlane w takiej kolejności, w jakiej wypisuje je program, o ile nie
korzysta się z buforowanego wyjścia. W takim wypadku dane z stderr
wyświetlają się wcześniej, gdyż są zwykle niebuforowane, w przeciwieństwie
do stdout, które są zwykle zapisywane w buforze przed wyświetleniem.
8. Przekierowanie strumienia danych
Przełączanie standardowego wyjścia błędów
Przekierowanie do pliku strumienia diagnostycznego:
2> plik
Przykład 1:
ls –y 2> ~/error
W powyższym skrypcie polecenie ls jest użyte z błędną opcją –y;
komunikat o błędzie trafi do pliku error.
9. Przekierowanie strumienia danych
Deskryptor pliku
• W informatyce deskryptor pliku – identyfikator pliku wykorzystywany przez system operacyjny. Po wykonaniu operacji
otwarcia pliku, deskryptor pliku może być wykorzystywany wielokrotnie przez funkcje systemowe w operacjach
wejścia/wyjścia.
• Termin deskryptor pliku jest używany głównie w systemach opracyjnych zgodnych z normą POSIX. W systemach rodziny
Microsoft Windows używany jest termin "uchwyt pliku".
• Zgodnie z POSIX deskryptor pliku to liczba całkowita, czyli wartość typu int z języka C. Domyślnie każdy proces ma do
dyspozycji 3 standardowe deskryptory plików
Wartość deskryptora Nazwa
0 Standardowe wejście (stdin)
1 Standardowe wyjście (stdout)
2 Standardowe wyjście diagnostyczne (stderr)
• Ogólnie deskryptor pliku to Indeks do przechowywanej przez jądro struktury danych zawierającej informacje o wszystkich
otwartych plikach. W POSIX ta struktura danych jest nazwana tablicą deskryptorów plików i jest odrębna dla każdego
procesu. Aplikacja użytkownika wykonując operacje plikowe przekazuje do jądra indeks, a jądro zajmuje się w imieniu
aplikacji operacjami związanymi z obsługą pliku. Aplikacja nie może bezpośrednio czytać z i pisać do tablicy deskryptorów
plików, zmiany w niej są dokonywane przez system w zależności od wykonywanej operacji na pliku.
• W systemach Unix deskryptor pliku może odnosić się do pliku, katalogu, urządzenia blokowego lub urządzenia znakowego,
gniazda, kolejki FIFO, nienazwanego strumienia lub dowiązania symbolicznego.