| |
afblib |
Im Laufe der Vorlesungen wurden einige kleine Funktionen vorgestellt,
die in mehreren Beispielen Verwendung fanden und bei Gelegenheit auch
in den Übungen nützlich sein können. Damit diese etwas einfacher zugänglich
sind, wurden sie in einer kleinen Bibliothek zusammengefasst, die in
Ermangelung eines besseren Namens die Initialien ihres Autors übernommen hat.
| | |
Benutzung |
Die Vorlesungsbibliothek, kurz afblib genannt, steht auf all
unseren Suns und Debian-Maschinen zur Verfügung. Da nicht wenige
ihrer Funktionen die
stralloc-Bibliothek (in
der Implementierung von fefe) übernehmen,
sollte sie mit dieser zusammen bei der Übersetzung angegeben werden.
So könnten etwa die passenden Makefile-Parameter aussehen:
CC := gcc
CFLAGS := -std=gnu11 -Wall -g
LDLIBS := -lafb -lowfat -lsocket -lnsl -lpxre
Oder, alles in einer einfachen Übersetzungszeile:
gcc -g -std=gnu11 main.c -lafb -lowfat -lsocket -lnsl -lpxre
Bei Debian entfallen -lsocket und -lnsl. Teilweise
ist hier dann noch -lpthread hinzuzufügen.
| | |
Manualseiten |
Für alle Funktionen gibt es zugehörige Manualseiten:
- inbuf
(Gepufferte Eingabe)
- inbuf_readline
(Einlesen einer Zeile aus einem gepufferten Eingabekanal)
- inbuf_sareadline
(Einlesen einer Zeile in ein stralloc-Objekt aus einem
gepufferten Eingabekanal)
- inbuf_scan
(Einlesen mit Hilfe eines regulären Ausdrucks)
- hostport
(Unterstützung von Hostport-Spezifikationen nach RFC 2396)
- mpx_session
(Netzwerkdienst mit mehrfachen Sitzungen auf Basis eines
Anfragenbehandlers)
- multiplexor
(Sehr systemnahe Funktion für mehrfache Sitzungen auf
der Basis von Eingabepaketbehandlern)
- outbuf
(Gepufferte Ausgabe)
- outbuf_printf
(Formatierte Ausgabe)
- pconnect
(Pipeline zu einem Kommando eröffnen, Alternative zu popen())
- preforked_service
(Einfacher Netzwerkdienst, der im Unterschied zu service
Prozesse auf Vorrat erzeugt, die dann eingehende Verbindungen
entgegennehmen.)
- service
(Einfacher Netzwerkdienst, bei dem jede Sitzung von einem
separaten Prozess behandelt wird)
- shared_cv
(Bedingungsvariable, die über einen gemeinsamen Speicherbereich
von mehreren Prozessen genutzt werden kann.)
- shared_domain
(Auf einem gemeinsamen Speicherbereich basierende Kommunikationsdomäne,
über die eine festgezahlte Zahl von Prozessen miteinander
kommunizieren können.)
- shared_env
(Übertragung der Parameter für eine Kommunikationsdomäne über
Umgebungsvariablen.)
- shared_mutex
(Mutexvariable, die über einen gemeinsamen Speicherbereich
von mehreren Prozessen genutzt werden kann.)
- shared_rts
(Laufzeitumgebung für Prozesse mit einer gemeinsamen
Kommunikationsdomäne.)
- sliding_buffer
(Einfache auf stralloc basierende Datenstruktur, die
sowohl das Hinzufügen neuer Inhalte als auch das Wegwerfen
bereits bearbeiteter Inhalte erlaubt. Dies ist nützlich
beim Zusammenbau von Anfragen aus eingehenden Netzwerkpaketen.)
- ssystem
(Aufruf externer Kommandos, Alternative zu system())
- strhash
(Einfache Hash-Tabelle für Zeichenketten)
- strlist
(Liste von Zeichenketten, ideal in Verbindung mit execvp(2))
- tokenizer
(Zerlegung eines stralloc-Objekts in Wörter)
- udp_session
(Sitzungen auf Basis von UDP-Sockets analog zum
TFTP-Protokoll)
| | |
Herunterladen der Quellen |
Alle Quellen dieses Pakets (aktuelle
Version ist 0.51, zuletzt aktualisiert am 8. Juli 2019) unterliegen
der GPL
und können daher im Rahmen dieser Lizenz frei kopiert, verändert
und weiterverbreitet werden. Zum Übersetzen wird stralloc
benötigt (siehe hier)
und die pcre-Bibliothek (siehe
hier). Unter Debian benötigen
Sie hierfür die Pakete libowfat-dev und libpcre3-dev.
Bei Homebrew gibt es die entsprechenden Pakete
libowfat und pcre.
Das im Paket enthaltene Makefile versucht, sowohl eine
statische als auch eine dynamische Bibliothek zu bauen. Letzteres
wird jedoch nur gelingen, wenn auch -lowfat und -lpcre
als dynamische Bibliotheken lokal zur Verfügung stehen. Bei
-lpcre sollte eine halbwegs aktuelle Fassung zur Verfügung
stehen, die das sogenannte partial matching unterstützt,
das von inbuf_scan und mpx_session benötigt wird.
Das Makefile der afblib verwendet das Werkzeug
gcc-makedepend.
Dabei handelt es sich um ein Perl-Skript,
das analog zu makedepend arbeitet, aber auf Basis
der -MM-Option des gcc implementiert ist.
Die Manualseiten befinden sich innerhalb
der Quellen im POD-Format
und können daher mit Werkzeugen wie beispielsweise pod2man oder
pod2html in passende Formate konvertiert werden.
| | |
|