Programowanie systemowe - mgr inż. Przemysław Jan Nowak
Transkrypt
Programowanie systemowe - mgr inż. Przemysław Jan Nowak
Programowanie systemowe mgr inż. Przemysław Nowak Kontakt [email protected] www.pjnowak.com Zasady przedmiotu Zaliczenie Obecności Pytania Przygotowanie maszyny Debian Instalacja pakietów (apt-get install…….) Wymagane Konsolowy edytor teksu (vi, mcedit, pico, jed, emac) Pakiet kompilatora jezyka c (gcc) Pierwszy program Utwórz plik tekstowy zawierający poniższy kod w języku C: #include <stdio.h> int main() { printf("Hello world!\n"); return} Skompiluj # cc -o hello hello.c Uruchom # ./hello Hello world! Włącz wyświetlanie wszystkich ostrzeżeń podczas kompilacji: # cc -Wall -o hello hello.c Funkcje systemowe Dostęp do usług jądra systemu operacyjnego Unix odbywa się poprzez wywołanie odpowiedniej funkcji systemowej. Z punktu widzenie programisty interfejs funkcji systemowych nie różni się niczym od interfejsu funkcji bibliotecznych języka C. Wykonanie funkcji systemowej różni się natomiast od wykonania zwykłej funkcji języka C, gdyż następuje wówczas przełączenie trybu pracy procesora w tzw. tryb jądra zwany też trybem systemowym. Wynik funkcji systemowej Wynik wykonania funkcji systemowej może mieć istotny wpływ na działanie nie tylko procesu wywołującego tę funkcję, ale również na inne procesy działające współbieżnie w systemie. Proces wywołujący otrzymuje jednak najczęściej pewne wartości wynikowe, które są przekazywane przez parametry wyjściowe lub jako wartość zwrotna funkcji. Szczególne znaczenie ma wartość zwrotna –1, oznaczająca, ze wykonanie funkcji systemowej zakończyło się błędem. Wartość większa lub równa zero oznacza zakończenie poprawne. Jeśli wartość zwrotna nie ma żadnej semantyki, to w przypadku poprawnego zakończenia jest to wartość 0. W nielicznych przypadkach funkcje systemowe nie zwracają żadnej wartości. Identyfikacja błędów W celu stwierdzenie przyczyny wystąpienia błędu w wykonaniu funkcji systemowej po jej zakończeniu, ale przed następnym wywołaniem funkcji systemowej, należy sprawdzić wartość zmiennej globalnej errno. Dla użytkownika wartość zmiennej errno jest mało czytelna, wiec można uzyskać komunikat związany z daną przyczyną błędu Komunikat o błędzie Wygodnym sposobem przekazania komunikatu o błędzie jest użycie funkcji perror, której parametrem jest łańcuch znaków definiowany przez programistę i informujący o miejscu wystąpienia błędu, a wynikiem działania jest przekazanie na tzw. standardowe wyjście awaryjne komunikatu złożonego z przekazanego do funkcji łańcucha znaków oraz systemowego komunikatu o przyczynie błędu. Należy zwrócić uwagę˛ że wywołanie funkcji perror ma sens tylko wówczas, gdy wykonana wcześniej funkcja systemowa zakończyła się błędem, czyli zwróciła wartość –1.