Po co nam biblioteka standardowa? W którymś z początkowych rozdziałów tego podręcznika napisane jest, że czysty język C nie może zbyt wiele. Tak naprawdę, to język C sam w sobie praktycznie nie ma mechanizmów do obsługi np. wejścia-wyjścia. Dlatego też większość systemów operacyjnych posiada tzw. bibliotekę standardową zwaną też biblioteką języka C.wikipedia: Biblioteka_standardowa_języka_C To właśnie w niej zawarte są podstawowe funkcjonalności, dzięki którym twój program może np. napisać coś na ekranie.
Jak skonstruowana jest biblioteka standardowa? Zapytacie zapewne, jak biblioteka standardowa realizuje te funkcje, skoro sam język C tego nie potrafi. Odpowiedź jest prosta - biblioteka standardowa nie jest napisana w samym języku C. Ponieważ C jest językiem tłumaczonym do kodu maszynowego, to w praktyce nie ma żadnych przeszkód, żeby np. połączyć go z językiem niskiego poziomu, jakim jest np. asembler. Dlatego biblioteka C z jednej strony udostępnia gotowe funkcje w języku C, a z drugiej za pomocą niskopoziomowych mechanizmów komunikuje się z systemem operacyjnym, który wykonuje odpowiednie czynności.
Wersje libcBiblioteka_standardowa_języka_C w wikipedii musl = "an implementation of the standard library for Linux-based systems" glibc = GNU libcwikipedia: GNU_C_Library eglibc = uClibc – implementacja standardowej biblioteki języka C dla systemów osadzonych (ang. embedded) Diet libc – „odchudzona” wersja standardowej biblioteki języka C safe libc
Trzy pliki nagłówkowe deiniują funkcje warunkowe, których implementacje nie muszą obsługiwać: complex.h stdatomic.h threads.h
Standard POSIX dodał kilka niestandardowych nagłówków C dla funkcji specyficznych dla systemu Unix, które mogą znaleźć się w innych architekturach fcntl.h unistd.h
Szereg innych grup używa innych niestandardowych nagłówków – GNU C Library ma alloca.h, a HP OpenVMS ma funkcję va_count().
Jak sprawdzić której wersji używa mój system ?unix.stackexchange question: what-c-library-version-does-my-system-use ldd getconf
ldd --version
przykładowy wynik :
ldd (Ubuntu GLIBC 2.23-0ubuntu3) 2.23 Prawa autorskie © 2016 Free Software Foundation, Inc. To oprogramowanie jest darmowe; warunki kopiowania są opisane w źródłach. Autorzy nie dają ŻADNYCH gwarancji, w tym również gwarancji MOŻLIWOŚCI SPRZEDAŻY lub PRZYDATNOŚCI DO KONKRETNYCH ZASTOSOWAŃ. Autorami są Roland McGrath i Ulrich Drepper.
getconf GNU_LIBC_VERSION
Safe libc Biblioteka Safe C udostępnia powiązane funkcje sprawdzania pamięci i łańcuchów zgodnie z normą ISO/IEC TR24731. Funkcje te są funkcjami alternatywnymi do istniejącej standardowej biblioteki C, które promują bezpieczniejsze, bezpieczniejsze programowanie. Języki programowania ISO / IEC — specyfikacja C, C11, obejmują teraz ograniczone interfejsy API w dodatku K, „Interfejsy sprawdzania granic”.
Libsafe safec = Safe C Library wersja jbenner-radham
Instalacja:
sudo apt install libsafec-dev
musl
sudo apt install musl-tools
git clone git.musl-libc.org/musl
Lokalizacja kompilatora w pliku makefile:
CC = /usr/bin/musl-gcc
Gdzie są funkcje z biblioteki standardowej?
Pisząc program w języku C używamy różnego rodzaju funkcji, takich jak np. printf. Nie jesteśmy jednak ich autorami, mało tego nie widzimy nawet deklaracji tych funkcji w naszym programie. Pamiętacie program "Hello world"? Zaczynał on się od takiej oto linijki:
#include
linijka ta oznacza: "w tym miejscu wstaw zawartość pliku stdio.h". Nawiasy "" oznaczają, że plik stdio.h znajduje się w standardowym katalogu z plikami nagłówkowymi. Wszystkie pliki z rozszerzeniem h są właśnie plikami nagłówkowymi. Wróćmy teraz do tematu biblioteki standardowej. Każdy system operacyjny ma za zadanie wykonywać pewne funkcje na rzecz programów. Wszystkie te funkcje zawarte są właśnie w bibliotece standardowej. W systemach z rodziny UNIX nazywa się ją LibC (biblioteka języka C). To tam właśnie znajduje się funkcja printf, scanf, puts i inne.
Oprócz podstawowych funkcji wejścia-wyjścia, biblioteka standardowa udostępnia też możliwość wykonywania:devdocs C funkcji matematycznych komunikacji przez sieć oraz wykonywania wielu innych rzeczy.
Nazwa Od opis Zawiera makro assert, które pomaga w wykrywaniu błędów logicznych i innych typów błędów w debugowaniu wersji programu C99 Zestaw funkcji dla liczb zespolonych Zestaw funkcji służących do klasyfikowania znaków według ich typów lub konwersji między dużymi i małymi literami w sposób niezależny od używanego zestawu znaków (zwykle ASCII lub jedno z jego rozszerzeń, chociaż znane są również implementacje wykorzystujące EBCDIC) Do testowania kodów błędów zgłaszanych przez funkcje biblioteczne C99 zestaw funkcji dla liczb zmiennoprzecinkowych Definiuje stałe dla makr określające właściwości biblioteki zmiennoprzecinkowej C99 Defines exact width integer types. C95 Defines several macros that implement alternative ways to express several standard tokens. For programming in ISO 646 variant character sets. Defines macro constants specifying the implementation-specific properties of the integer types. Defines localization functions Defines common mathematical functions Declares the macros setjmp and longjmp, which are used for non-local exits. Defines signal handling functions C11 For querying and specifying the alignment of objects. dostęp do zmiennej liczby argumentów przekazywanych do funkcji C11 For atomic operations on data shared between threads. C99 Defines a boolean data type Definiuje kilka przydatnych typów i makr C99 Definiuje typy całkowite o dokładnej szerokości, zobacz inttypes.h który zawiera stdint.h i dodaje dodatkowe funkcjestackoverflow question : difference-between-stdint-h-and-inttypes-h Defines core input and output functions Defines numeric conversion functions, pseudo-random numbers generation functions, memory allocation, process control functions C11 For specifying non-returning functions. Defines string handling functions. C99 Defines type-generic mathematical functions. C11 Defines functions for managing multiple Threads as well as mutexes and condition variables. Defines date and time handling functions C11 Types and functions for manipulating Unicode characters warunkowy C95 Definiuje obsługę ciągów szerokich znaków C95 Defines set of functions used to classify wide characters by their types or to convert between upper and lower case
Jeśli biblioteka nie jest potrzebna... Czasami korzystanie z funkcji bibliotecznych oraz standardowych plików nagłówkowych jest niepożądane np. wtedy, gdy programista pisze swój własny system operacyjny oraz bibliotekę do niego. Aby wyłączyć używanie biblioteki C w opcjach kompilatora GCC możemy dodać następujące argumenty:
-nostdinc -fno-builtin
Opis funkcji biblioteki standardowej Podręcznik C na Wikibooks zawiera opis dużej części biblioteki standardowej C: Indeks alfabetyczny Indeks tematyczny
W systemach uniksowych możesz uzyskać pomoc dzięki narzędziu man, przykładowo pisząc: man printf
lub
man libc
Uwagi Programy w języku C++ mogą dokładnie w ten sam sposób korzystać z biblioteki standardowej, ale zalecane jest, by robić to raczej w trochę odmienny sposób, właściwy dla C++. Szczegóły w podręczniku C++.
Indeksy Indeks alfabetyczny Indeks tematyczny
Zobacz również glibGLib (G Library) w wikipedii ( nie glibc, bo bez c na końcu) = GLib (G Library) - niskopoziomowa, narzędziowa biblioteka funkcji dla programistów języka C, dostarczająca jednolite API. GLib jest wykorzystywana przede wszystkim jako podstawa biblioteki GTK+ (której była częścią do wydania wersji 1.1.0) oraz graficznego środowiska GNOME.