<URL:http://www.docs.uu.se/~perg/course/datakom/dv96/dbman.html>

Uppgift i datakommunikation

Manualer och material

Manualer

Ni förväntas i denna uppgift redan kunna programmera i C. Så gott som all information ni behöver utanför själva språket finns tillgängligt på de system ni ska använda för att lösa uppgifterna.

Sammanställning av manualer

Huvudsakligen kan man dela in den information ni behöver i fyra avdelningar:

  1. Dokumentation av standardbiblioteket för C. Denna brukar finnas i de flesta C-böcker, men finns även i maskinläsbar form via man-systemet.
    "man funktionsnamn" funkar om man vet exakt vad man letar efter.

  2. Om ni inte vill skriva databasen helt själva, slå upp manualsidorna för ndbm. Observera att det även finns en äldre version som heter "dbm", men den finns bara kvar för gamla program som inte konverterats till att använda ndbm.
    Se även Dokumentation av ndbm i dessa instruktioner.

  3. Dokumentation av UDP och socket-funktioner i BSD UNIX. Kommunikation via TCP/IP och UDP/IP på BSD-besläktade UNIXar sker normalt via sockets, ett mer generellt system för kommunikation mellan processers.
    Se även Översikt av UDP och socket-kommunikation

  4. Hantering av avbrott och timeout. Man vill på ett eller annat sätt få sina program att inte vänta oändlig tid på svar från en server eller klient som kanske har kraschat.

man-systemet

Kommandot man använder för att slå upp manualer heter "man", och man kan få mer information om kommandot genom att skriva:

man-systemetkräver dock att man vet vad man letar efter. Vet man inte det, kan man använda kommandot "apropos" följt av något sökord. Man kommer då att få en lista över alla manualsidor som har detta ord i sin beskrivning. Ofta kan listan bli mycket lång, så det kan vara värt att sålla eller iallafall bromsa upp svaret från "apropos". Detta man man göra med kommandona "grep" och "more"(slå upp dem i manualen för mer information).

Exempel:

Ett annat sätt att hitta är att slå upp snarlika anrop och få referenser vidare, eller så finns den sökta informationen redan på samma sida. T.ex ger kommandot "man strcpy " information även om andra funktioner för strängmanipulation. Dessutom finns även en referenser till bl.a funktioner för att allokera minne, vilket kan vara praktiskt när man manipulerar strängar.

Den som vill ha ett grafiskt gränssnitt kan prova "xman".

Dokumentation av ndbm

Det mesta man behöver veta om ndbm finns att läsa i manualsidorna. Den kanske viktigaste informationen finns dock inte där, utan i en include-fil, nämligen utseendet på datatypen datum. För enkelhetens skull återges den här:

typedef struct {
     char  *dptr;
     int   dsize;
} datum;

Med andra ord så är den en struktur där dptr pekar på en area med data, och dsize talar om hur stor den är. Man kan lösa denna uppgift genom att bara lagra vanliga C-strängar, och då kan man använda dptr som en vanlig strängpekare, och sätta dsize = strlen(dptr) + 1. (Addera ett, för att få plats med det avslutande '\0'-tecknet.)

Nedan följer en kort översikt över de funktioner ni troligen kommer använda:

Ett enkelt exempel-program finns på manualsidan, notera att exemplet saknar nödvändig felhantering.


Material

Kurskatalog är /stud/docs/kurs/datakom/dbuppg, och alla filer som räknas upp nedan återfinns där, om inget annat sägs.

Databaser att experimentera med

Under ert utvecklingsarbete kommer ni att vilja experimentera med fungerande databaser. Två sådana finns:

Därtill finns två andra databaser som ni inte skall modifiera:

Definitionsfiler för C

Ni kommer behöva inkludera följande filer i ert program.

Ni behöver inte kopiera dessa filer, utan kan i princip använda dem där de ligger. Använder ni den Makefile som beskrivs nedan så skall

Script för att testa er server och klient

För att allas klienter och servrar ska testat på ett enhetligt sätt finns ett script som automatiskt gör många av de viktigaste testerna på ert program.

Testet testsuite är ett s.k shellscript, dvs det är i princip bara ett sätt att slippa knappa in en serie kommandon. Enklaste sättet att köra det är "csh testsuite".

Det är gjort för att testa två olika servrar/klienter samtidigt, men genom att låta er server ha hand om både databas 1 och 2, och låta client1 och client2 vara samma program, kan ni även testa bara ert eget program. Ni kan även testa enbart er klient genom att ställa in båda databaserna att vara test-databaserna.

Hjälp med kompilering

För att underlätta kompilering finns

Skapar ni och använder en Makefile rätt, behöver ni bara skriva "make all" för att kompilera om systemet. De delar som behöver kompileras om, kompileras om, och övriga lämnas intakta. Vi rekommenderar starkt att ni använder en Makefile.

Ni får givetvis kompilera ert program för hand om ni föredrar det, men kom då ihåg att ni måste dokumentera exakt hur ert system skall byggas. En del information i Makefile kan dock vara nödvändig att ta till sig. Ett sådant exempel är de länkbibliotek ni bör använda (>LIBS i Makefile).

Exempelkod

Exempelkoden finns på nätet. Ett exempel på en enkelt klient finns som democlient.c.

En klient som använder bind() istället för connect() finns som democlient2.c.