SO2 instrukcja 1


Instrukcja do laboratorium Systemów Operacyjnych
Ćwiczenie pierwsze
Temat: Wprowadzenie do edytora vim, kompilatora gcc,
podręcznika man i systemu operacyjnego Linux
Opracowanie:
mgr inż. Arkadiusz Chrobot
Wprowadzenie
1. Edytor VIM
Edytor tekstowy VIM jest rozbudowaną wersją edytora VI, najstarszego i naj-
bardziej rozpowszechnionego w środowiskach uniksowych edytora przeznaczo-
nego dla programistów. Mimo na pozór trudnej do opanowania obsługi stanowi
on bardzo elastyczne i wygodne środowisko dla programisty. VIM działa
w trzech trybach: edycji, wprowadzania i poleceń. W trybie edycji kursorem
można poruszać przy pomocy klawiszy , , , , jak również posługu-
jąc się klawiszami kursorów. W tym trybie niektórym klawiszom, lub ciągom
wpisanym przy pomocy klawiatury przypisano działania związane z operacjami
na tekście. Oto kilka najważniejszych przykładów:
yy  kopiuje do bufora linię tekstu pod którą znajduje się kursor,
y10y  kopiuje do bufora 10 linii tekstu zaczynając od tej pod którą znajduje się
kursor (zamiast 10 może wystąpić inna liczba)
p  wkleja tekst z bufora do miejsca, w którym znajduje się kursor,
10p  robi to co p, tylko 10 razy (zamiast 10 może wystąpić inna liczba),
dd - usuwa linię tekstu pod którą znajduje się kursor (można ją wkleić
klawiszem p w inne miejsce),
d10d - tak jak wyżej, ale 10 linii, (zamiast 10 może wystąpić inna liczba)
x  kasuje znak pod którym znajduje się kursor (uwaga: pięć znaków można
skasować poleceniem 5x),
u  polecenie cofnięcia ostatniej zmiany (ang. undo) - jest wielopoziomowe,
yw  skopiowanie wyrazu do bufora,
dw  usunięcie wyrazu,
cw  usunięcie wyrazu i przejście do trybu wprowadzania,
a  przesunięcie kursora o jedną pozycję w prawo i przejście do trybu wprowa-
dzania,
i  przejście do trybu wprowadzania,
r  zmiana jednego znaku,
R  przejście do trybu wprowadzania z nadpisywaniem (podobnie działa klawisz
insert),
* - wyszukanie kolejnego wystąpienia wzorca znajdującego się pod kursorem,
2
K  wyszukanie strony podręcznika man, dla instrukcji pod którą znajduje się
kursor,
== - formatuje wcięcie pojedynczego wiersza kodu,
=G  formatuje wcięcia kodu począwszy od bieżącego położenia kursora do
końca,
gg  umieszcza kursor na początku pliku z kodem/tekstem,
G  umieszcza kursor na końcu pliku z kodem/tekstem.
Tryb wprowadzania, jak sama nazwa wskazuje służy do wprowadzania tekstu
programu (kodu zródłowego). Edytor VIM oferuje wiele udogodnień uła-
twiających pracę programisty, jak podświetlanie składni, czy numerowanie li-
nii. Niektóre z nich trzeba uaktywnić w trybie poleceń, jednak część z nich do-
stępna jest poprzez odpowiednie kombinacje klawiszy np: +

