Systemy operacyjne III
Jan Kazimirski
Systemy
operacyjne III
Projekt
Programistyczny
1
Systemy operacyjne III
Jan Kazimirski
Wymagania funkcjonalne
1) Ustawianie/wyświetlanie zmiennych
środowiskowych
2) Wbudowane polecenie pwd
3) Wbudowane polecenie cd
4) Wbudowane polecenia ls i ll (ls -l)
5) Możliwość uruchomienia dowolnego
programu jako procesu pierwszoplanowego.
2
Systemy operacyjne III
Jan Kazimirski
Komponenty
3
Systemy operacyjne III
Jan Kazimirski
PARSER
Analiza polecenia
Wywoływanie funkcji obsługujących
poszczególne polecenia. Interfejsy
poszczególnych komponentów:
cmd_env(char* cmdline)
cmd_pwd(char* cmdline)
cmd_cd(char* cmdline)
cmd_ls(char* cmdline)
cmd_exec(char* cmdline)
4
Systemy operacyjne III
Jan Kazimirski
PARSER rozpoznawane
polecenia
set zmienna=wartość ls
unset zmienna ls ścieżka
echo zmienna ll
pwd ll ścieżka
cd ścieżka exec ścieżka
cd quit/exit
5
Systemy operacyjne III
Jan Kazimirski
PARSER - działanie
Wyświetlenie znaku zachęty
Wczytanie linii
Rozpoznanie wydanego polecenia
Uruchomienie właściwej funkcji interfejsu
Całość w nieskończonej pętli z mozliwością
wyjścia (wydanie polecenia quit lub
exit )
6
Systemy operacyjne III
Jan Kazimirski
PARSER przydatne funkcje
printf, scanf, fgets
strcpy, strncpy
strcmp, strncmp
strtok
7
Systemy operacyjne III
Jan Kazimirski
ENV
Ustawianie / wyświetlanie zmiennej
środowiskowej
Przydatne funkcje:
getenv
putenv, setenv
unsetenv
sscanf, printf, strtok
8
Systemy operacyjne III
Jan Kazimirski
ENV - działanie
Określenie podanego polecenia
Wydobycie argumentu(-ów) nazwa, ew.
wartość zmiennej środowiskowej
Wywołanie właściwej funkcji bibliotecznej
9
Systemy operacyjne III
Jan Kazimirski
PWD
Wyświetlenie aktualnego katalogu
roboczego
Przydatne funkcje:
getcwd
printf
Działanie wywołanie funkcji bibliotecznej.
10
Systemy operacyjne III
Jan Kazimirski
CD
Zmiana katalogu roboczego
Przydatne funkcje:
chdir
sscanf, strtok
Może wykorzystywać funkcje modułu ENV
11
Systemy operacyjne III
Jan Kazimirski
CD - działanie
Sprawdzenie, czy podany został argument
Argument podany wywołanie funkcji
bibliotecznej
Brak argumentu odczytanie zawartości
zmiennej środowiskowej HOME i wywołanie
funkcji bibliotecznej.
12
Systemy operacyjne III
Jan Kazimirski
LS
Wyświetlenie zawartości katalogu (2
formaty)
Przydatne funkcje:
opendir, readdir, closedir
stat
sscanf, strcmp, strcat, strtok ...
printf
13
Systemy operacyjne III
Jan Kazimirski
LS - działanie
Określenie typu polecenia (krótki/długi
format)
Sprawdzenie czy podany został argument
Argument podany nazwa katalogu
Brak argumentu pobranie nazwy katalogu
roboczego
14
Systemy operacyjne III
Jan Kazimirski
LS działanie c.d.
Otwarcie katalogu i kolejne odczytywanie
jego pozycji
Jeżeli długi format odczytanie atrybutów
pozycji
Wyświetlenie informacji o pozycji (zgodnie z
formatem)
Jeżeli koniec listy zamknięcie katalogu
15
Systemy operacyjne III
Jan Kazimirski
EXEC
Uruchomienie dowolnego programu w
trybie pierwszoplanowym
Przydatne funkcje
sscanf, strtok
fork
wait, waitpid
jedna z funkcji z rodziny exec
16
Systemy operacyjne III
Jan Kazimirski
EXEC - działanie
Wyodrębnienie nazwy uruchamianego
programu (argument)
Rozwidlenie aktualnego procesu (fork)
Proces macierzysty czeka na zakończenie
procesu potomnego i kontynuuje działanie
Proces potomny uruchamia podany jako
argument program (exec).
17
Program make
Program make służy do automatyzacji
procesu kompilacji dużych projektów.
make i Makefile
Program make przeprowadza proces kompilacji zależnie od
potrzeb kompilowane są tylko pliki zródłowe które uległy
modyfikacji, oraz pliki, które od nich zależą.
Opis zależności między plikami zródłowymi plik
Makefile.
Plik Makefile składa się z reguł .
Reguły pliku Makefile
co ma być
co jest
zrobione
wymagane
skompilowane
do zrobienia
cel ... : wymagania
itd.
celu
polecenie
...
UWAGA!!!
jakie polecenia
musi być tabulacja
należy wykonać
Przykład pliku makefile
edit : main.o kbd.o command.o display.o \
insert.o search.o files.o utils.o
cc -o edit main.o kbd.o command.o display.o \
insert.o search.o files.o utils.o
main.o : main.c defs.h
cc -c main.c
kbd.o : kbd.c defs.h command.h
cc -c kbd.c
command.o : command.c defs.h command.h
cc -c command.c
display.o : display.c defs.h buffer.h
cc -c display.c
insert.o : insert.c defs.h buffer.h
cc -c insert.c
search.o : search.c defs.h buffer.h
cc -c search.c
files.o : files.c defs.h buffer.h command.h
cc -c files.c
utils.o : utils.c defs.h
cc -c utils.c
clean :
rm edit main.o kbd.o command.o display.o \
insert.o search.o files.o utils.o
Interpretacja reguł
Plik cel musi być uaktualniony (wykonanie określonego
polecenia lub poleceń) jeżeli któraś z wymaganych pozycji
ma datę modyfikacji nowszą niż cel .
Każda z wymaganych pozycji może mieć swoją regułę. Jest
ona sprawdzana, a pozycja, w razie potrzeby, uaktualniana.
Cel nie musi być nazwą pliku np. clean .
Przy wywołaniu make cel program make rozpoczyna
interpretację od reguły cel .
Przy wywołaniu make program make rozpoczyna
interpretację od
pierwszej reguły.
Stosowanie zmiennych
CC = gcc
FC = g77
CFLAGS = -Wall -O2 -DDEBUG
FFLAGS = -Wall -O2
LIBS = -ljk113 -lm
OBJ = mmh.o params.o fixh.o getstruct.o \
blist2crd.o jk_water_fixgeom.o
ALL: $(OBJ)
$(CC) $(CFLAGS) -o mmh -static $(OBJ) $
(LIBS)
clean:
rm -rf core *~ *.o mmh
Reguły domyślne
Program make ma wbudowany szereg domyślnych reguł,
np. mając wymagany plik main.o i obecny plik main.c,
wykona:
cc -c main.c -o main.o
Przykład: czyszczenie
katalogu
Sposób 1:
clean:
rm edit $(objects)
Sposób 2:
.PHONY : clean
clean :
rm edit $(objects)
Przykład: prosta reguła
foo.o : foo.c defs.h # module for twiddling the frobs
cc -c -g foo.c
Plik foo.o zostanie zbudowany jeżeli nie istnieje, lub jeżeli
jest starszy niż jeden z wymaganych plików: foo.c lub
defs.h
Znak # rozpoczyna komentarz.
Reguła z wzorcem
%.o : %.c
$(CC) -c $(CFLAGS) $(CPPFLAGS) $< -o $@
Reguła określa jak z dowolnego pliku .c zrobić .o
Wzorce: %.o %.c
Zmienne automatyczne:
$@ - nazwa celu .
@< - nazwa pierwszej pozycji wymaganej.
Przykład pliku makefile
CC = gcc
FC = g77
CFLAGS = -Wall -O2 -DDEBUG
FFLAGS = -Wall -O2
LIBS = -ljk113 -lm
OBJ = mmh.o params.o fixh.o getstruct.o \
blist2crd.o jk_water_fixgeom.o
ALL: $(OBJ)
$(CC) $(CFLAGS) -o mmh -static $(OBJ) $(LIBS)
clean:
rm -rf core *~ *.o mmh
%.o: %.C
$(CC) $(CFLAGS) -c $<
%.o: %.f
$(FC) $(FFLAGS) -c $<
Wyszukiwarka
Podobne podstrony:
07 Charakteryzowanie budowy pojazdów samochodowych9 01 07 drzewa binarne02 07str 04 07 maruszewski07 GIMP od podstaw, cz 4 Przekształcenia07 Komórki abortowanych dzieci w Pepsi07 Badanie „Polacy o ADHD”CKE 07 Oryginalny arkusz maturalny PR Fizyka07 Wszyscy jesteśmy obserwowaniR 05 0707 kaertchen wortstellung hswięcej podobnych podstron