Funkcje narz¸

edziowe: nagłówek <stdlib.h>

Argument seed jest zarodkiem dla nowego ci¸

agu liczb pseudolo-

Plik nagłówkowy <stdlib.h> zawiera deklaracje funkcji sowych. Pocz¸

atkowy zarodek jest równy 1.

słż¸

acych do przekształcania liczb, przydzielania pami¸

eci i innych

zadań.

przydział pami¸

eci

double atof(const char *s)

void *calloc(size_t nobj, size_t size) rownowazna z

Zwraca wskaźnik do obszaru pami¸

eci przeznaczonego dla ta-

strtod(s,(char **)NULL)

blicy o nobj elementów, każdy o rozmiarze size. Obszar jest inicjowany zerami.

int atoi(const char *s)

void *malloc(size_t size)

rownowazna z

(int) strtol(s, (char **)NULL, 10)

Obszar nie jest inicjowany.

long atol(const char *s)

void *realloc(void *p, sizee_t size)

rownowazna z

strtol(s, (char **)NULL, 10)

void free(void *p)

double strtod(const char *s, char **endp) void abort(void)

Przekształca pocz¸

atkowe znaki s na wartość typu double

(wiod¸

ace znaki białe s¸

a ignorowane).

Powoduje nienormalne zakończenie programu, podobnie jak: Jeżeli endp != NULL to funkcja wstawia wskaźnik do nie przekształconej cz¸

eści tekstu s.

raise(SIGABRT).

HUGE_VAL

dla nadmiaru

Zwraca:

0

dla niedomiaru

void exit(status)

W obu przypadkach wstawia ERANGE do zmiennej errno.

Powoduje

normalne

zakończenie

pro-

long strtol(const char *s, char **endp, int base) gramu.

Funkcje

zarejestrowane

przez

atexit

s¸

a

wywoływane

w

kolejności odwrotnej

do

rejestracji, otwarte pliki s¸

a aktualizowane, a otwarte strumienie

Działanie podobne jak wyżej, lecz zamiana na long. Argument zamykane.

base określa sposób transformacji:

Od implementacji zależy, jak status jest przekazywany do śro-od 2 do 36

liczba zapisana przy tej podstawie

dowiska.

0

decyduje postać liczby zapisanej w s:

0 na pocz¸

atku,

to podstawa 8;

0X lub 0X

podstawa 16

int atexit(void (*fcn)(void))

w pozostałych przypadkach

podstawa 10

Zwraca: LONG_MAX lub LONG_MIN w przypadku nadmiaru, a errno otrzymuje wartość ERANGE.

Rejestruje fukcj¸

e fcn, któr¸

a należy wykonać przy normalnym za-

kończeniu programu.

unsigned long strtoul

int system(const char *)

(const char *s, char **endp, int base) Przykład:

Działa tak samo jak strtol, wynik typu unsigned long, a w przypadku bł¸

edu zwraca ULONG_MAX.

#include <stdlib.h>

#include <stdio.h>

Generowanie liczb pseudolosowych

int main(void)

{

int rand(void)

printf("Za chwile uruchomimy interpreter polecen"

" i polecenie systemu!\n");

system("ls -lt");

Zwraca pseudolosow¸

a liczb¸

e całkowit¸

a z przedziału mi¸

edzy 0 i

return 0;

RAND_MAX, która wynosi co najmniej 32767.

}

void srand(unsigned int seed)

char *getenv(const char *name)

Zwraca tekst zawarty w zmiennej środowiskowej name lub NULL jeśli zmienna nie istnieje.

void assert(int wyrazenie)

Przykład:

#include <stdio.h>

Makro służ¸

ace do diagnozowania programów. Jeśli przy wyko-

#include <stdlib.h>

naniu

#include <alloc.h>

#include <string.h>

assert(wyrazenie)

#include <dos.h>

wartość wyrazenia jest równa zeru, to makro assert wypisze int main(void)

do stderr komunikat postaci:

{

char *path, *ptr;

int i = 0;

Assertion failed: wyrazenie, file Nazwa_pliku, line nn

/* get the current path environment */

i wywoła funkcj¸

e abort w celu zakończenia programu.

ptr = getenv("PATH");

Jeśli przed wł¸

aczeniem nagłówka assert.h>do pliku źródłowego zdefiniowano makro NDEBUG, to makro assert jest po-

/* set up new path */

mijane.

path = (char *) malloc(strlen(ptr)+15); Przykład:

strcpy(path,"PATH=");

strcat(path,ptr);

#include <assert.h>

strcat(path,";c:\\temp");

#include <stdio.h>

#include <stdlib.h>

/* replace the current path and

display current environment */

struct ITEM {

putenv(path);

int key;

while (environ[i])

int value;

printf("%s\n",environ[i++]);

};

return 0;

/* add item to list, make sure list is not null */

}

void additem(struct ITEM *itemptr) {

assert(itemptr != NULL);

/* add item to list */

}

void *bsearch(const void *key, const void *base, size_t n, size_t size,

int main(void)

int (*cmp)(const void *keyval, const void *datum))

{

additem(NULL);

return 0;

Przegl¸

ada uporz¸

adkowan¸

a tablic¸

e base[0] . . . base[n-1] złożon¸

a

}

z elementów o rozmiarze size, w poszukiwaniu elementu odpo-wiadaj¸

acemu obiektowi *key.

Funkcja wskazywana przez cmp musi zwracać wartość Zmienne listy argumentów: nagłówek <stdarg.h> ujemn¸

a, gdy pierwszy argument (klucz szukania) jest mniejszy od drugiego (element tablicy), 0 , gdy równy, wartość dodatni¸

a,

Skoki odległe: nagłówek <setjmp.h> gdy wi¸

ekszy.

