C Standardbibliothek

Die C Standardbibliothek ist die Standardbibliothek für die C Programmiersprache, wie angegeben, im ANSI C Standard. Es wurde zur gleichen Zeit als der C POSIX Bibliothek entwickelt, die grundsätzlich eine Obermenge davon ist. Seitdem ANSI wurde C von der Internationalen Organisation für die Standardisierung angenommen, die C Standardbibliothek wird auch den ISO C Bibliothek genannt.

Informell werden die Begriffe C Standardbibliothek oder C Bibliothek oder libc auch gebraucht, um eine besondere Durchführung auf einem gegebenen System zu benennen. In der Umgebung von Unix wird solch eine Durchführung gewöhnlich mit dem Betriebssystem verladen, und seine Anwesenheit wird durch viele Anwendungen angenommen. Zum Beispiel kommt GNU/Linux mit der GNU-Durchführung glibc.

Die C Standardbibliothek stellt Makros, Typ-Definitionen zur Verfügung, und fungiert für Aufgaben wie das Schnur-Berühren, die mathematische Berechnung, die Verarbeitung des Eingangs/Produktion, die Speicherzuteilung und mehrere andere Betriebssystemdienstleistungen.

Anwendung, Schnittstelle programmierend

Kopfball-Dateien

Die Anwendung, Schnittstelle programmierend (API) der C Standardbibliothek wird in mehreren Kopfball-Dateien erklärt. Jede Kopfball-Datei enthält eine oder mehr Funktionsbehauptungen, Datentyp-Definitionen und Makros.

Nach einem langen Zeitraum der Stabilität,

drei neue Kopfball-Dateien (und) wurden mit Normative Addendum 1 (NA1), einer Hinzufügung zum C 1995 bestätigten Standard hinzugefügt. Noch sechs Kopfball-Dateien (und) wurden mit C99, einer Revision zum C Standard veröffentlicht 1999, und noch fünf Dateien (und) mit C11 2011 hinzugefügt. Insgesamt gibt es jetzt 29 Kopfball-Dateien:

Drei der Kopfball-Dateien sind bedingte Eigenschaften, die Durchführungen nicht zu unterstützen brauchen.

Der POSIX Standard hat mehrere C Sonderkopfbälle für die Unix-spezifische Funktionalität hinzugefügt. Viele haben ihren Weg zu anderen Architekturen gefunden. Beispiele schließen ein und. Mehrere andere Gruppen verwenden andere Sonderkopfbälle - die meisten Geschmäcke nach Linux haben und HP OpenVMS hat die Funktion.

Dokumentation

Auf Unix ähnlichen Systemen wird die herrische Dokumentation der wirklich durchgeführten API in der Form von Mann-Seiten zur Verfügung gestellt. Auf den meisten Systemen sind Mann-Seiten auf Standardbibliotheksfunktionen im Abschnitt 3; Abschnitt 7 kann noch einige allgemeine Seiten auf zu Grunde liegenden Konzepten (z.B in Linux) enthalten.

Durchführungen

Unix ähnliche Systeme haben normalerweise eine C Bibliothek in der geteilten Bibliotheksform, aber die Kopfball-Dateien (und Bearbeiter toolchain) können von einer Installation fehlen, so C Entwicklung kann nicht möglich sein. Die C Bibliothek wird als ein Teil des Betriebssystems auf Unix ähnlichen Systemen betrachtet. Die C-Funktionen, einschließlich des ISO C normale, werden durch Programme weit verwendet und werden betrachtet, als ob sie nicht nur eine Durchführung von etwas in der c Sprache, sondern auch dem De-Facto-Teil der Betriebssystemschnittstelle waren. Unix ähnliche Betriebssysteme können allgemein nicht fungieren, wenn die C Bibliothek gelöscht wird.

