Instrukcja do laboratorium Systemów Operacyjnych
(semestr drugi)
wiczenie dziewi te
Ć
ą
Temat: Niskopoziomowa obs uga terminali
ł
Opracowanie:
mgr in . Arkadiusz Chrobot
ż
Wprowadzenie
1. Terminale
Ka dy
ż
system komputerowy jest wyposa ony
ż
w pewną liczbę urz dze
ą
ń
przeznaczonych do komunikacji z u ytkownikiem
ż
lub innymi komputerami.
Mianem „terminal” okre la
ś
się najcz
ciej
ęś
monitor i klawiatur ,
ę choć mo na
ż
tym terminem okre li
ś ć również takie urz dzenia
ą
jak modem i drukarka.
W przypadku systemów uniksowych okre la
ś
się tak również protokół terminala
okre laj cy
ś
ą
sposób obs ugi
ł
danego urz dzenia
ą
przez system operacyjny i część
systemu obs uguj c
ł
ą ą urz dzenia
ą
interakcji z u ytkownikiem.
ż
Istnieje zbiór
funkcji wchodz cych
ą
w sk ad
ł
API, które umo liwiaj
ż
ą programom u ytkownika
ż
sterowanie zachowaniem terminali. Z ka dym
ż
terminalem są zwi zane
ą
dwie
kolejki, wej ciowa
ś
i wyj ciowa,
ś
które stanowią rodzaj buforów j dra
ą
na znaki,
które mają zostać zapisane na ekran, b d
ą ź które zosta y
ł pobrane z klawiatury.
Ka dy
ż
terminal
mo e
ż
pracować
w
dwóch
trybach:
kanonicznym
i niekanonicznym. W pierwszym trybie znaki przeczytane lub zapisywane na
terminal są przetwarzane grupami, które ko cz
ń
ą znaki nowej linii, ko ca
ń
linii,
lub ko ca
ń
pliku. Ponadto niektóre znaki mają specjalne znaczenie, np.: mogą
powodować skasowanie poprzedzaj cego
ą
je znaku. W trybie niekanonicznym
program mo e
ż okre li
ś ć samodzielnie jakimi porcjami mają być czytane i pisane
dane na terminal, oraz które znaki b d znakami
ę ą
kontrolnymi.
2. Wybrane funkcje i struktury danych
Podstawową strukturą danych wykorzystywaną w obs udze
ł
terminali jest
struktura termios. Standardy uniksowe gwarantuj ,
ą
e
ż
b d
ę ą się w niej
znajdowa przynajmniej nast puj ce pola:
ć
ę
ą
c_iflag – pole okre laj ce flagi trybu wej cia,
ś
ą
ś
c_oflag – pole okre laj ce flagi trybu wyj cia,
ś
ą
ś
c_cflag – pole okre laj ce flagi trybu sterowania,
ś
ą
c_lflag – pole okre laj ce flagi trybu lokalnego,
ś
ą
cc_t c_cc[NCCS] – tablica okre laj ca,
ś
ą
które znaki są zwi zane
ą
z funkcjami
kontrolnymi.
Uwaga:
Niektóre terminale mogą definiować w asne
ł
pola w tej strukturze, zwi zane
ą
np.
z
obs ug
ł
ą
kolorowych
wy wietlaczy,
ś
dlatego
przy
manipulacji
ustawieniami
terminala
nale y
ż
przeczytać
jego
bie
ce
żą
ustawienia,
zapami ta
ę ć je w osobnej zmiennej, a nast pnie
ę
zmodyfikować odpowiednie
pole struktury termios przy pomocy odpowiednich sta ych
ł
i operatorów
bitowych, a nast pnie
ę
wywo a
ł ć funkcję zmieniaj c
ą ą zachowanie terminala.
2
Przed
zako czeniem
ń
program
powinien
przywrócić
domy ln
ś ą
obs ug
ł
ę
terminala.
funkcja isatty() – sprawdza, czy podany deskryptor pliku odnosi się do
pliku urz dzenia terminala.
ą
funkcja ttyname() – zwraca nazwę pliku terminala do której odnosi się
deskryptor.
funkcja tcgetattr() – pobiera bie
ce
żą
atrybuty terminala zwi zanego
ą
z podanym deskryptorem pliku i zapisuje je do struktury termios.
funkcja tcsetattr() – ustawia
dane
żą
atrybuty terminala zwi zanego
ą
z podanym deskryptorem pliku. Nale y
ż zauwa y ,
ż ć
e
ż stan tych atrybutów
nie zmieni się po zako czeniu
ń
program i je li
ś
nie przywrócimy domy lnej
ś
procedury obs ugi
ł
terminala mo emy
ż
zak óci
ł
ć pracę innych programów
wspó pracuj cych z tym samym terminalem.
ł
ą
makro VMIN – ma znaczenie tylko w trybie niekanonicznym, okre la
ś
miejsce w tablicy cc okre laj ce
ś
ą
liczbę bajtów, która musi się znaleźć
w kolejce wej ciowej zanim zostanie zako czona operacja odczytu.
ś
ń
makro VTIME – ma znaczenie tylko w trybie kanonicznym, okre la
ś
miejsce
w tablicy cc, okre laj ce
ś
ą
jak d ugo
ł
b dzie
ę
czekał system zanim zako czy
ń
operacje wej cia. Jednostk czasu jest 0,1 sekundy.
ś
ą
Szczegó owy
ł
opis wszystkich funkcji i struktur danych zwi zanych
ą
z obs ug
ł
ą
terminali
znajduje
się
w
podr czniku
ę
systemowym
(man
termios)
i w dokumentacji biblioteki glibc: „The GNU C Library Reference Manual”
autorstwa Sandry Loosemore, Richarda Stallmana, Rolanda McGratha,
Andrew Orama i Urlicha Dreppera.
Zadania
1. Napisz program, który sprawdzi, czy z deskryptorem standardowego wej cia
ś
(STDIN_FILENO lub wartość 0) jest zwi zany
ą
terminal. Je li
ś
tak, to program
powinien wypisać nazwę pliku urz dzenia
ą
tego terminala, oraz kilka jego
bie
cych ustawie .
żą
ń
2. Napisz program, który wy czy
łą
echo, czyli wypisywanie znaków wprowadzonych
z klawiatury na ekran. Po ponownym uruchomieniu program powinien
przywróci echo.
ć
3
3. Napisz program demonstruj cy
ą
obs ug
ł
ę terminala w trybie niekanonicznym
(Mo e
ż
to być np. program posiadaj cy
ą
menu, które jest uaktywnione
naci ni ciem klawisza, bez konieczno ci potwierdzania klawiszem Enter).
ś ę
ś
4