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 <h>, <j>, <k>, <l>, 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
ró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: <Ctrl> + <p> uzupe-
nienie
ł
wprowadzanego wzorca poprzez dopasowanie go do wzorca znajduj cego
ą
się „u góry”, <Ctrl> + <n> to samo co poprzednio, ale wzorzec znajduje się „na
dole”, <Ctrl> + <W> przej cie
ś
mi dzy
ę
otwartymi oknami, <Esc> 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 <F2> :set nowrap<cr> "zmapuj klawisze F2 – wy cz zawijanie wierszy
łą
map <F3> :set wrap<cr> "F3 – w cz zawijanie wierszy
łą
map <F4> :set number<cr> "F4 – w cz numeracje wierszy
łą
map <F5> :set nonumber<cr> "F5 – wy cz numeracje wierszy
łą
map <F6> :set showmatch<cr> "F6 – w cz parowanie nawiasów
łą
1
map <F7> :set noshowmatch<cr> "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ę ró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 led
ś
ź jego wykonanie za pomoc gdb (skorzystaj z pomocy w tym
ą
programie, wydaj c polecenie help).
ą
8