Systemy Operacyjne 2
laboratorium
Mateusz Hołenko
25 września 2011
Organizacja zajęć
Plan zajęć I
[26.09.2011] Zajęcia organizacyjne, Obsługa plików (1/2) [03.10.2011] Obsługa plików (2/2)
[10.10.2011] Procesy [17.10.2011] Potoki [24.10.2011] Kolejki FIFO [31.10.2011] Kolokwium I
[07.11.2011] IPC — Kolejki komunikatów
[14.11.2011] Sygnały, Opis projektu zaliczeniowego
Plan zajęć II
[21.11.2011] IPC — Pamięć współdzielona [28.11.2011] IPC — Semafory
[05.12.2011] Zadania praktyczne z synchronizacji (1/2) [12.12.2011] Kolokwium II
[19.12.2011] Zadania praktyczne z synchronizacji (2/2) [02.01.2012] Wątki
[09.01.2012] GDB (?)
[16.01.2012] Zaliczanie projektu, Wpisy
Mateusz Hołenko Systemy Operacyjne 2 [3/16]
Zasady zaliczenia
2x kolokwium zadania domowe projekt zaliczeniowy aktywność na zajęciach
Obecność
Dopuszcza się maksymalnie dwie nieusprawiedliwione nieobecności na zajęciach!
Zasady zaliczenia
2x kolokwium zadania domowe projekt zaliczeniowy aktywność na zajęciach
Obecność
Dopuszcza się maksymalnie dwie nieusprawiedliwione nieobecności na zajęciach!
Mateusz Hołenko Systemy Operacyjne 2 [4/16]
Zasady zaliczenia
2x kolokwium zadania domowe projekt zaliczeniowy aktywność na zajęciach
Obecność
Dopuszcza się maksymalnie dwie nieusprawiedliwione nieobecności na zajęciach!
Zasady zaliczenia
2x kolokwium zadania domowe projekt zaliczeniowy aktywność na zajęciach
Obecność
Dopuszcza się maksymalnie dwie nieusprawiedliwione nieobecności na zajęciach!
Mateusz Hołenko Systemy Operacyjne 2 [4/16]
Materiały
http://www.cs.put.poznan.pl/akobusinska/
http://www.cs.put.poznan.pl/csobaniec/
http://www.cs.put.poznan.pl/dwawrzyniak/
http://www.cs.put.poznan.pl/sop/
http://www.cs.put.poznan.pl/mholenko/
Warto zobaczyć
http://www.refcards.com/
Środowisko pracy
Środowisko pracy
1 Wymagania systemowe
2 Uruchamianie i zatrzymywanie aplikacji
3 Korzystanie z pomocy systemowej
4 Programowanie
pierwszy program po wakacjach kompilacja i uruchomienie wczytywanie parametrów funkcjagetopt
obsługa błędów
Środowisko pracy
1 Wymagania systemowe
2 Uruchamianie i zatrzymywanie aplikacji
3 Korzystanie z pomocy systemowej
4 Programowanie
pierwszy program po wakacjach kompilacja i uruchomienie wczytywanie parametrów funkcjagetopt
obsługa błędów
Mateusz Hołenko Systemy Operacyjne 2 [7/16]
Wymagania systemowe
dowolny system operacyjny z rodziny Linux (?) zainstalowany natywnie
maszyna wirtualna (np. VirtualBox)
dostęp zdalny (np. SSH,PuTTY,WinSCP)
serwer dydaktyczny
unixlab.cs.put.poznan.pl
nazwa użytkownika i hasło z LDAP’a (inf...)
Wymagania systemowe
dowolny system operacyjny z rodziny Linux (?) zainstalowany natywnie
maszyna wirtualna (np. VirtualBox)
dostęp zdalny (np. SSH,PuTTY,WinSCP)
serwer dydaktyczny
unixlab.cs.put.poznan.pl
nazwa użytkownika i hasło z LDAP’a (inf...)
Mateusz Hołenko Systemy Operacyjne 2 [8/16]
Uruchamianie i zatrzymywanie aplikacji
uruchamianie
przez podanie nazwy aplikacji i niezbędnych parametrów np. mv stara_nazwa_pliku nowa_nazwa_pliku
przez podanie ścieżki do aplikacji i niezbędnych parametrów
np. ./mojprogram parametr_do_mojego_programu
zatrzymywanie
sygnałSIGINT:Ctrl-C zabija proces na śmierć
sygnałSIGSTP:Ctrl-Z wstrzymuje działanie procesu i przenosi go w tło
Uruchamianie i zatrzymywanie aplikacji
uruchamianie
przez podanie nazwy aplikacji i niezbędnych parametrów np. mv stara_nazwa_pliku nowa_nazwa_pliku
przez podanie ścieżki do aplikacji i niezbędnych parametrów
np. ./mojprogram parametr_do_mojego_programu
zatrzymywanie
sygnałSIGINT:Ctrl-C zabija proces na śmierć
sygnałSIGSTP:Ctrl-Z wstrzymuje działanie procesu i przenosi go w tło
Mateusz Hołenko Systemy Operacyjne 2 [9/16]
Korzystanie z pomocy systemowej
polecenie man
sekcja 2 — funkcje systemowe (np. man 2 write) sekcja 3 — funkcje biblioteczne (np. man 3 printf) sekcjaSYNOPSIS — wymagane pliki nagłówkowe
Korzystanie z pomocy systemowej
polecenie man
sekcja 2 — funkcje systemowe (np. man 2 write) sekcja 3 — funkcje biblioteczne (np. man 3 printf) sekcjaSYNOPSIS — wymagane pliki nagłówkowe
Mateusz Hołenko Systemy Operacyjne 2 [10/16]
Programowanie
Pierwszy program po wakacjach:
#include <stdio.h> 1
2
int main(int argc, char* argv[]) { 3
printf("Witaj Szkoło!\n"); 4
5
return 0; 6
} 7
Programowanie
Pierwszy program po wakacjach:
#include <stdio.h> 1
2
int main(int argc, char* argv[]) { 3
printf("Witaj Szkoło!\n"); 4
5
return 0; 6
} 7
Mateusz Hołenko Systemy Operacyjne 2 [11/16]
Kompilacja i uruchomienie
kompilacja
standardowa gcc source.c -o myapp ścisła gcc -Wall source.c -o myapp debug gcc -g source.c -o myapp
uruchomienie ./myapp
Kompilacja i uruchomienie
kompilacja
standardowa gcc source.c -o myapp ścisła gcc -Wall source.c -o myapp debug gcc -g source.c -o myapp
uruchomienie ./myapp
Mateusz Hołenko Systemy Operacyjne 2 [12/16]
Wczytywanie parametrów
sygnatura funkcjimain
int main(int argc, char* argv[])
Wczytywanie parametrów
sygnatura funkcjimain
int main(int argc, char* argv[])
Mateusz Hołenko Systemy Operacyjne 2 [13/16]
Funkcja
getoptfunkcja getoptparsuje argumenty linii poleceń
obsługiwany format argumentów
jednoznakowe: myapp -a -b,myapp -ab
posiadające wartość: myapp -a value,myapp -avalue, myapp -a „value with whitespaces”
z opcjonalną wartością
przykładowy ciągoptstring: a::bc:d:012
int getopt(int argc, char* argv[], char* optstring)
Funkcja
getoptfunkcja getoptparsuje argumenty linii poleceń
obsługiwany format argumentów
jednoznakowe: myapp -a -b,myapp -ab
posiadające wartość: myapp -a value,myapp -avalue, myapp -a „value with whitespaces”
z opcjonalną wartością
przykładowy ciągoptstring: a::bc:d:012
int getopt(int argc, char* argv[], char* optstring)
Mateusz Hołenko Systemy Operacyjne 2 [14/16]
Funkcja
getoptfunkcja getoptparsuje argumenty linii poleceń
obsługiwany format argumentów
jednoznakowe: myapp -a -b,myapp -ab
posiadające wartość: myapp -a value,myapp -avalue, myapp -a „value with whitespaces”
z opcjonalną wartością
przykładowy ciągoptstring: a::bc:d:012
int getopt(int argc, char* argv[], char* optstring)
Przykład użycia funkcji
getopt#include<stdio.h> 1
2
#include<unistd.h>
3 intmain (intargc,char*argv[]) {
4 intopt;
5 opterr = 0; //disable error massages
6 while((opt = getopt(argc, argv,":i:f::r")) != -1) {
7 switch(opt) {
8 case’i’:
9 printf("Include: %s\n", optarg);
10 break;
11 case’r’:
12 printf("Option: %c\n", opt);
13 break;
14 case’f’:
15 if(optarg)
16 printf("Filename: %s\n", optarg);
17 else
18 printf("Option %c with no filename\n", opt);
19 break;
20 case’:’:
21 printf("Option %c needs a value\n", optopt);
22 break;
23 case’?’:
24 printf("Unknown option: %c\n", optopt);
break; 25
26 }
} 27
28 for(; optind < argc; optind++)
29 printf("Argument: %s\n", argv[optind]);
30 return0;
31
}
Mateusz Hołenko Systemy Operacyjne 2 [15/16]
Obsługa błędów
funkcje systemowe zwracają wartość -1 w przypadku błędu zmienna globalna errnozawiera szczegółowy kod błędu (zdefiniowana w pliku nagłówkowymerrno.h)
funkcja perrnobada zawartość zmiennej errnoi wyświetla tekstowy opis błędu
fd = open("przyklad.txt", O_RDONLY); 1 if (fd == -1) 2
{ 3
printf("Kod: %d\n", errno); 4 perror("Otwieranie pliku"); 5 return -1; 6
} 7
Obsługa błędów
funkcje systemowe zwracają wartość -1 w przypadku błędu zmienna globalna errnozawiera szczegółowy kod błędu (zdefiniowana w pliku nagłówkowymerrno.h)
funkcja perrnobada zawartość zmiennej errnoi wyświetla tekstowy opis błędu
fd = open("przyklad.txt", O_RDONLY); 1 if (fd == -1) 2
{ 3
printf("Kod: %d\n", errno); 4 perror("Otwieranie pliku"); 5 return -1; 6
} 7
Mateusz Hołenko Systemy Operacyjne 2 [16/16]
Obsługa błędów
funkcje systemowe zwracają wartość -1 w przypadku błędu zmienna globalna errnozawiera szczegółowy kod błędu (zdefiniowana w pliku nagłówkowymerrno.h)
funkcja perrnobada zawartość zmiennej errnoi wyświetla tekstowy opis błędu
fd = open("przyklad.txt", O_RDONLY); 1 if (fd == -1) 2
{ 3
printf("Kod: %d\n", errno); 4 perror("Otwieranie pliku"); 5 return -1; 6
} 7