Przejdź do zawartości

C/Biblioteka standardowa

Z Wikibooks, biblioteki wolnych podręczników.
< C


Po co nam biblioteka standardowa?

[edytuj]

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.[1] 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?

[edytuj]

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[2] komunikuje się z systemem operacyjnym, który wykonuje odpowiednie czynności.

Wersje

[edytuj]

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

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 ?[5]

  • 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

[edytuj]

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

Instalacja:

sudo apt install libsafec-dev

musl

[edytuj]
 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?

[edytuj]

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 <stdio.h>

linijka ta oznacza: "w tym miejscu wstaw zawartość pliku stdio.h". Nawiasy "<" i ">" 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,[6] scanf, puts i inne.

Oprócz podstawowych funkcji wejścia-wyjścia, biblioteka standardowa udostępnia też możliwość wykonywania:[7]

oraz wykonywania wielu innych rzeczy.


Nazwa Od opis
<assert.h> Zawiera makro assert, które pomaga w wykrywaniu błędów logicznych i innych typów błędów w debugowaniu wersji programu
<complex.h> C99 Zestaw funkcji dla liczb zespolonych
<ctype.h> 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)
<errno.h> Do testowania kodów błędów zgłaszanych przez funkcje biblioteczne
<fenv.h> C99 zestaw funkcji dla liczb zmiennoprzecinkowych
<float.h> Definiuje stałe dla makr określające właściwości biblioteki zmiennoprzecinkowej
<inttypes.h> C99 Defines exact width integer types.
<iso646.h> C95 Defines several macros that implement alternative ways to express several standard tokens. For programming in ISO 646 variant character sets.
<limits.h> Defines macro constants specifying the implementation-specific properties of the integer types.
<locale.h> Defines localization functions
<math.h> Defines common mathematical functions
<setjmp.h> Declares the macros setjmp and longjmp, which are used for non-local exits.
<signal.h> Defines signal handling functions
<stdalign.h> C11 For querying and specifying the alignment of objects.
<stdarg.h> dostęp do zmiennej liczby argumentów przekazywanych do funkcji
<stdatomic.h> C11 For atomic operations on data shared between threads.
<stdbool.h> C99 Defines a boolean data type
<stddef.h> Definiuje kilka przydatnych typów i makr
<stdint.h> C99 Definiuje typy całkowite o dokładnej szerokości, zobacz inttypes.h który zawiera stdint.h i dodaje dodatkowe funkcje[8]
<stdio.h> Defines core input and output functions
<stdlib.h> Defines numeric conversion functions, pseudo-random numbers generation functions, memory allocation, process control functions
<stdnoreturn.h> C11 For specifying non-returning functions.
<string.h> Defines string handling functions.
<tgmath.h> C99 Defines type-generic mathematical functions.
<threads.h> C11 Defines functions for managing multiple Threads as well as mutexes and condition variables.
<time.h> Defines date and time handling functions
<uchar.h> C11 Types and functions for manipulating Unicode characters
<unistd.h> warunkowy
<wchar.h> C95 Definiuje obsługę ciągów szerokich znaków
<wctype.h> 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...

[edytuj]

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

[edytuj]

Podręcznik C na Wikibooks zawiera opis dużej części biblioteki standardowej C:

W systemach uniksowych możesz uzyskać pomoc dzięki narzędziu man, przykładowo pisząc:

man printf

lub

man libc

Uwagi

[edytuj]

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

[edytuj]
Indeks alfabetyczny
Indeks tematyczny


Zobacz również

[edytuj]
  • glib[9] ( 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.


Przypisy