Naprej Nazaj Kazalo

10. Kanček programiranja

10.1 Skripte: datoteke .BAT na steroidih

Če ste, tako kot pisec, uporabljali datoteke .BAT za to, da ste dolge ukazne vrstice nadomestili z bližnjicami, ste medtem verjetno že ugotovili, da gre na Linuxu to z vzdevki v datoteki .profile. Če pa so bile vaše datoteke .BAT bolj zapletene, boste gotovo navdušeni nad skriptnim jezikom, ki ga ponuja ukazna lupina. Vsaj tako močan je kot stari dobri QBasic, če ne bolj. Pozna spremenljivke, strukture kot while, for, case, if..then..else, in veliko drugih dobrot; lahko ga imamo za dobro alternativo ,,pravim`` programskim jezikom.

Skript -- ekvivalent datoteki .BAT v DOS -- je enostavna tekstovna datoteka z ukazi, ki jo lahko napišemo s katerimkoli urejevalnikom, shranimo, in napravimo izvedljivo z ukazom chmod +x <moja_skript>. Poženemo ga enostavno tako, da vtipkamo njegovo ime.

Majhno opozorilo. S sistemskim urejevalnikom vi ima večina novih uporabnikov precejšnje težave. Tukaj ne bomo razlagali, kako se ga uporablja, bralec naj poišče razlago v knjigi ,,Namestitev in začetek dela z Linuxom`` ali pa v priročnikih, ki so dostopni v internetu. Zadovoljiti se boste morali z najnujnejšim:

Dober urejevalnik za začetnike je joe. Če ga pokličemo z imenom jstar, se obnaša enako kot urejevalnik v DOS. jed v načinu WordStar ali IDE je še boljši. O tem, kje najdete enega in drugega, se poučite v razdelku Kje najdemo programe.

Pisanje skript v bash je tako obsežna tema, da bi sama zahtevala celo knjigo. Tu se ne bomo več spuščali v globine te teme, ampak bomo navrgli samo še en primer skripte, iz katerega se lahko naučite nekaj osnovnih pravil:


#!/bin/sh
# zgled.sh
# To je komentar
# Ne spreminjajte prve vrstice!
echo "Sistem: `uname -a`"       # uporabimo izpis zunanjega ukaza uname
echo "Tej skripti je ime $0"    # vgrajene spremenljivke
echo "Podali ste $# parametrov; ti so: "$*
echo "Prvi parameter je: "$1
echo -n "Vaše ime? " ; read ime
echo Opazite razliko: "hi $ime" # dvojni narekovaji
echo Opazite razliko: 'hi $ime' # enojni narekovaji
DIRS=0 ; FILES=0
for file in `ls .` ; do
  if [ -d ${file} ] ; then      # imenik?
    DIRS=`expr $DIRS + 1`       # DIRS = DIRS + 1
  elif [ -f ${file} ] ; then
    FILES=`expr $FILES + 1`
  fi
  case ${file} in
    *.gif|*jpg) echo "${file}: slika" ;;
    *.txt|*.tex) echo "${file}: besedilo" ;;
    *.c|*.f|*.for) echo "${file}: izvorna koda programa" ;;
    *) echo "${file}: druga datoteka" ;;
  esac
done
echo "Imenikov je ${DIRS}, datotek pa ${FILES}"
ls | grep "ZxY--!!!WKW"
if [ $? != 0 ] ; then           # izhodna koda zadnjega ukaza
  echo "ZxY--!!!WKW not found"
fi
echo "dovolj... 'man bash' vam bo postregel z dodatnimi informacijami."

10.2 C za vas

V Unixu je sistemski jezik C, najsi vam je všeč ali ne. Na voljo pa je tudi kopica drugih jezikov: Java, Fortran, Pascal, Lisp, Perl, Awk...

Ker verjamemo, da C že znate, bomo tu le navedli nekaj napotkov za tiste, ki vas je razvadil Turbo C++ ali kaj sorodnega. Prevajalnik za C na Linuxu se imenuje gcc in ne vključuje lepot, kot jih njegovi dvojniki v DOS: ne vsebuje integriranega okolja za delo, interaktivne pomoči, integriranega razhroščevalnika in podobnega. Je res samo surovi prevajalnik, ki ga poženemo iz ukazne vrstice (kot prevajalnik pa je resda zelo močan in učinkovit). Običajni programček hello.c prevedemo z ukazom:

$ gcc hello.c

To bo proizvedlo izvedljiv program z imenom a.out. Če želimo izvedljiv program poimenovati kako drugače, lahko to navedemo v ukazni vrstici, npr.:

$ gcc -o hola hello.c

Če bi radi v izvedljiv program povezali še knjižnico, dodamo izbiro -l<ime_knjižnice>. Takole na primer povežemo program s standardno matematično knjižnico:

