SO3W 07


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 samochodowych
9 01 07 drzewa binarne
02 07
str 04 07 maruszewski
07 GIMP od podstaw, cz 4 Przekształcenia
07 Komórki abortowanych dzieci w Pepsi
07 Badanie „Polacy o ADHD”
CKE 07 Oryginalny arkusz maturalny PR Fizyka
07 Wszyscy jesteśmy obserwowani
R 05 07
07 kaertchen wortstellung hs

więcej podobnych podstron