uzupe-
łnienie wprowadzanego wzorca poprzez dopasowanie go do wzorca znajdującego
się  u góry , + to samo co poprzednio, ale wzorzec znajduje się  na
dole , + przejście między otwartymi oknami, przejście do try-
bu edycji. W trybie poleceń dostępne są następujące opcje:
/wzorzec  znajduje wystąpienie wzorca w pliku, przeszukiwanie  w dół ,
?wzorzec  jak wyżej, ale  w górę ,
!polecenie  wykonanie polecenia powłoki,
:q  wyjście z edytora,
:q! - wyjście z edytora, bez zapisywania zmian,
:wq  wyjście z zapisaniem zmian,
:sp  podzielenie bieżącego okna na dwie części,
:e nazwapliku  otwarcie pliku do edytowania,
:s/wzorzec/zastąpienie  zastąpienie wzorca podanym ciągiem w linii, w której
znajduje się kursor,
:%s/wzorzec/zastąpienie  to samo co wyżej, ale dla całego pliku,
:%s/wzorzec/zastąpienie/g  to samo co wyżej, ale również dla każdego wy-
stąpienia wzorca w wierszu,
:set number  włączenie numeracji wierszy,
:set nonumber  wyłączenie numeracji wierszy,
:tabnew  otworzenie nowej karty (od wersji 7.0),
:tabnext  przejście do następnej karty (od wersji 7.0),
3
:tabprev  przejście do poprzedniej karty (od wersji 7.0),
:10  przeniesienie kursora do wiersza o podanym numerze,
:make  wykonanie kompilacji bez opuszczania edytora, o ile istnieje plik make-
file,
:cnext  wyszukanie kolejnego błędu w kodzie, jeśli kompilacja się nie powiodła,
:cprevious  to co wyżej, ale poprzedniego błędu,
:clist  wypisuje skróconą listę błędów,
:clist! - wypisuje pełną listę błędów.
Część z tych poleceń może zostać automatycznie wykonana po uruchomieniu
VIMa, jeśli zostaną zapisane w pliku .vimrc. Oto przykładowy taki plik:
set nocp "wyłącz tryb kompatybilności z VI
set nowrap "wyłącz zawijanie wierszy
set autoindent shiftwidth=8 "ustaw głębokość wcięć na 8 znaków
set showcmd "pokaż komendy wpisywane w trybie edycji
map :set nowrap "zmapuj klawisze F2  wyłącz zawijanie wierszy
map :set wrap "F3  włącz zawijanie wierszy
map :set number "F4  włącz numeracje wierszy
map :set nonumber "F5  wyłącz numeracje wierszy
map :set showmatch "F6  włącz parowanie nawiasów1
map :set noshowmatch "F7  wyłącz parowanie nawiasów
2. Podręcznik man
Podręcznik man zawiera opisy poleceń powłoki, oraz funkcji języka C. Składnia
wywołania jest następująca: man nazwa polecenia. W przypadku, kiedy istnieje
zarówno funkcja, jak i polecenie o takiej samej nazwie, to należy podać jeszcze
stronę podręcznika, np.: man 3 printf.
3. Kompilator gcc i inne narzędzia do tworzenia programów
Kompilator gcc jest tak naprawdę zbiorem kompilatorów stworzonym przez or-
ganizację GNU. Kompilator ten wywołuje się podając mu argumenty w linii po-
leceń. W najprostszym przypadku wystarczy napisać: gcc nazwa.c, ale za-
lecanym sposobem jest: gcc -Wall -o nazwa nazwa.c, gdzie flaga -o oznacza na-
zwę zbioru wynikowego, a flaga -Wall nakazuje włączenie wszystkich ostrzeżeń.
1 W tym trybie, jeśli stawiamy nawias zamykający, to kursor na sekundę wraca do nawiasu
otwierającego
4
Oczywiście powyższe wywołanie może przyjąć formę bardziej złożoną. W takim
wypadku, aby uniknąć wielokrotnego wpisywania długich poleceń możemy się
posłużyć programem o nazwie make. Aby to uczynić należy przygotować plik
o nazwie makefile w katalogu, w którym znajdują się zródła programu. Treść
takiego pliku tworzymy według następującego schematu (linie zaczynające się
od  # stanowią komentarz):
reguła: reguła1 reguła2 #po nazwie reguły umieszczamy opis wymagań
akcja
#Pusty wiersz
reguła1:
akcja
#Pusty wiersz
reguła2:
akcja
Z powyższego przykładu wynika, że wymagania co do reguł są opcjonalne i nie-
koniecznie musimy je wypisywać. Domyślnie wykonywana jest pierwsza za-
deklarowana w pliku reguła. Możliwa jest również deklaracja na początku pliku
pewnych stałych do których się będziemy odwoływać poprzedzając je znakiem
dolara. Oto przykład rozbudowanego pliku makefile:
CC = gcc #stała oznaczająca nazwę kompilatora
OFLAGS = -Wall -O2 -o #stała przechowująca flagi wywołania kompilatora
#Pusty wiersz
all: primitive primitive16 check_prim check_prim_16
#Pusty wiersz
#Pusty wiersz
primitive:primitive.c #Reguła primitive wymaga pliku primitive.c by zadziałać
$(CC) $(OFLAGS) primitive primitive.c
#Pusty wierz
primitive16:primitive16.c
$(CC) $(OFLAGS) primitive16 primitive16.c
#Pusty wiersz
check_prim:check_prim.c
$(CC) $(OFLAGS) check_prim check_prim.c
5
#Pusty wiersz
check_prim_16:check_prim_16.c
$(CC) $(OFLAGS) check_prim_16 check_prim_16.c
#Pusty wiersz
clean:
rm -f *~
rm -f core*
#Pusty wiersz
cleanprimitive:
rm -f *~
rm -f core*
rm -f primitive
#Pusty wiersz
cleanprimitive16:
rm -f *~
rm -f core*
rm -f primitive16
cleancheck_prim:
rm -f *~
rm -f core*
rm -f check_prim
#Pusty wiersz
cleancheck_prim_16:
rm -f *~
rm -f core*
rm -f check_prim_16
#Pusty wiersz
cleanall:
rm -f *~
6
rm -f core*
rm -f primitive
rm -f check_prim
rm -f check_prim_16
rm -f primitive16
Proszę zwrócić uwagę, że reguła all jest regułą pustą - w miejscu gdzie powinna
być zdefiniowana jej akcja znajduje się pusty wiersz. Mimo tego jest to pierwsza
reguła i program make spróbuje ją wykonać. Aby mógł to zrobić musi być spe-
łniona lista wymagań, co pociągnie za sobą realizację wszystkich reguł wy-
mienionych na tej liście. Akcje opisane wyrażeniami zawierającymi odwołania
do stałej są odpowiednio rozwijane, np. akcja $(CC) $(OFLAGS) primitive pri-
mitive.c jest rozwijana do gcc -Wall -o primitive primitive.c. Niektóre reguły nie
są powiązane z regułą all (w przykładzie służą do usuwania plików, które w
danej chwili nie są potrzebne). Wywołujemy je według schematu: make
nazwa_reguły (np. make clean).
Do usuwania błędów możemy użyć debuggera gdb, aby się nim posłużyć musi-
my dodać flagę -g do wywołania kompilatora, a następnie wywołać polecenie:
gdb nazwa, gdzie nazwa oznacza nazwę pliku wykonywalnego. Debugger
umożliwia procę w trybie interaktywnym. Oto lista najważniejszych instrukcji
dostępnych w tym programie:
break  ustawia pułapkę w wybranym wierszu programu np. break 6,
clear  usuwa pułapkę z określonego wiersza np. clear 6,
delete  usuwa wszystkie pułapki,
print  wypisuje wartość zmiennej, np. print liczba,
step  wykonuje jeden wiersz programu,
next  jak wyżej, ale wchodzi do funkcji,
run  uruchamia program, musi być wykonana przed step i next. Należy
także pamiętać o ustawieniu pułapki w odpowiednim wierszu.
continue  kontynuuje wykonanie programu, po tym jak został on prze-
rwany po napotkaniu pułapki.
Zadania:
1. Uruchom program vimtutor i zapoznaj się z działaniem edytora VIM.
2. Napisz program typu  hello world w języku C i skompiluj go. Usuń wszelkie
ostrzeżenia pojawiające się podczas kompilacji.
7
3. Napisz własny plik makefile i przetestuj działanie polecenia make.
4. Napisz program zawierający prostą funkcję i pętlę  for . Skompiluj go z opcją -g
i prześledz jego wykonanie za pomocą gdb (skorzystaj z pomocy w tym
programie, wydając polecenie help).
8


Wyszukiwarka


Podobne podstrony:
SO2 instrukcja 4 Kolejki komunikatów
SO2 instrukcja 4
SO2 instrukcja 8
SO2 instrukcja 9
SO2 instrukcja 5
SO2 instrukcja 2 Procesy i sygna éy
SO2 instrukcja 7
SO2 instrukcja 6 Pamięć dzielona
SO2 instrukcja
SO2 instrukcja 3 Łącza komunikacyjne, nienazwane i nazwane

więcej podobnych podstron