original in en Katja Socher
en to ne Rob Huls
Katja is de Duitse redacteur van LinuxFocus. Ze werd Linuxgebruiker toen ze een aantal jaren geleden voor het eerst in aanraking kwam met Gimp. Haar homepage staat hier.
Het boek"Beginning Linux Programming - Second Edition" is een inleiding in de Linux omgeving voor ervaren C programmeurs die al wat basiskennis van Linux hebben. Het boek behandelt de concepten en ideeën die Linux de programmeur biedt en maakt de lezer ook bekend met een aantal van de geweldige programmeer hulpmiddelen die Linux biedt, zoals Perl, Tk of GTK+. |
Als je het boek koopt krijg je niet alleen twee kilo papier, maar ook een heleboel informatie over een breed scala aan onderwerpen. Het is geen boek voor beginners, maar een introductie tot een breed spectrum van concepten en hulpmiddelen op het gebied van programmeren onder Linux. Elk hoofdstuk geeft een grondige introductie van het onderwerp zodat je er na het lezen al een heleboel over weet en al een heleboel zaken zelf op kunt lossen. Nadat je het boek gelezen hebt ben je uiteraard geen expert in een van de onderwerpen. Je zult echter veelal voldoende weten en je zult in elk geval in staat zijn jezelf verder te helpen met het lezen van man-pagina's en andere documentatie. Deze is dan ook veel beter bij de tijd over de snel veranderende onderwerpen dan een boek ooit kan zijn.
De auteurs geven ons een indruk van wat je nu heb beste aanvangt met een bepaald hulpmiddel en waarvoor een hulpmiddel bij uitstek geschikt -en efficient- is. Je krijgt een idee van wat mogelijk, welke hulpmiddelen te gebruiken en waar je moet beginnen met het zoeken naar verdere details.
Je krijgt een goed beeld van de vele mogelijkheden die je hebt als Linux-programmeur. Je kunt dan zelf bepalen waar je meer tijd aan wilt besteden, welke onderwerpen voor jou het meest relevant zijn en verdere studie waard zijn. Het boek laat je dus toe het gebied te kiezen waarin je je wilt specialiseren.
Hoewel het slechts een begin is, behandelt het zo veel dat je het, nadat je het hebt gelezen, steeds weer als naslagwerk gebruikt telkens je op zoek bent naar oplossingen van programmeerproblemen en hun implementatie.
Het is duidelijk een boek voor programmeurs door programmeurs, waarin twee zeer ervaren Linux ontwikkelaars hun kennis met anderen delen. Ze doen dat met veel voorbeelden die ze in detail toelichten. Door deze voorbeelden raak je veel sneller bekend met de materie en zie je hoe de behandelde ideeen en concepten in de praktijk gebruikt kunnen worden. Je zult vaak zien dat je deze voorbeelden, soms in licht gewijzigde vorm, in je eigen projecten kunt gebruiken. Ik vond deze voorbeelden erg nuttig voor het begrijpen en uitdiepen van de materie.
Naast de vele voorbeelden in ieder hoofdstuk ontwikkelen de auteurs doorheen het hele boek een CD applicatie, waarin ze de net geleerde concepten toepassen. Gedurende het hele boek wordt de applicatie verder en verder uitgebreid en verbeterd. Deze zorgvuldig toegelichte toepassing vond ik van grote waarde.
Het boek begint met een korte inleiding over Linux en de filosofie erachter. Ook het gebruik van C en zijn bibliotheken wordt verduidelijkt. Vervolgens wordt er een uitstapje gemaakt naar het programmeren van de shell. Na enkele algemene concepten als 'redirection' en 'pipes', introduceert het boek de shell als programmeertaal en de concepten van o.a. variabelen, voorwaarden, programma controle, lijsten, functies en "here documents".
Hoofdstuk 3 legt het Linux concept van bestanden uit, waarbij alles, zelfs hardware componenten, een aanduiding als file krijgen. Het begint met systeemaanroepen op laag niveau en in de loop van het hoofdstuk gaan de auteurs verder met het uitleggen van de standaard I/O bibliotheek.
Hoofdstuk 4 behandelt de Linux omgeving. De auteurs bespreken o.a. argumenten op de prompt en ongevingsvariabelen waarmee je het standaard gedrag van een programma kunt beinvloeden. Ze laten ook zien hoe een programma gebruik kan maken van functies uit een bibliotheek om datum- en tijdwaarden te manipuleren alsmede informatie over zichzelf, de gebruiker en de computer waarop het draait te verkrijgen.
Het volgende hoofdstuk gaat over terminals en over de verschillende aspecten van de manieren waarop een terminal bediend kan worden. Na deze inleiding wordt de curses bibliotheek behandeld, waarmee output grafisch kan worden weergegeven op een een terminal scherm.
Hoofdstuk 7 over data management gaat over dynamisch geheugenbeheer, bestandsvergrendeling en het vergrendelen van delen van gedeelde bestanden en geeft tot slot een inleiding in de dbm-database.
Hoofdstuk 8 introduceert ontwikkelhulpmiddelen, die de ontwikkeling en
distributie van programma's beheersbaar maken. Eerst worden make
en
makefile
behandeld om meerdere bronbestanden te beheren. Daarna komt
broncode controle met RCS
en CVS
aan bod. Tot slot worden
patch
, tar
en gzip
genoemd, die gebruikt
worden voor het verspreiden en updaten van programma's.
Hoofdstuk 9 gaat over debuggen. Nadat wat algemene zaken over debuggen
besproken zijn wordt de GNU debugger gdb
geintroduceerd. Statische analyse
tools als cflow
en lclint
worden ook genoemd. Tot slot worden twee
hulpmiddelen behandeld die geheugenlekken kunnen voorkomen,
te weten Electric Fence en Checker.
Hoofdstuk 10 behandelt processen en signalen, die bijna alle activiteiten
op een Linuxsysteem beheersen. Het begint met de proces-structuur en bespreekt
vervolgens het starten van nieuwe processen met het commando fork
.
Vervolgens wordt de programmeer interface voor signalen
behandeld aan de hand van een aantal voorbeelden.
Hoofdstuk 11 gaat over Posix threads. Het begint met het uitleggen van het verschil met processen en introduceert dan de benodigde mutexes en semaphoren om meer complexe multi-threaded (meerdradige) programma's te schrijven.
De volgende hoofdstukken houden zich bezig met de communicatie tussen processen onderling. Eerst worden pipes uitgelegd. Normale naamloze pipes, pipes met een naam (FIFOs) en de manier waarop je data van het ene programma naar het andere doorgeeft worden toegelicht.
Daarna worden semaphoren, gedeeld geheugen en berichtenrijen (message queues) behandeld. Semaphoren gebruik je om te voorkomen dat twee processen tegelijkertijd een kritische sectie benaderen en zijn nodig voor het gebruik van gedeeld geheugen, wat een efficiënte manier is om gegevens te delen en door te geven tussen verschillende processen. Berichtenrijen zijn een redelijk eenvoudige en efficiente manier om data door te geven tussen twee niet-gerelateerde processen.
Tot slot worden sockets behandeld, die gebruikt kunnen worden als pipes, maar die op een netwerk draaien.
Hoofdstuk 15 gaat over Tcl
, de Tool Command Language. De auteurs hebben
het onder meer over commando's en controle structuren, strings en lijsten in
Tcl, invoer en uitvoer alsook Tcl uitbreidingen en programma's.
Na een kort overzicht van X wordt Tk behandeld, de grafische toolkit voor Tcl. De vele widgets (grafische elementen) die Tk biedt, zoals frames, labels, knoppen, boxen, schuifbalken, schalen, tekst en canvas worden behandeld. Er wordt een voorbeeld gegeven van een beeldpuzzel met vijftien stukjes en de concepten van menu's , dialogen, kleurschema's, lettertypen, binding, geometrie beheersing en focus en navigatie worden uitgelegd.
Vervolgens worden Gnome en Gtk+ doorgenomen. De Gnome architectuur en de Gnome desktop, programmeren voor Gnome met behulp van Gtk+ en de Gtk+ widget set passeren de revu. De mogelijkheden zijn enorm en zelfs groter dan onder Tk. De auteurs ontwikkelen ook een programma onder Gnome, te weten een analoge klok.
Het volgende hoofdstuk in een hele korte introductie in programmeren met Perl.
Hoofdstuk 19 leert de basis van HTML en dient als inleiding in het programmeren in CGI, dat behandeld wordt in het hoofdstuk erna. Daar vertellen de auteurs hoe we de HTML formulieren moeten maken die nodig zijn aan de kant van de client. Ze hebben het ook over het verzenden van de informatie naar de server en over het decoderen van de informatie in C of Perl. Ter afronding leggen ze nog uit hoe je vervolgens feedback terug geeft aan de client.
Het boek besluit met een hoofdstuk over device drivers en hoe die geschreven moeten worden. Het behandelt onder meer karakter- en block apparaten (character and block devices) alsmede het debuggen van code in de kernel.
Als je systeembeheerder, programmeur of een ware Linux liefhebber bent zul je zeker van dit boek genieten.