Tof-21-2 Linux-C

You might also like

Download as pdf or txt
Download as pdf or txt
You are on page 1of 26

Tölvutækni og forritun

Fyrirlestur 2: Linux og C

Hjálmtýr Hafsteinsson
Haust 2021

"Heimadæmin er mjög góð til að skilja


námsefnið, gerið þau og gerið þau sjálf!"
Magnea, haust '20
Í þessum fyrirlestri
• Saga Unix og Linux
• Notkun Linux í þessu námskeiði
• Skráarkerfi Linux
– Helstu skipanir
• Kynning á C
– Notkun á krafla.rhi.hi.is
Saga Unix stýrikerfisins
• Multics (1964-1969)
– MIT, Bell Labs, GE
– Eitt fyrsta fjölverka (time share) stýrikerfið
• Ken Thompson (Bell Labs) skrifaði Unics
(1969)
– Nafninu síðar breytt í Unix
– Dennis Ritchie skrifaði
C-þýðanda og Unix í C
Ken Thompson Dennis Ritchie

Myndband með Thompson og Ritchie


Nýlegt viðtal við Ken Thompson
Saga Unix
• BSD (Berkely Software Distribution) Unix [1978]
– Bættu við ýmsum hugbúnaði og endurskrifuðu margt annað
• AT&T vildi fara að selja Unix [1982]
– GNU samtökin stofnuð til að endurskrifa Unix
– BSD skildi sig frá AT&T Unix "Battle between longhairs
and shorthairs"
• Andy Tanenbaum skrifaði Minix [1987]
– Fylgdi með kennslubók í stýrikerfum
• Linus Torvalds skrifaði Linux [1991]
– Upphaflega aðallega kjarninn, en síðan var GNU
hugbúnaðartólunum bætt við GNU/Linux
Áhrif Unix í dag
Nær allar
• Notað í um 70% af öllum vefþjónum sýndarvélar
keyra Linux
• Notað í öllum öflugustu tölvum heims
– TOP 500 (www.top500.org) [allar með Linux]
• Margar mismunandi útgáfur:
– Linux (ýmsar dreifingar)
– Fyrirtækjaútgáfur af Unix (Solaris, AIX, ...)
– Android og iOS byggja á Unix
• Innan við 10% notkun í notendatölvum (client)
Mest af því er vegna MacOS
Hugmyndafræði Unix
• Hvert forrit gerir einn hlut og gerir hann vel
– Auðveldara að skeyta þeim saman
• Nota hreinar textaskrár
– Hefur komið aftur með XML
• Flytjanleiki (portability) er mikilvægur
• Einfalt viðmót forrita
– Notendur forrita eru ekki alltaf fólk
• Nota stigveldi (hierarchy)
Mögulegar uppsetningar Setur upp
heimasvæðið
fyrir MS Windows ykkar sjálfkrafa

• Tengjast krafla.rhi.hi.is í gegnum PuTTY


– Sýndartölva sem keyrir CentOS 8.3 (Linux dreifing)
• VirtualBox og Linux mynd (.iso-skrá)
– Setja upp Linux dreifingu í VirtualBox (sjá distrowatch.com)
– Ubuntu og Mint eru góðar fyrir byrjendur
• Setja Linux upp sem dual-boot á tölvunni ykkar
• Webminal Þarf að skrá
sig fyrst
– Hægt að keyra Linux skipanalínu í vafra

Listinn er í röð eftir nytsemi/þægindum


Mögulegar uppsetningar
fyrir Linux / MacOS

• Hafið allt sem þarf!


– Opna skipanalínuglugga (terminal)
• Í MacOS:
– Opna Applications möppuna
– Undir henni er Utilities mappan
– Inni í henni er Terminal forritið
Ef þið viljið fara inná Kröflu þá er best að nota
ssh úr skipanalínuglugganum. Skipunin er:
ssh notandi@krafla.rhi.hi.is

HÍ notendanafn ykkar
Linux stýrikerfið

Notendaforrit ritvinnsla, vafrari, leikir, ...

Skel ls, cd, mkdir, gcc, ...

Kjarni opna skrár, hefja verk, ...

Vélbúnaður

Tölvunarfræðin notar oft stigveldi (abstraction


layers) til að auðvelda lausn flókinna verkefna
Skipulag kjarna
• Skráarkerfi
– Sér um að búa til skrár, opna skrár, loka skrám
• Ferlavinnsla (process management)
– Ferlar eru keyrslueiningar
– Úthlutar ferlum aðgangi að örgjörva
– Samskipti milli ferla
• Minnisstýring (memory management)
– Deilir minni tölvunnar upp á milli ferla
Skel (shell)
• Viðmót notandans að stýrikerfinu
– Leyfir notanda að keyra forrit
– Vinna með skrár
• Skel er forrit
– Hefur keyrslu þegar notandi skráir sig inn

Einföld skel:
meðan (satt)
lesa skipun
framkvæma skipun
endir
Skráarkerfi (file system)
• Skilgreint sem stigveldi (hierarchy)
• Rótin er /
– Aðeins ein rót
• / greinir á milli skráasafna í slóð
– Í stað \ í Windows Byrjar í rótinni

• Slóð getur verið bein (absolute) Skilgreind frá


– /home/hh/tof/verk1.txt núverandi stað

• Slóð getur verið afstæð (relative)


