Universität Ulm, Fakultät für Mathematik und Wirtschaftswissenschaften, IAI, Vorlesungen, SS 2012, Systemnahe Software II
Vorlesungsbibliothek zu Systemnahe Software II
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.
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)
  • 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)
Herunterladen der Quellen

Alle Quellen dieses Pakets (aktuelle Version ist 0.36, zuletzt aktualisiert am 23. Juni 2014) 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 MacPorts 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. Dies steht ebenfalls zum Herunterladen zur Verfügung.

Aktuelle Änderungen:

  • 0.35: Manualseite zu sliding_buffer hinzugefügt; Makefile an Darwin (Mac OS X) angepasst. Danke an David Jäckel für die Unterstützung.

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.