Im Vergleich, auf Windows von Microsoft, das Kernsystem stellen dynamische Bibliotheken (DLLs) keine Durchführung der C Standardbibliothek zur Verfügung; das wird durch jeden Bearbeiter individuell zur Verfügung gestellt. Kompilierte in C geschriebene Anwendungen werden entweder mit einer C Bibliothek statisch verbunden, oder mit einer dynamischen Version der Bibliothek verbunden, die mit diesen Anwendungen verladen, aber nicht darauf gebaut wird, um auf den ins Visier genommenen Systemen da zu sein. Funktionen in einer C Bibliothek eines Bearbeiters werden als Schnittstellen zu Windows von Microsoft nicht betrachtet.

Viele andere Durchführungen, bestehen versorgt sowohl mit verschiedenen Betriebssystemen als auch mit C Bearbeitern.

Obwohl dort zu viele Durchführungen bestehen Sie, um Schlagseite zu haben, folgen einige populäre Durchführungen:

  • BSD libc, Durchführungen unter BSD Betriebssysteme verteilt.
  • GNU C Bibliothek, die in GNU/Linux und GNU/HURD verwendet ist.
  • Microsoft C Run-time Library, ein Teil von Microsoft Visual C ++
  • dietlibc, eine alternative kleine Durchführung der C Standardbibliothek (MMU-weniger)
  • uClibc, eine C Standardbibliothek für eingebettete Systeme von Linux (MMU-weniger)
  • Newlib, eine C Standardbibliothek für eingebettete Systeme (MMU-weniger)
  • klibc, in erster Linie für Systeme von Linux zu starten.
  • EGLIBC, Variante von glibc für eingebettete Systeme.
  • musl, eine andere C Leichtgewichtsstandardbibliotheksdurchführung für Systeme von Linux

Bearbeiter-eingebaute Funktionen

Einige Bearbeiter (zum Beispiel, GCC) stellen eingebaute Versionen von vielen der Funktionen in der C Standardbibliothek zur Verfügung; d. h. die Durchführungen der Funktionen werden in die kompilierte Gegenstand-Datei geschrieben, und das Programm ruft die eingebauten Versionen statt der Funktionen in der C Bibliothek haben Gegenstand-Datei geteilt. Das reduziert Funktionsanruf oben besonders, wenn Funktionsanrufe durch Reihenvarianten ersetzt werden, und andere Formen der Optimierung erlaubt (weil der Bearbeiter die Kontrollfluss-Eigenschaften der eingebauten Varianten weiß), aber kann Verwirrung verursachen, wenn man die Fehler beseitigt (zum Beispiel, können die eingebauten Versionen nicht durch instrumentierte Varianten ersetzt werden).

Jedoch müssen sich die eingebauten Funktionen wie gewöhnliche Funktionen in Übereinstimmung mit ISO C benehmen. Die Hauptimplikation ist, dass das Programm im Stande sein, einen Zeigestock zu diesen Funktionen durch die Einnahme ihrer Adresse zu schaffen, und die Funktion mittels dieses Zeigestocks anrufen muss. Wenn zwei Zeigestöcke zu derselben Funktion in zwei verschiedener Übersetzungseinheit im Programm abgeleitet werden, müssen sich diese zwei Zeigestöcke gleich vergleichen; d. h. die Adresse kommt durch die Auflösung des Namens der Funktion, die äußerliche (weites Programm) Verbindung hat.

Verbindung, libm

Unter Linux werden die mathematischen Funktionen (wie erklärt, in) getrennt in der mathematischen Bibliothek libm gestopft. Wenn einige von ihnen verwendet wird, muss der linker die Direktive gegeben werden.

Entdeckung

Gemäß dem C Standard soll das Makro zu 1 definiert werden, wenn die Durchführung veranstaltet wird. Eine veranstaltete Durchführung hat alle durch den C Standard angegebenen Kopfbälle. Eine Durchführung kann auch freistehend sein, was bedeutet, dass diese Kopfbälle nicht da sein werden. Wenn eine Durchführung freistehend ist, soll sie zu 0 definieren.