$ gcc -o matemprog matemprog.c -lm

(Izbira -l<nekaj> pove prevajalniku gcc, naj v izvedljiv program poveže še knjižnico /usr/lib/lib<nekaj>.a; tako -lm iz prejšnjega zgleda poveže knjižnico /usr/lib/libm.a).

To je takorekoč vse, kar boste potrebovali za prevajanje kratkih programčkov. Kadar pa pišete dolg program, katerega izvorna koda je razbita v več manjših datotek, si boste precej olajšali delo s programom make. Recimo, da pišete razčlenjevalnik izrazov. Izvorna koda se imenuje parser.c in kliče deklaracije iz glav parser.h in xy.h. Funkcije, definirane v parser.c pa želite uporabiti v drugem programu, recimo calc.c, ki prav tako prebere glavo parser.h. Kakšna zmešnjava! Kaj morate torej napraviti, da prevedete calc.c?

Kar morate napraviti, je napisati takoimenovani Makefile, ki vodi evidenco o odvisnostih med izvornimi ter prevedenimi datotekami. V našem primeru bi bila takšna:


# makefile za prevajanje calc.c
# Vnesite <TAB> kjer je označeno

calc: calc.o parser.o
<TAB>gcc -o calc calc.o parser.o -lm
# Program calc je odvisen od dveh prevedenih datotek: calc.o in parser.o

calc.o: calc.c parser.h
<TAB>gcc -c calc.c
# calc.o je odvisen od izvorne datoteke calc.c in glave parser.h

parser.o:  parser.c parser.h xy.h
<TAB>gcc -c parser.c
# parser.o je odvisen od izvorne datoteke parser.c in dveh glav

# To je vse.

Shranite to datoteko pod imenom Makefile. Zdaj preprosto napišete make, ki bo prevedel cel paket. Alternativno jo lahko shranite tudi pod drugačnim imenom, denimo calc.mak, le da boste to ime zdaj morali navesti kot parameter: make -f calc.mak. Več o tem se boste naučili ob branju priročnika. Tudi funkcije iz standardne knjižnice imajo svoje strani v priročniku, in sicer v tretjem poglavju. Zgled kaže, kako do navodil za funkcijo printf:

$ man 3 printf

Napake v programih lahko odpravljate z razhroščevalnikom gdb. Ukaz info gdb vas bo poučil o podrobnostih.

Programerju je na voljo zelo veliko število različnih knjižnic. Med prvimi, ki se jih boste morda ogledali, sta ncurses, ki podpira delo z znakovnim zaslonom, ter svgalib za delo v grafičnem načinu. Mnogi urejevalniki se tudi lahko obnašajo kot integrirano okolje.emacs in jed, na primer, podpirata barvanje sintakse, zamikanje programske kode in podobno. Alternativa pa je paket rhide, ki ga lahko snamete z ftp://metalab.unc.edu:/pub/Linux/devel/debuggers/. Je kopija Borlandovega integriranega okolja, in precej verjetno je, da vam bo všeč.

10.3 Programiranje v oknih X

Če ste dovolj pogumni, da se boste lotili programiranja za X11 (ni tako zapleteno, koz se sprva zdi!), obstaja več knjižnic, ki pisanje programov za X11 znatno olajšajo. Glavni mesti, ki ju boste želeli obiskati, sta domača stran knjižnice GTK+, http://www.gtk.org, in domača stranj knjižnice Qt, http://www.troll.no. Knjižnica GTK+, zasnovana za jezik C, obsega nabor grafičnih elementov, ki je bil prvotno uporabljen za grafični paket GIMP http://www.gimp.org, zdaj pa ga uporablja tudi namizje GNOME. Kdeveloper, na drugi strani, temelji na knjižnici Qt, prirejeni za delo s C++, in uporabljeni v namizju KDE. Najverjetneje boste uporabili eno od teh dveh knjižnic.

Nekatera najboljša orodja za slikovno programiranje so Kdevelop za Qt, http://www.kdevelop.org, in Glade za GTK+, http://glade.pn.org. Več informacij najdete tudi na strani http://www.free-soft.org/guitool/.

Programiranje za več strojnih okolij

Kaj ne bi bilo sijajno, če bi lahko pisali programe, ki bi se s prevajalnikom gcc brez sprememb prevedli tako v Linuxu kot v Windows? V času tega pisanja obstaja nekaj kolikor toliko stabilnih naborov grafilčnih elementov, ki delujejo v več okoljih. Če kot prioriteti postavimo stabilnost in popolnost, se izbor bolj ali manj zoži na eni samo ime: FLTK, Fast Light Tool Kit http://www.fltk.org. Presenetljivo majhen, hiter in stabilen je. Ima tudi delno vizualni sestavljalnik programov, imenovan Fluid.


Naprej Nazaj Kazalo