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)