Konzepte, Probleme, workarounds

Pufferüberschwemmungsverwundbarkeit

Einige Funktionen in der C Standardbibliothek sind notorisch gewesen, um Pufferüberschwemmungsverwundbarkeit zu haben und allgemein Buggy zu fördern, seit ihrer Adoption programmierend. Die am meisten kritisierten Sachen sind:

  • Routinen der Schnur-Manipulation, einschließlich strcpy und strcat , aus Mangel an der Grenze-Überprüfung und dem möglichen Puffer fließen über, wenn die Grenzen manuell nicht überprüft werden; es gibt jetzt alternative Routinen, wie strncpy und strncat
  • Schnur-Routinen im Allgemeinen, für Nebenwirkungen, ermutigenden unverantwortlichen Puffergebrauch, nicht immer gültige ungültig begrenzte Produktion, geradlinige Länge-Berechnung versichernd;
  • printf Familienroutinen, für den Ausführungsstapel zu verderben, wenn die Format-Schnur die gegebenen Argumente nicht vergleicht. Dieser grundsätzliche Fehler hat eine komplette Klasse von Angriffen geschaffen: Formatieren Sie Schnur-Angriffe.
  • kommt und scanf Eingabe/Ausgabe-Routinen, aus Mangel an (entweder irgendwelcher oder leicht) Eingangslänge, die überprüft

Außer dem äußersten Fall mit kann die ganze Sicherheitsverwundbarkeit durch das Einführen des Hilfscodes vermieden werden, um Speichermanagement, Grenze-Überprüfung, Eingangsüberprüfung usw. durchzuführen. Das wird häufig in der Form von Streifbändern getan, die Standardbibliotheksfunktionen sicherer und leichter machen zu verwenden. Das geht auf schon in Der Praxis zurück, Buch von B. Kernighan und R. Pike Zu programmieren, wo die Autoren allgemein Streifbänder verwenden, die Fehlermeldungen drucken und das Programm verlassen, wenn ein Fehler vorkommt.

Probleme, Verwundbarkeit einfädelnd, um Bedingungen laufen zu lassen

Die mktemp und strerror Routinen werden dafür kritisiert, Faden unsicher und sonst verwundbar zu sein, um Bedingungen laufen zu lassen.

Das Fehlerberühren

Der Fehler, von den Funktionen in der C Standardbibliothek behandelnd, entspricht nicht und manchmal verwirrend. Das kann durch die Handbuch-Seite von Linux ziemlich gut zusammengefasst werden, die sagt:

Der Strom (Version 2. 8) die Situation unter glibc ist unordentlich. Meiste (aber nicht alle)

Funktionen erheben Ausnahmen auf Fehlern. Einige setzen auch errno. Einige Funktionen setzen

errno, aber erheben keine Ausnahme. Ganz wenige Funktionen tun keinen.

Standardisierung

Die ursprüngliche c Sprache hat keine eingebauten Funktionen wie Eingabe/Ausgabe-Operationen, verschieden von traditionellen Sprachen wie COBOL und Fortran zur Verfügung gestellt. Mit der Zeit, Benutzergemeinschaften von C, hat Ideen und Durchführungen, dessen geteilt, was jetzt C Standardbibliotheken genannt wird. Viele dieser Ideen wurden schließlich in die Definition der standardisierten c Sprache vereinigt.

Sowohl Unix als auch C wurden an AT&T Glockenlaboratorien gegen Ende der 1960er Jahre und Anfang der 1970er Jahre geschaffen. Während der 1970er Jahre ist die c Sprache immer populärer geworden. Viele Universitäten und Organisationen haben begonnen, ihre eigenen Varianten der Sprache für ihre eigenen Projekte zu schaffen. Am Anfang der Vereinbarkeitsprobleme der 1980er Jahre zwischen den verschiedenen C Durchführungen ist offenbar geworden. 1983 hat American National Standards Institute (ANSI) ein Komitee gebildet, um eine Standardspezifizierung von C bekannt als "ANSI C" zu gründen. Diese Arbeit hat in der Entwicklung des so genannten C89 Standards 1989 kulminiert. Ein Teil des resultierenden Standards war eine Reihe von Softwarebibliotheken genannt den ANSI C Standardbibliothek.