Funkcja zwraca wskaźnik do znalezionego elementu, albo NULL.

int setjmp(jmp_buf env)

void longjmp(jmp_buf env, int val)

void qsort(void *base, size_t n, size_t size, int (*comp) (const void *, const void *)) Sygnały: nagłówek <signal.h>

Porz¸

adkuje tablic¸

e base w porz¸

adku rosn¸

acym.

Mechanizmy obsługi zdarzeń wyj¸

atkowych, np.

sygnałów

przerwania nadesłanych z zewn¸

atrz programu lub bł¸

edu w wy-

konaniu programu.

int abs(int)

long labs(int)

void (*signal(int sig, void (*handler)(int))(int) div_t div(int num, int denom)

Określa, w jaki sposób s¸

a obsługiwane nadchodz¸

ace sygnały.

Jeśli argument handler Ma wartość SIG_DFL, to działanie do-Oblicza cz¸

eść całkowit¸

a i reszt¸

e z dzielenia num/denom. Wy-

myślne zależne od implementacji, jeśli SIGIGN, to sygnał b¸

edzie

niki wstawia do składowych quot i rem struktury typu div_t; zigonorowany, w pozostałych przypadkach wywołuje si¸

e wska-

składowe s¸

a typu int.

zan¸

a fukcj¸

e z podanym rodzajem sygnału.

Poniżej możliwe sygnały:

SIGABRT

nienormalne zakończenie programu

ldiv_t ldiv(long num, long denom)

SIGFPE

bł¸

ad arytmetyczny

SIGILL

zła postać funkcji

SIGINT

ingerencja użytkownika (przerwanie)

J.w. dla typu long.

SIGSEGV

nielegalne odwołanie do pami¸

eci

SIGTERM

żadanie zakończenia wykonywania

Diagnostyka: nagłówek <assert.h>

Funkcja signal zwraca poprzedni¸

a wartość argumentu han-

Przekształca czas kalendarzowy *tp na czas południka zerowego.

dler dla danego sygnału lub SIGERR w przypadku bł¸

edu.

Jeśli teraz wyst¸

api sygnał sig, to najpierw przywraca si¸

e

domyśln¸

a akcj¸

e dla tego sygnału, a nast¸

epnie wywołuje wska-

struct tm *localtime(const time_t *tp) zan¸

a funkcj¸

e obsługi tak, jakby nast¸

apiło wywołanie (*han-

dler)(sig). Po powrocie z funkcji obsługi program b¸

edzie wzno-

wiony w miejscu, w którym nast¸

apiło przerwanie sygnałem.

Przekształca czas kalendarzowy *tp na czas lokalny.

int raise(int sig)

size_t strftime(char *s, size_t *smax, const char *fmt, const struct tm *tp)

Funkcja raise wysyła do programu sygnał sig. W razie niepo-wodzenia zwraca wartość różn¸

a od zera.

Przekształca dat¸

e i czas zawarte w strukturze *tp w tekst i za-pisuje w miejsce wskazane przez s. Przekształcenie odbywa si¸

e

Obsługa daty i czasu: nagłówek <time.h> na podstawie formatu fmt, analogicznego do formatu fprintf.

Przykład:

Składowe struktury tm:

int tm_sec;

sekundy, które upłyn¸

eły po minu-

#include <stdio.h>

cie (0,61)

#include <time.h>

int tm_min;

minuty, które upłyn¸

eły po godzinie (0,59)

#include <dos.h>

int tm_hour;

godziny, które upłyn¸

eły od północy (0,23)

int main(void)

int tm_mday;

dzień miesiça (1,31)

{

int tm_mon;

miesi¸

ace, które upłyn¸

eły od stycz-

struct tm *time_now;

nia (0,11)

time_t secs_now;

int tm_year;

lata, ktŕe upłyn¸

eły od 1900 r.

char str[80];

int tm_wday;

dni, które upłyn¸

eły od niedzieli (0,6)

tzset();

int tm_yday;

dni, które upłyn¸

eły od pierwszego

time(&secs_now);

stycznia (0,365)

time_now = localtime(&secs_now);

int tm_isdst;

znacznik letniej zmiany czasu

strftime(str, 80,"It is %M minutes after %I"

" o’clock (%Z)

%A, %B %d 19%y",time_now);

printf("%s\n",str);

clock_t clock(void)

return 0;

}

Zwraca czas procesora wykorzystany przez program lub -1, gdy Ograniczenia implementacji: nagłówki

nie może tego wykonać.

<limits.h> i <float.h>

Wyrażenie clock()/CLOCKS_PER_SEC daje czas w sekundach.

Nagłówek <limits.h> zawiera definicje stałych określaj¸

acych

minimalne rozmiary typów całkowitych, a <float.h> minimalne time_t time(time_t *tp)

rozmiary typów rzeczywistych.

Zwraca aktualny czas kalendarzowy lub -1. Jeżeli tp jest różne od NULL, to zwracana wartość jest wstawiana również do *tp.

double difftime(time_t time2, time_t time1) Zwraca różnic¸

e czasów wyrażon¸

a w sekundach.

time_t mktime(struct tm *tp)

Przekształca czas lokalny zawarty w strukturze *tp na czas kalendarzowy w formacie używanym przez time.

Nast¸

epne cztery funkcje zwracaj¸

a wskaźnik do statycznego

obiektu, który może ulec zmianie na skutek innych wywołań tych funkcji.

char *asctime(const struct tm *tp)

Przekształca czas zapisany w strukturze *tp na tekst: Sun Jan 3 15:14:13 1988\n\0

char *ctime(const time_t *tp)

Przekształca czas kalendarzowy *tp na czas lokalny; równoważne wywołaniu: asctime(localtime(tp)).

struct tm *gmtime(const time_t *tp)