LABORATORIUM 3
WEJŚCIE I WYJŚCIE STANDARDOWE PROCESU. PRZEKIEROWANIA, FILTRY I POTOKI
WEJŚCIE I WYJŚCIE STANDARDOWE PROCESU
Przez domniemanie wejście standardowe skojarzone jest z klawiaturą terminala, zaś wyjście
standardowe i standardowe wyjście błędów - z oknem tekstowym terminala (dlatego też
pojawiają się w nim zarówno użyteczne wyniki działania programów, jak i komunikaty o
błędach).
Procesy (uruchomione programy) w trybie tekstowym mają od początku działania przyporządkowane trzy otwarte deskryptory:
- 0 - wejście standardowe (standard input, stdin)
- 1 - wyjście standardowe (standard output, stdout)
- 2 - standardowe wyjście błędów (standard error output, stderr)
PPRZEKIEROWANIA
Domniemane przyporządkowanie deskryptorów można zmienić (na przykład chcąc
wprowadzić z pliku dużą ilość danych lub zapisać w pliku dużą ilość wyników) przy użyciu
operatorów przekierowania:
- program < plik # wejście standardowe procesu zostanie skojarzone z danym plikiem (uwaga:
plik musi istnieć)
- program > plik # wyjście standardowe procesu zostanie skojarzone z danym plikiem. Jeżeli plik
nie istniał, będzie utworzony (jako pusty plik). Jeżli plik już istniał, jego dotychczasowa
zawartość zostanie usunięta (nadpisana)
- program >> plik #wyjście standardowe procesu zostanie skojarzone z danym plikiem. Jeśli plik
nie istniał, będzie utworzony (jako pusty plik). Jeśli plik już istniał, jego dotychczasowa
zawartość nie zostanie usunięta (proces będzie dopisywał do niej swoje wyniki)
- program 2> plik # standardowe wyjście błędów procesu zostanie skojarzone z danym plikiem.
Jeśli plik nie istniał, będzie utworzony (jako pusty plik). Jeśli plik już istniał, jego
dotychczasowa zawartość zostanie usunięta (nadpisana)
Powyższe operatory przekierowań (i także potoku) mogą być wykorzystywane
jednocześnie w linii poleceń, służąc do konstruowania poleceń złożonych.
ZADANIA
Zad. 1
Przy użyciu polecenia ls -l > plik zapisać w pliku zawartość bieżącego katalogu.
Wyświetlić (cat plik), sprawdzić.
Zad. 2
Użyć polecenia cat > plik do bezpośredniego zapisu tekstu (kilka linijek) do pliku
(ctrl-d kończy działanie polecenia). Sprawdzić (cat plik). Sprawdzić, że ponowne
polecenie cat > plik nadpisuje poprzednią zawartość pliku, a polecenie cat >> plik -
dopisuje nowy tekst do poprzedniej zawartości. Wypróbować działanie samego polecenia cat.
UWAGA: w systemach uniksowych znak ASCII pełniący rolę standardowego znacznika
końca strumienia tekstowego (EOT - End Of Transmission) jest skojarzony z kombinacją
kluczy ctrl-d . W systemach Windows analogiczną rolę pełni ctrl-z .
Zad. 3Zapoznać się z możliwością używania przez proces interpretera poleceń deskryptorów plików większych, niż 2:
- echo -n abcdefghijklmn > nazwa_pliku # zapis ciągu znaków do pliku o podanej nazwie
cat nazwa_pliku # sprawdzenie, że plik zawiera to, co wpisaliśmy
- exec 3<> nazwa_pliku # otwarcie pliku do zapisu i odczytu przy użyciu deskryptora 3
- read -n 5 <&3 # przesunięcie miejsca bieżącego dostępu do zawartości otwartego
pliku o 5 pozycji do przodu
- echo -n ABC >&3 # nadpisanie trzech kolejnych znaków w pliku innymi znakami
- exec 3>&- # zamknięcie deskryptora 3
cat nazwa_pliku # wyświetlenie aktualnej zawartości pliku
POTOKI
Potok (pipe) łączy
stdout jednego procesu z
stdin drugiego procesu. Przykład:
program1 | program2 # obydwa procesy zostaną uruchomione współbieżnie, standardowe
wyjście pierwszego procesu zostanie połączone bezpośrednio ze standardowym wejściem
drugiego procesu
ZADANIA CD.
Zad. 4Utworzyć program w języku C:
#include <stdio.h>
main() {
unsigned n;
scanf("%d",&n);
printf("%d",2*n);
return 0;
}
kopiując najpierw powyższą zawartość do pliku i zapisując go jako program.c
Następnie skompilować go przy użyciu polecenia: gcc program.c -o program
Wypróbować działanie poleceń:
a) ./program
b) ./program | ./program
c) ./program | ./program | ./program
Zad. 5Napisać nieduży program w języku C zawierający kilka błędów składniowych,
skompilować go przy użyciu polecenia gcc program.c i obejrzeć wyświetlony wykaz
błędów. Użyć przekierowania standardowego wyjścia błędów:
gcc program.c 2> plik
Obejrzeć zawartość utworzonego pliku.
FILTRY
ZADANIA CD.
Zad. 6 Wyświetlić zawartość dużego katalogu korzystając z polecenia ls -l katalog | more
(klucze aktywne - i spacja). Wyświetlić zawartość dużego pliku tekstowego
korzystając z polecenia cat plik | more , porównać jego działanie z działaniem
polecenia more < plik oraz polecenia more plik. Przeczytać opis i wypróbować
działanie polecenia less.
Zad. 7Zapisać w pliku (przy użyciu dowolnego edytora tekstowego) ciąg kilkunastu
wyrazów - po jednym w jednej linii (nie używać polskich znaków). Wyświetlić
posortowaną listę wyrazów korzystając z polecenia cat plik | sort , porównać jego
działanie z działaniem polecenia sort < plik oraz polecenia sort plik . Zapisać wynik
sortowania w drugim pliku: sort < plik > plik1 , sprawdzić (cat plik1). Użyć polecenia
sort > plik do posortowania ciągu wyrazów wprowadzonego z klawiatury (ctrl-d
kończy wpisywanie).
Zad. 8Przeczytać opisy poleceń head oraz tail. Utworzyć polecenie złożone (potok poleceń),
które pobierze od użytkownika listę nazwisk wprowadzonych z klawiatury (po jednym
w jednej linii, bez polskich znaków), posortuje ją alfabetycznie i wyświetli: a) 5
pierwszych pozycji
b) 3 ostatnie pozycjew posortowanym ciągu nazwisk.
Zad. 9Przeczytać opis polecenia tee. Wykorzystać polecenie tee plik > plik1 do zapisu tekstu
wprowadzonego z klawiatury do dwóch plików jednocześnie. Porównać zawartości
obu plików.
Zad. 10Przeczytać opisy poleceń zewnętrznych ln oraz stat. Utworzyć w bieżącym katalogu
plik tekstowy o nazwie aaa.txt zawierający dowolny tekst. Przy użyciu polecenia
stat aaa.txt
sprawdzić, że liczba dowiązań do tego pliku wynosi 1. Przy użyciu polecenia
ln aaa.txt bbb.txt
utworzyć dodatkowe dowiązanie do pliku aaa.txt.
Sprawdzić (ls), że oba dowiązania są
widoczne w bieżącym katalogu. Przy użyciu polecenia stat (z którymkolwiek z argumentów)
sprawdzić, że liczba dowiązań wynosi obecnie 2. Sprawdzić, że jakakolwiek zmiana: a)
zawartości pliku; b) praw dostępu do pliku dla jednego z dowiązań jest natychmiast widoczna
również dla drugiego z nich. Sprawdzić, że usunięcie (rm) jednego z dowiązań nie niszczy
drugiego z nich, a jedynie zmniejsza licznik dowiązań o 1.
Zad. 11W zespołach 2- lub 3-osobowych wypróbować możliwość tworzenia dowiązań do
cudzych plików. Jakie są minimalne prawa dostępu: a) do katalogu, w którym znajduje się
dany plik; b) do samego pliku, aby inni członkowie zespołu mogli utworzyć do niego
dowiązanie ? Czy późniejsze ograniczenie tych praw wpływa na możliwość dalszego
korzystania z utworzonego dowiązania (czyli dostępu do zawartości pliku) ?