Subroutinen, Beispielprogramme und Bibliotheken
Dieser Abschnitt enthält Informationen dazu, was Subroutinen sind, wie sie verwendet werden und wo sie gespeichert sind.
Subroutinen werden in Bibliotheken gespeichert, um Speicherplatz zu sparen und den Programmverbindungsprozess effizienter zu machen. Eine Bibliothek ist eine Datendatei, die Kopien einer Reihe von einzelnen Dateien und Steuerinformationen enthält, mit denen auf sie einzeln zugegriffen werden kann. Die Bibliotheken befinden sich in den Verzeichnissen /usr/ccs/lib und /usr/lib . Gemäß Konvention haben die meisten von ihnen Namen im Format libname.a , wobei name die jeweilige Bibliothek angibt.
Alle Include-Anweisungen sollten am Anfang der ersten Datei stehen, die kompiliert wird, normalerweise im Deklarationsabschnitt vor main (), und müssen vor der Verwendung von Bibliotheksfunktionen auftreten. Verwenden Sie beispielsweise die folgende Anweisung, um die Datei stdio.h einzuschließen:
#include <stdio.h>Sie müssen nichts Besonderes tun, um Subroutinen aus der Standard-C-Bibliothek (libc.a) zu verwenden. Der Befehl cc durchsucht diese Bibliothek automatisch nach Subroutinen, die ein Programm benötigt. Wenn Sie jedoch Subroutine aus einer anderen Bibliothek verwenden, müssen Sie den Compiler anweisen, diese Bibliothek zu durchsuchen. Wenn Ihr Programm Subroutinen aus der Bibliothek libname.averwendet, kompilieren Sie Ihr Programm mit dem Flag -lname (kleines L). Im folgenden Beispiel wird das Programm kompiliert.myprog.c, die Subroutinen aus der Bibliothek libdbm.a verwendet:
cc myprog.c -ldbmSie können mehrere Flags -l (kleines L) angeben. Jedes Flag wird in der angegebenen Reihenfolge verarbeitet.
Wenn Sie eine Subroutine verwenden, die in der Berkeley-Kompatibilitätsbibliothek gespeichert ist, binden Sie die Bibliothek libbsd.a vor der Bindung an die Bibliothek libc.a , wie im folgenden Beispiel gezeigt:
cc myprog.c -lbsdWenn ein Fehler auftritt, geben viele Unterprogramme einen Wert von -1 zurück und setzen eine externe Variable namens errno, um den Fehler zu identifizieren. Die Datei sys/errno.h deklariert die Variable errno und definiert eine Konstante für jeden der möglichen Fehlerzustände.
In dieser Dokumentation werden alle Systemaufrufe als Subroutinen beschrieben und aus der Bibliothek libc.a aufgelöst. Die Programmierschnittstelle für Systemaufrufe ist identisch mit der von Subroutinen. Was ein Programm der Programmiersprache C betrifft, ist ein Systemaufruf lediglich ein Subroutinenaufruf. Der reale Unterschied zwischen einem Systemaufruf und einer Subroutine ist der Typ der ausgeführten Operation. Wenn ein Programm einen Systemaufruf aufruft, findet ein Schutzdomänenwechsel statt, sodass die aufgerufene Routine Zugriff auf die privilegierten Informationen des Betriebssystemkernels hat. Die Routine arbeitet dann im Kernelmodus, um eine Task für das Programm auszuführen. Auf diese Weise ist der Zugriff auf die privilegierten Systeminformationen auf eine vordefinierte Gruppe von Routinen beschränkt, deren Aktionen gesteuert werden können.
- Die folgende Liste enthält die wString -Routinen, die für die 64-Bit-Version von libc.averaltet sind. Die entsprechenden Entsprechungen in der 64-Bit-Version von libc.a sind enthalten. Die Routinen für die 32-Bit- libc.a finden Sie in der Subroutine wstring .
32 Bit only 64 Bit Equivalent wstrcat wcscat wstrchr wcschr wstrcmp wcscoll wstrcpy wcscpy wstrcspn wcscspn wstrdup Not available and has no equivalents in the 64 bit libc.a wstrlen wcslen wstrncat wcsncat wstrncpy wcsncpy wstrpbrk wcspbrk wstrrchr wcsrchr wstrspn wcsspn wstrtok wcstok - Alle Programme, die Mehrbytezeichen, Breitzeichen oder ländereinstellungsspezifische Informationen verarbeiten, müssen die Subroutine setlocale am Anfang des Programms aufrufen.
- Die Programmierung in einer Multithread-Umgebung erfordert wiedereintrittsfähige Subroutinen, um die Datenintegrität sicherzustellen.