– tof/verk2.txt
Skráarkerfi
• Skelin heldur utanum núverandi skráarsafn
• Afstæðar slóðir bæta slóð núverandi skráarsafns við
Ef núverandi skráarsafn er /home/hh/
Afstæð slóð er tof/verk2.txt
Þá er full slóð /home/hh/tof/verk2.txt
• Sérstakar skrár
– Skráin . er núverandi skráarsafn
– Skráin .. er skráarsafnið fyrir ofan í stigveldinu
• Slóðin ~ er heimasvæði notandans
Helstu skráarkerfisskipanir
• ls Sýna innihald skráarsafns (list)
• cd Breyta núverandi skráarsafni (change directory)
• pwd Sýna núverandi skráarsafnsslóð (print working
directory)
• cp Afrita skrá (copy)
• mv Flytja skrá (move)
• rm Eyða skrá (remove)
Fleiri skipanir
• mkdir Búa til nýtt skráarsafn (make directory)
• rmdir Eyða skráarsafni (remove directory)
• cat Sýna innihald skrár (concatenate)
• more Sýna innihald skrá eina síðu í einu
• less Svipað og more, en fleiri möguleikar
• man Birta hjálp um skipun (manual page)
• exit Hættir í skelinni og lokar skipanaglugga
Skipanaviðföng (options)
• Flestar skipanir hafa valkosti sem stýra hegðun
• Skipunin ls hefur marga mögulega valkosti:
ls –l gefur ítarlegri upplýsingar (long)
ls –a sýnir allar skrár (líka þær sem byrja á .)
ls –t sýnir skrárnar í tímaröð
ls –r snýr við úttaksröð (reverse)
ls –1 sýnir skrárnar í einum dálki
• Má sameina valkosti
ls –al bæði –a og -l
Skipulag Linux skráarkerfis

cd <nafn>
fer niður í möppuna <nafn>

cd ..
fer upp í foreldramöppu

cd /
fer í rótina

cd ~
fer í heimamöppu notanda
Skrár
• Skrár í Unix eru runa bæta
– Engar innbyggðar skráartegundir
– Ýmsar venjur um endingar
• .c fyrir C forrit, .py fyrir Python, .txt fyrir textaskrár, ...
– Ef nafn skrár byrjar á . þá er hún falin
• Þarf að nota ls -a til að sjá þannig skrár
• Skráarsöfn (möppur) eru sérstakar skrár sem
innihalda upplýsingar um skrár
– Nafn, staðsetningu á diski, stærð, eiganda, ...
Saga C
• Hannað af Dennis Ritchie [1972-73]
– Upphaflega til að skrifa tól fyrir Unix, en síðan
var Unix endurskrifað í C
• Byggt á forritunarmálinu B, en undir áhrifum frá Algol
• Lengi skilgreint af bók eftir Kernighan og Ritchie (K&R)
– Síðan staðlað af ANSI/ISO
– Staðlar: C99, C11 og nú C18
• Ráðandi í Unix/Linux forritun
– Líka mikið notað í ívafsforritun (embedded programming)
Af hverju C?
• C er mun nær vélbúnaðinum en flest önnur æðri forritunarmál
– Auðveldara að laga forritin að vélbúnaðinum
• Mikið notað til að skrifa kerfishugbúnað
– Java sýndarvélin (JVM) er skrifuð í ANSI C
– Linux er skrifað í C (og smá smalamáli)
– Windows er skrifað í C (og C++)
– Oracle gagnasafnskerfið er skrifað í C (og C++)
• Að kunna C mun gera ykkur að betri Java/Python forriturum
– Skiljið betur hvernig ýmislegt er útfært
• Eitt mest notaða forritunarmálið
– Sjá TIOBE vísinn
Halló heimur í C

Setur inn "hausaskrá".


Notað fyrir forritasöfn

Verðum að hafa main fall. Getum


náð í fjölda og innihald viðfanga á
#include <stdio.h>
skipanalínu

int main(int argc, char **argv)


{ Úttaksskipunin printf. Notum
'\n' til að fá nýja línu
printf("hello world\n");
return 0;
}

Verðum að skila heiltölu úr


main. 0 þýðir að allt sé í lagi
Dæmigerð þýðingarskipun

$ gcc -Wall -g -o hello hello.c

Nafnið á keyrsluskránni,
Gefa allar viðvaranir annars er það a.out
(Warnings: all)
Búa til kembi (debugging) Ein eða fleiri C
upplýsingar fyrir gdb forritaskrá
Þýðing á C forriti

hello.c hello.i hello.s


Forvinnsla Þýðandi Smali
Frumkóði (cpp) Breyttur (cc1) Smalamáls- (as)
(texti) frumkóði forrit (texti)
(texti)
hello.o

printf.o Færanlegur
viðfangskóði
• Forvinnsla (preprocessing): (tvíundarkóði)
– Setja inn innfluttar skrár
– Útvíkka fjölva (macro)
• Smali (assembler) hello Tengir
– Býr til vélarmálskóða sem hægt Keyrsluforrit (ld)
er að tengja við forritasöfn (tvíundarkóði)
Framkvæmd keyrsluskráa
• Við keyrum keyrsluskránna hello með:
$ ./hello ATH: ./ á
undan nafninu!

– Við þurfum að gefa upp slóðina á núverandi möppu!


– Af hverju ekki að bæta núverandi möppu í PATH
breytuna?
• Það er hægt, en af öryggisástæðum er það ekki ráðlegt
• Ef við höfum keyranlega skrá í núv. möppu sem heitir það
saman og stýrikerfisskipun, t.d. ls, þá gæti hún keyrst í
stað stýrikerfisskipunarinnar
Þekkt innbrotsaðferð í tölvur
Fyrirlestraæfingar
1. Á hvaða útgáfu af Unix byggir macOS?
2. Hvernig sýnir skipunin "ls -alr" skrárnar í
núverandi skráarsafni?
3. Hvaða forritunarmál er næstvinsælasta
forritunarmálið, samkvæmt TIOBE?

You might also like