C/Biblioteka standardowa

Z Wikibooks, biblioteki wolnych podręczników.
< C
Skocz do: nawigacja, szukaj


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]

  • libc
    • glibc = GNU libc[3]
      • eglibc =
    • uClibc – implementacja standardowej biblioteki języka C dla systemów osadzonych (ang. embedded)
    • Diet libc – „odchudzona” wersja standardowej biblioteki języka C

Jak sprawdzić której wersji używa mój system ?[4]

  • 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

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,[5] scanf, puts i inne.

Oprócz podstawowych funkcji wejścia-wyjścia, biblioteka standardowa udostępnia też możliwość wykonywania funkcji matematycznych, komunikacji przez sieć oraz wykonywania wielu innych rzeczy.


Nazwa Od opis
<assert.h> Contains the assert macro, used to assist with detecting logical errors and other types of bug in debugging versions of a program.
<complex.h> C99 A set of functions for manipulating complex numbers.
<ctype.h> Defines set of functions used to classify characters by their types or to convert between upper and lower case in a way that is independent of the used character set (typically ASCII or one of its extensions, although implementations utilizing EBCDIC are also known).
<errno.h> For testing error codes reported by library functions.
<fenv.h> C99 Defines a set of functions for controlling floating-point environment.
<float.h> Defines macro constants specifying the implementation-specific properties of the floating-point library.
<inttypes.h> C99 Defines exact width integer types.
<iso646.h> NA1 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> For accessing a varying number of arguments passed to functions.
<stdatomic.h> C11 For atomic operations on data shared between threads.
<stdbool.h> C99 Defines a boolean data type.
<stddef.h> Defines several useful types and macros.
<stdint.h> C99 Defines exact width integer types.
<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.
<wchar.h> NA1 Defines wide string handling functions.
<wctype.h> NA1 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++.

Przypisy

  1. wikipedia: Biblioteka_standardowa_języka_C
  2. Początkujący programista zapewne nie byłby w stanie napisać nawet funkcji printf.
  3. wikipedia: GNU_C_Library
  4. unix.stackexchange question: what-c-library-version-does-my-system-use
  5. Takich jak np. wywoływanie przerwań programowych.