background image

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

ż

background image

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

background image

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

background image

: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

background image

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

background image

#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

background image

        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

background image

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