POSIX Standardbibliothek

POSIX (und SUS) gibt mehrere Routinen an, die außer denjenigen in der C richtigen Standardbibliothek verfügbar sein sollten; diese werden häufig neben der C Standardbibliotheksfunktionalität mit unterschiedlichen Graden der Nähe durchgeführt. Zum Beispiel, glibc Werkzeug-Funktionen wie Gabel innerhalb, aber bevor wurde NPTL in glibc verschmolzen es hat eine getrennte Bibliothek mit seinem eigenen linker Fahne-Argument eingesetzt. Häufig wird diese POSIX-angegebene Funktionalität als ein Teil der Bibliothek betrachtet; die C richtige Bibliothek kann als der ANSI oder ISO C Bibliothek identifiziert werden.

Andauernde Arbeit

Der ISO C Komitee hat Technische Berichte TR 24731-1 veröffentlicht und arbeitet an TR 24731-2, um Adoption von einigen Funktionen mit der Grenze-Überprüfung und automatischen Pufferzuteilung entsprechend vorzuschlagen. Der erstere hat strenge Kritik mit etwas Lob, den letzten erhaltenen Mischantworten entsprochen. Trotzdem ist TR 24731-1 in die C Standardbibliothek des Microsofts und seine Bearbeiter-Problem-Warnungen durchgeführt worden, wenn man alte 'unsichere' Funktionen verwendet.

Die C Standardbibliothek auf anderen Sprachen

Einige Sprachen schließen die Funktionalität des Standards C Bibliothek in ihren eigenen Bibliotheken ein. Die Bibliothek kann angepasst werden, um der Struktur der Sprache besser anzupassen, aber die Operationssemantik wird ähnlich behalten. Der C ++ Sprache schließt zum Beispiel die Funktionalität der C Standardbibliothek im namespace (z.B,), in Kopfball-Dateien mit ähnlichen Namen zu den C (usw.) ein. Andere Sprachen, die ähnliche Annäherungen nehmen, sind D und die Hauptdurchführung der als CPython bekannten Pythonschlange. In den Letzteren, zum Beispiel, werden die eingebauten Dateigegenstände, wie "durchgeführt, das Paket von verwendendem C" definiert, so dass die verfügbaren Operationen (offen, lesen Sie, schreiben Sie, usw.) werden erwartet, dasselbe Verhalten wie die entsprechenden C-Funktionen zu haben.

Vergleich zu Standardbibliotheken anderer Sprachen

Die C Standardbibliothek ist im Vergleich zu den Standardbibliotheken einiger anderer Sprachen winzig. Die C Bibliothek stellt einen grundlegenden Satz von mathematischen Funktionen, Schnur-Manipulation, Typ-Konvertierungen, und Datei und Konsole-basierter Eingabe/Ausgabe zur Verfügung. Es schließt keinen Standardsatz von "Behältertypen" wie der C ++ Standardschablone-Bibliothek ganz zu schweigen von den ganzen Werkzeugen der grafischen Benutzerschnittstelle (GUI) ein, Werkzeuge und Überfluss anderer Funktionalität vernetzend, die Java als Standard zur Verfügung stellt. Der Hauptvorteil der kleinen Standardbibliothek besteht darin, dass die Versorgung eines Arbeitens ISO C Umgebung viel leichter ist, als es mit anderen Sprachen ist, und folglich C zu einer neuen Plattform nach Backbord haltend, relativ leicht ist.

Siehe auch

  • C ++ Standardbibliothek

Weiterführende Literatur

Außenverbindungen


Eduard Mörike / Märchen von topografischen Ozeanen
Impressum & Datenschutz