The document discusses the C standard library, which is defined by the ANSI C standard. It contains useful functions, predefined constants, typedefs, and global variables declared in header files that are included in almost every C program. The header files are functionally divided, with files like stdio.h for input/output functions, string.h for string functions, and math.h for mathematical functions. Common functions defined include fopen() for opening files, printf() for formatted output, and scanf() for formatted input.
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0 ratings0% found this document useful (0 votes)
48 views30 pages
C Stand Bibl
The document discusses the C standard library, which is defined by the ANSI C standard. It contains useful functions, predefined constants, typedefs, and global variables declared in header files that are included in almost every C program. The header files are functionally divided, with files like stdio.h for input/output functions, string.h for string functions, and math.h for mathematical functions. Common functions defined include fopen() for opening files, printf() for formatted output, and scanf() for formatted input.
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 30
Dodatak C - standardna biblioteka C jezika 1
Dodatak C. Standardna biblioteka C jezika
Standardna biblioteka C jezika definirana je standardom: American national standard for information systems - Programming language C, ANSI X3.159-1989, American National Standards Institute. 1989. Sadri niz korisnih funkcija, predefiniranih konstanti (makro naredbi), typedef tipova i globalnih varijabli (pr. stdin, stdout). Deklaracija tih objekata zapisana je u datotekama koje se nazivaju zaglavlja ili h-datoteke (eng. headers), a koriste se kao poetne #include datoteke u gotovo svakom izvornom programu.
Funkcionalna podjela h-datoteke (zaglavlja) temeljne definicije <stddef.h> rad s ulazno izlaznim ureajima i datotekama <stdio.h> radnje s znakovima i stringovima <string.h>, <ctype.h>, <stdlib.h>, <stdio.h> alociranje memorije <stdlib.h> matematike funkcije <math.h> datum i vrijeme <time.h> promjenljivi broj argumenata <stdarg.h> globalni skokovi <setjmp.h> asertacija <assert.h> prihvat signala stanja raunalnog procesa <signal.h> prihvat i dojava pogreke <errno.h>, <stdio.h>, <string.h> minimalne i maksimalne vrijednosti tipova <limits.h>, <float.h> lokalizacija znakovnih zapisa <locale.h>, <stdlib.h>, <wchar.h>, <wctype.h> suelje s operativnim sustavom <stdlib.h>
Slijedi opis funkcija definiranih standardom. Za svaku funkciju navodi se deklaracija, opis argumenata funkcije i tip vrijednosti koju funkcija vraa.
C 1 <stdio.h> U zaglavlju <stdio.h>, definiran je niz funkcija za rad s ulazno/izlaznim tokovima. Svakom toku je pridjeljen pokaziva na strukturu FILE koja je takoer definirana u <stdio.h>. Standardni ulaz, standardni izlaz i standardni tok dojave greke se automatski inicijaliziraju pri startanju programa, a njihov pokaziva na strukturu FILE je u globalnim varijablama:
FILE *stdin; /* pokaziva toka standardnog ulaza */ FILE *stdout; /* pokaziva toka standardnog izlaza */ FILE *stderr; /* pokaziva toka dojave greke */ Iniciranje pokazivaa datotenih tokova vri se pomou funkcije fopen(). Kada se zavri rad s datotekom treba zatvoriti njen tok pomou funkcije fclose().
U zaglavlju <stdio.h> definirana je i simbolika konstanta EOF koja slui kao oznaka kraja datoteke.
Dodatak C - standardna biblioteka C jezika 2 Otvaranje i zatvaranje toka
fopen
FILE *fopen(const char *name, const char *mode); fopen otvara tok za datoteku imena name. Ako je operacija uspjena, funkcija vraa pokaziva toka, a ako je neuspjena tada vraa NULL. String mode oznaava nain na koji e biti otvorena datoteka. Prvi znak tog stringa mora biti r, w, ili a, to oznaava da se datoteka otvara za itanje, pisanje ili dopunjavanje. Ako se nakon prvog znaka napie znak + tada se datoteka otvara za itanje i pisanje. Dodatno sa moe napisati i znak b. To je oznaka da se na MS-DOS sustavima datoteka tretira kao binarna datoteka. U suprotnom datoteka se otvara u tekstualnom modu. Tada se kod MS-DOS /Windows sustava znak za kraj retka \n u tekstualnoj datoteci zapisuje s dva znaka \r\n, takoer se znak Ctrl-Z (ASCII vrijednost 26) tretira kao oznaka kraja datoteke. Ove pretvorbe ne postoje na Unix sustavima.
freopen
FILE *freopen(const char *name, const char *mode, FILE *fp); freopen slui kao i fopen, ali na nain da se datoteka imena name povee s postojeim pokazivaem toka fp. Tipino se koristi za redirekciju sa standardnih tokova, primjerice, naredbom
freopen("output.log", "w", stdout); budui izlaz koji generiraju funkcije koje djeluju na stdin (primjerice putchar i printf ) bit e preusmjeren u datoteku output.log.
fclose
int fclose(FILE *fp); Funkcija fclose() zatvara tok fp. U sluaju greke vraa EOF, inae vraa 0. Funkcija fclose() se automatski primjenjuje na sve otvorene tokove pri normalnom zavretku programa.
fflush
int fflush(FILE *fp); Ako je otvoren tok fp, funkcijom fflush() svi se podaci iz privremenog datotenog spremnika zapiu u datoteku. Funkcija vraa 0, ili EOF ako nastupi greka.
Input and Output Operations
getchar, getc, fgetc
int getchar(); int getc(FILE *fp); int fgetc(FILE *fp); Funkcija getc() vraa sljedei dobavljivi znak iz toka fp, ili EOF ako je kraj datoteke. Obino EOF ima vrijednost -1, kako bi se razlikovao od ostalih znakova. Zbog toga ova funkcija vraa tip int, a ne tip char. Funkcija getchar() je ekvivalentna getc(stdin). Funkcija fgetc()je ekvivalentna getc(), ali moe biti implementirana kao makro naredba.
putchar, putc, fputc Dodatak C - standardna biblioteka C jezika 3
int putchar(int c); int putc(int c, FILE *fp); int fputc(int c, FILE *fp); Funkcija putc() upisuje znak c u tok fp. Funkcija putchar(c) je ekvivalentna putc(c, stdout). Funkcija fputc je ekvivalentna putc(),ali moe biti implementirana kao makro naredba. Sve tri funkcije vraaju upisani znak, ili EOF u sluaju greke.
printf, fprintf
int printf(const char *format, ...); int fprintf(FILE *fp, const char *format, ...); Funkcija fprintf() upisuje tekstualno formatirane argumente u tok fp. Tri tokice oznaavaju listu argumanata. Format se odreuje u stringu format, koji sadri znakove koji se direktno upisuju na izlazni tok i specifikatore formatiranog ispisa argumenata. printf(format, ) je ekvivalentno fprintf(stdout, format, ). Specifikator formata se sastoji od znaka %, iza kojeg slijede oznake za irinu i preciznost ispisa te tip argumenta, u sljedeem obliku:
Specifikator formata mora zapoeti znakom % i zavriti s oznakom tipa argumenta. Sva ostala polja su opciona (zbog toga su napisana unutar uglatih zagrada). U polje irina_ispisa zadaje se minimalni broj kolona predvienih za ispis vrijednosti. Ako ispis sadri manji broj znakova od zadane irine ispisa, na prazna mjesta se ispisuje razmak. Ako ispis sadri vei broj znakova od zadane irine, ispis se proiruje. Ako se u ovo polje upie znak * to znai da e se broj kolona indirektno oitati iz slijedeeg argumenta funkcije, koji mora biti tipa int. Polje prefiks moe sadravati jedan znak koji ima sljedee znaenje:
- Ispis se poravnava prema lijevoj granici ispisa odreenog poljem irina_ispisa. (inae se poravnava s desne strane) U prazna mjesta se upisuje razmak + Pozitivnim se vrijednostima ispisuje i + predznak. razmak Ako je vrijednost positivna, dodaje se razmak prije ispisa (tako se moe poravnati kolone s pozitivnim i negativnim brojevima). 0 Mjesta razmaka ispunjuju se znakom 0. # Alternativni stil formatiranja
Polje . preciznost odreuje broj decimalnih znamenki iza decimalne toke kod ispisa realnog broja ili minimalni broj znamenki ispisa cijelog broja ili maksimalni broj znakova koji se ispisuje iz nekog stringa. Ovo polje mora zapoeti znakom toke, a iza nje se navodi broj ili znak *, koji znai da e se preciznost oitati iz slijedeeg argumenta tipa int. Ukoliko se ovo polje ne koristi, tada se podrazumijeva da e realni brojevi biti ispisani s maksimalno est decimalnih znamenki iza decimalne toke.
Polje tip_argumenta moe sadravati samo jedan od sljedeih znakova znakova:
c Argument se tretira kao int koji se ispisuje kao znak iz ASCII skupa. d, i Argument se tretira kao int, a ispisuje se decimalnim znamenkama. e, E Argument je float ili double, a ispis je u eksponentnom formatu. f Argument je float ili double, a ispis je prostom decimalnom formatu. Ako je prefiks # i preciznost .0, tada se ne ispisuje decimalna toka. g, G Argument je float ili double, a ispis je prostom decimalnom formatu ili u eksponencijalnom formatu, ovisno o tome koji daje precizniji ispis u istoj irini ispisa. o Argument je unsigned int, a ispisuje se oktalnim znamenkama. p Argument se tretira kao pokaziva tipa void *, pa se na ovaj nain moe ispisati adresa bilo Dodatak C - standardna biblioteka C jezika 4 koje varijable. Adresa se obino ispisuje kao heksadecimalni broj. s Argument mora biti literalni string odnosno pokaziva tipa char *. u Argument je unsigned int, a ispisuje se decimalnim znamenkama. x, X Argument je unsigned int, a ispisuje se heksadecimalnim znamenkama. Ako se zada prefiks # , ispred heksadecimalnih znamenki se ispisuje 0x ili 0X. % Ne odnosi se na argument, ve znai ispis znaka % n Nita se ne ispisuje, a odgovarajui argument mora biti pokaziva na int, u kojega se upisuje broj do tada ispisanih znakova
Polje veliina_tipa moe sadravati samo jedan znak koji se upisuje neposredno ispred oznake tipa.
h Pripadni argument tipa int tretira se kao short int ili unsigned short int. l Pripadni argument je long int ili unsigned long int. L Pripadni argument realnog tipa je long double.
Funkcije printf() and fprintf() vraaju broj ispisanih znakova. Ako nastupi greka, vraaju negativan broj.
scanf, fscanf
int scanf(const char *format, ...); int fscanf(FILE *fp, const char *format, ...);
Funkcijom fscanf() dobavljaju se vrijednosti iz tekstualnog toka fp po pravilima pretvorbe koji su odreeni u stringu format. Te vrijednosti se zapisuju na memorijske lokacije odreene listom pokazivakih argumenata. Lista argumenata (...) je niz izraza odvojenih zarezom, ija vrijednost predstavlja adresu postojeeg memorijskog objekta. Tip objekta mora odgovarati specifikaciji tipa prethodno zapisanog u stringu format.
scanf(format, ) je ekvivalentno fscanf(stdin, format, ).
String format se formira od proizvoljnjih znakova i specifikatora formata oblika:
Ako se pored specifikatora formata navedu i proizvoljni znakovi tada se oekuje da oni budu prisutni u ulaznom tekstu (osim tzv. bijelih znakova: razmak, tab i nova linija) . Osim u sluaju specifikatora %c, %n, %[, i %% , za sve pretvorbe sa podrazumijeva da se iz ulaznog teksta odstrane bijeli znakovi.
Jedini opcioni prefiks je znak * koji znai da se pretvorena vrijednost ne dodjeljuje ni jednom argumentu.
U polju irina_ispisa zadaje se maksimalni broj kolona predvienih za dobavu vrijednosti.
Polje veliina_tipa moe sadravati samo jedan znak koji se upisuje neposredno ispred oznake tipa pokazivakog argumenta. To su sljedei znakovi:
h Pripadni argument tipa int tretira se kao short int ili unsigned short int. l Pripadni argument je long int ili unsigned long int. L Pripadni argument realnog tipa je long double.
Polje tip_argumenta moe sadravati samo jedan od sljedeih znakova:
c Dobavlja se jedan znak, a argument je tipa char *. Ako je definirano polje irina_unosa, tada se unosi onoliko znakova kolika je vrijednost irina_unosa. d Dobavlja se cijeli broj, a argument je tipa int * ( ili short int * ili long int *, ako je Dodatak C - standardna biblioteka C jezika 5 zadana veliina tipa h ili l). i Dobavlja se cijeli broj, a argument je tipa int * ( ili short int * ili long int *, ako je zadana veliina tipa h ili l). Pretvorba se vri i ako je broj zapisan oktalno (zapoima znamenkom 0) ili heksadecimalno (zapoima s 0x ili 0X), e, E, f, g, G Dobavlja se realni broj. Argument je tipa float * ili double *. o Dobavlja se cijeli broj zapisan oktalnim znamenkama. Argument je tipa unsigned int* (ili unsigned short int * ili unsigned long int *, ako je zadana veliina tipa h ili l). p Dobavlja se pokaziva, a argument mora biti tipa void **. s Dobavlja se string koji ne sadri bijele znakove. Argument mora biti tipa char *. u Dobavlja se cijeli broj, a argument je tipa unsigned int * ( ili unsigned short int * ili unsigned long int *, ako je zadana veliina tipa h ili l). x, X Dobavlja se cijeli broj zapisan heksadecimalno. Argument je tipa unsigned int* Argument je tipa unsigned int* (ili unsigned short int * ili unsigned long int *, ako je zadana veliina tipa h ili l). % Ne odnosi se na argument, ve znai dobavu znaka % n Ne vri se pretvorba. Odgovarajui argument mora biti tipa int *. Upisuje se broj do tada uitanih znakova [ Za format oblika %[...] dobavlja se string koji sadri znakove koji su unutar zagrada, prema sljedeem obrascu: %[abc] znai da se dobavlja string koji moe sadravati znakove a,b ili c. %[a-d] znai da se dobavlja string koji moe sadravati znakove a,b,c ili d. %[^abc] znai da se dobavlja string koji moe sadravati sve znakove osim a,b ili c. %[^a-d] znai da se dobavlja string koji moe sadravati znakove sve znakove osim a,b,c ili d. Argument je tipa char *.
Funkcije scanf() and fscanf() vraaju broj uspjeno izvrenih pretvorbi (bez %n i %*). Ako se ne izvri ni jedna konverzija, zbog dosegnutog kraja datoteke, vraa se vrijednost EOF.
gets, fgets
char *fgets(char *buf, int n, FILE *fp); char *gets(char *buf); Funkcije fgets() ita liniju teksta (koja zavrava znakom \n) iz toka fp, i sprema taj tekst (ukljuujui \n i zakljuni znak \0) u znakovni niz buf. Veliina tog niza je n znakova. Ako u liniji ima vie od n-2 znakova, tada nee biti dobavljeni svi znakovi.
Funkcije gets() je ekvivalentna funkciji fgets(), ali iskljuivo slui za dobavu stringa s tipkovnice. Ona ne prenosi znak nove linije i ne vri kontrolu broja unesenih znakova.
Obje funkcije vraaju pokaziva na dobavljeni string ili NULL ako je greka ili kraj datoteke.
puts, fputs
int puts(char *str); int fputs(char *str, FILE *fp); Funkcija fputs() ispisuje string str u tok fp. Funkcija puts()ispisuje string str na stdout i dodaje znak nove linije. Obje funkcije vraaju pozitivnu vrijednost ili EOF ako nastane greka.
fread
size_t fread(void *buf, size_t elsize, size_t n, FILE *fp); Dodatak C - standardna biblioteka C jezika 6 Funkcija fread()iz toka fp ita blok veliine n x elsize bajta i upisuje u spremnik buf. Za dobavu n elemenata nekog tipa, elsize treba biti jednak sizeof(tip elementa). Kod itanja znakova je elsize = 1. Funkcija vraa broj dobavljenih elemenata ili EOF u sluaju greke.
fwrite
size_t fwrite(void *buf, size_t elsize, size_t n, FILE *fp); Funkcija fwrite() upisuje u tok fp blok veliine n x elsize bajta iz spremnika buf. Za upis n elemenata nekog tipa, elsize treba biti jednak sizeof(tip elementa). Kod upisa n znakova elsize = 1. Funkcija vraa broj upisanih elemenata ili EOF u sluaju greke.
ungetc
int ungetc(int c, FILE *fp); Funkcija ungetc()umee u tok fp znak c, tako da e pri sljedeem itanju taj znak biti prvi oitan. Ova operacija se moe obaviti samo nakon operacije itanja iz toka. Funkcija vraa znak c ili EOF u sluaju greke.
Pozicioniranje toka
Mjesto na kojem se vri itanje/pisanje u tok naziva se trenutna pozicija toka (eng. stream position). U radu s binarnim datotekama moe se kontrolirati i postavljati trenutnu poziciju toka.
ftell
long int ftell(FILE *fp); Funkcija ftell vraa long int vrijednost koja je jednaka trenutnoj poziciji toka fp. (kod binarnih datoteka to je pomak u bajtima od poetka datoteke). Ako se radi s velikom datotekama, u kojima pozicija moe biti vee od long int, tada treba koristiti funkciju fgetpos().
fseek, rewind
int fseek(FILE *fp, long int pos, int from); void rewind(FILE *fp); Funkcija fseek() postavlja trenutnu poziciju toka fp na poziciju pos, relativno prema vrijednosti from argumenta, koji moe imati tri vrijednosti: SEEK_SET (poetak datoteke) , SEEK_CUR (trenutna pozicija) i SEEK_END (kraj datoteke). Argument pos moe biti negativna vrijednost. Funkcija vraa 0, ako je operacija uspjena.
Ako je argument from jednak SEEK_SET, nova_pozicija = pos;
Ako je argument from jednak SEEK_CUR, nova_pozicija = trenutna_pozicija + pos;
Ako je argument from jednak SEEK_END nova_pozicija = pozicija_kraja_datoteke + pos;
Nova pozicija mora biti vea ili jednaka nuli, i moe biti vea od trenutne pozicije.
Dodatak C - standardna biblioteka C jezika 7 Funkcija rewind(fp) postavlja poziciju na 0, to je ekvivalentno fseek(fp, 0, SEEK_SET). Ovu funkciju se moe koristiti i s tekstualnim datotekama.
fgetpos, fsetpos
int fgetpos(FILE *fp, fpos_t *pos); int fsetpos(FILE *fp, const fpos_t *pos); Funkcija fgetpos()zapisuje trenutnu poziciju toka fp u fpos_t objekt na kojega pokazuje pos. Funkcija fsetpos postavlja trenutnu poziciju toka fp na vrijednost fpos_t objekta na kojeg pokazuje pos (to mora biti vrijednost prethodno dobijena funkcijom fgetpos). Obje funkcije vraaju 0 ako je operacija uspjena.
Kontrola ulazno/izlaznog spremnika
setbuf, setvbuf
void setbuf(FILE *fp, char *buf); void setvbuf(FILE *fp, char *buf, int mode, size_t size); Pomou ovih funkcija postavlja se korisniki definirani spremnik buf kao spremnik ulazno/izlaznih operacija. Primjenjuju se prije poziva ulazno/izlaznih operacija na otvoreni tok fp. Kod funkcije setbuf() veliina spremnika mora biti jednaka BUFSIZE (definiran u stdio.h). Ako je buf==NULL tada se ne koristi spremnik. Kod funkcije setvbuf() veliina spremnika se postavlja argumentom size, a nain koritenja spremnika se postavlja argumentom mode, koji moe imati tri predefinirane vrijednosti:
_IONBF Ne koristi se spremnik, ve se vri neposredan pristup datoteci. _IOFBF Spremnik se koristi potpuno, tj. spremnik se prazni tek kada je popunjen. _IOLBF Spremnik se koristi djelomino (uvijek se prazni kada se ispisuje znak nove linije \n ).
Dojava i prihvat greke
feof
int feof(FILE *fp); Funkcija feof() vraa nenultu vrijednost ako je tok u poziciji kraj_datoteke, inae vraa 0.
ferror
int ferror(FILE *fp); Funkcija ferror() vraa nenultu vrijednost ako je nastala greka u radu s tokom, inae vraa 0.
clearerr
void clearerr(FILE *fp); Funkcija clearerr() brie indikatore greke ili kraj_datoteke za tok fp.
perror
Dodatak C - standardna biblioteka C jezika 8 void perror(const char *prefix);
Funkcija perror() ispisuje poruku na stderr o trenutno nastaloj greki. Tip greke se biljei u globalnoj varijabli errno. Poruka je ista kao i poruka koja se dobije pozivom funkcije strerror(errno). Drugim rijeima, perror(p) je otprilike ekvivalentna pozivu
fprintf(stderr, "%s: %s", p == NULL ? "" : p, strerror(errno)); Argument prefix je proizvoljni string koji se ispisuje ispred poruke.
Operacije s formatiranim stringovima
sprintf, sscanf
int sprintf(char *buf, const char *format, ...); int sscanf(const char *buf, const char *format, ...); Funkcije sprintf() i sscanf() su varijante od printf() i scanf() koje umjesto ulazno/izlaznog toka koriste proizvoljno odabrani string buf. Znak kraja stringa \0 se tretira kao znak kraj_datoteke. Korisnik mora voditi rauna o tome da veliina stringa buf bude dovoljno velika, da se moe izvriti sve pretvorbe formata u sprintf() funkciji.
Operacije s promjenjljivom listom argumenata
vprintf, vfprintf, vsprintf
int vprintf(const char *format, va_list argp) int vfprintf(FILE *fp, const char *format, va_list argp) int vsprintf(char *buf, const char *format, va_list argp) Ove funkcije omoguuju definiranje funkcija s promjenljivim brojem argumenata, koje imaju funkcionalnost kao printf(), fprintf(), i sprintf() funkcije. Posljednji argument ovih funkcija argp je pokaziva tipa va_list. To omoguuje rad s promjenljivim brojem argumenata. U sljedeem programu definirana je funkcija za dojavu greke, koju se moe koristiti za dojavu greke pri analizi izvornog programa. Ona koristi dvije globalne varijable koje sadre ime datoteke (filename) i broj linije izvornog programa (lineno). U dojavi greke se uvijek prije izvjetaja o tipu greke ispisuje to ime i broj linije.
#include <stdio.h> #include <stdarg.h> extern char *filename; /* current input file name */ extern int lineno; /* current input line number */
Dodatak C - standardna biblioteka C jezika 9 Manipuliranje s datotekama
rename
int rename(const char *origname, const char *newname); Funkcija rename() vri promjenu imena datoteke origname, u ime newname. Ako je operacija uspjena funkcija vraa 0, inae vraa nenultu vrijednost.
remove
int remove(const char *name); Funkcija remove() brie datoteku imena name. Ako je operacija uspjena funkcija vraa 0, inae vraa nenultu vrijednost.
tmpfile, tmpnam
FILE *tmpfile(void); char *tmpnam(char *buf); Funkcija tmpfile() stvara privremenu datoteku i otvara je u "wb+" modu. Po izlasku iz programa ova se datoteka automatski brie. Funkcija tmpnam() generira jedinstveno ime u string buf, koji mora biti duljine L_tmpnam (predefinirana konstanta). To se ime moe koristiti za stvaranje datoteke. Ako je buf==0, ime se generira u internom statikom spremniku. Funkcija vraa pokaziva na taj spremnik.
C 2 <string.h> Funkcije koje su deklarirane u <string.h> uglavnom slue za rad s ASCIIZ stringovima. Pored njih, definirano je nekoliko funkcija, ije ime zapoima s mem, za rad s memorijskim blokovima (nizovima). Rad sa stringovima
size_t strlen(const char *s) Vraa duljinu stringa s. char *strcpy(char *s, const char *t) Kopira string t u string s, ukljuujui '\0'; vraa s. char *strncpy(char *s, const char *t, size_t n) Kopira najvie n znakova stringa t u s; vraa s. Dopunja string s sa '\0' znakovima ako t ima manje od n znakova. Napomena: ako u stringu t ima n ili vie znakova, tada string s nee biti zakljuen s '\0'. char *strcat(char *s, const char *t) Dodaje string t na kraj stringa s; vraa s. char *strncat(char *s, const char *t, size_t n) Dodaje najvie n znakova stringa t na string s, i znak '\0'; vraa s. int strcmp(const char *s, const char *t) Usporeuje string s sa stringom t, vraa <0 ako je s<t, 0 ako je s==t, ili >0 ako je s>t. Usporedba je leksikografska, prema ASCII rasporedu. Dodatak C - standardna biblioteka C jezika 10 int strncmp(const char *s, const char *t, size_t n) Usporeuje najvie n znakova stringa s sa stringom t; vraa <0 ako je s<t, 0 ako je s==t, ili >0 ako je s>t. int strcoll(const char *s, const char *t); strcoll() usporeuje dva stringa s1 and s2, poput strcmp(), ali se usporedba vri prema multinacionalnom znakovnom rasporedu (koji je odreen konstantom LC_COLLATE ). Vraa <0 ako je s<t, 0 ako je s==t, ili >0 ako je s>t. size_t strxfrm(char *s, const char *t, size_t n); strxfrm() formira modificiranu kopiju n znakova stringa t u stringu s (ukljuujui \0) , tako da strcmp(s,t) daje istu ocjenu kao i strcoll(s,n) na originalnom stringu. Vraa broj znakova u stringu s. char *strchr(const char *s, int c) Vraa pokaziva na prvu pojavnost znaka c u stringu s, ili NULL znak ako c nije sadran u stringu s. char *strrchr(const char *s, int c) Vraa pokaziva na zadnju pojavnost znaka c u stringu s, ili NULL znak ako c nije sadran u stringu s. char *strstr(const char *s, const char *t) Vraa pokaziva na prvu pojavu stringa t u stringu s, ili NULL ako string s ne sadri string t. size_t strspn(const char *s, const char *t) Vraa duljinu prefiksa stringa s koji sadri znakove koji ine string t. size_t strcspn(const char *s, const char *t) Vraa duljinu prefiksa stringa s koji sadri znakove koji nisu prisutni u stringu t. char *strpbrk(const char *s, const char *t) Vraa pokaziva na prvu pojavu bilo kojeg znaka iz string t u stringu s, ili NULL ako nije prisutan ni jedan znak iz string t u stringu s. char *strerror(int n) Vraa pokaziva na string koji se interno generira, a slui za dojavu greke u nekim sistemskim operacijama. Argument je obino globalna varijabla errno, iju vrijednost odreuje izvrenje funkcija iz standardne biblioteke. char *strtok(char *s, const char *sep) strtok() je funkcija kojom se moe izvriti razlaganje stringa na niz leksema koji su razdvojeni znakovima-separatorima. Skup znakova-separatora se zadaje u stringu sep. Funkcija vraa pokaziva na leksem ili NULL ako nema leksema.
Koritenje funkcije strtok() je specifino jer u stringu moe biti vie leksema, a ona vraa pokaziva na jedan leksem. Da bi se dobili slijedei leksemi treba iznova pozvati ovu funkciju, ali s prvim argumentom jednakim NULL. Primjerice, za string
char * s = "Prvi drugi,treci"; ako odaberemo znakove separatore: razmak, tab i zarez, tada sljedei iskazi daju ispis tri leksema (Prvi drugi i treci):
char *leksem = strtoken(s, " ,\t"); /* dobavi prvi leksem */ Dodatak C - standardna biblioteka C jezika 11 while( leksem != NULL) { /* ukoliko postoji */ printf("", leksem); /* ispii ga i */ lexem = strtok(NULL," ,\t"); /* dobavi sljedei leksem */ } /* pa ponovi postupak */
Ove funkcije kopiraju tono n bajta s lokacije na koju pokazuje src na lokaciju koju pokazuje dest. Ukoliko se blokovi preklapaju tada treba koristiti funkciju memmove(). Funkcije vraaju pokaziva dest.
memcmp
int memcmp(const void *p1, const void *p2, size_t n); Funkcija memcmp() usporeuje tono n znakova s lokacija na koje pokazuju p1 i p2, na isti nain kao strcnmp(), ali se usporedba ne prekida ako je dostignut znak \0.
memchr
void *memchr(const void *p, int c, size_t n); Funkcija memchr() trai prvu pojavu znaka c u n znakova bloka na koji pokazuje p. Vraa pokaziva na pronaeni znak ili NULL ako znak nije pronaen.
memset
void *memset(void *p, int c, size_t n); Funkcija memset() spostavlja n bajta bloka na koji pokazuje p na vrijednost znaka c, i vraa p.
C 3 <ctype.h> Funkcije iz <ctype.h> omoguuju klasifikaciju znakova i pretvorbu velikih u mala slova i obratno. Klasifikacija znakova
int isupper(int c); vraa vrijednost razliitu od nule ako je znak c veliko slovo, inae vraa 0. int islower(int c); vraa vrijednost razliitu od nule ako je znak c malo slovo, inae vraa 0. int isalpha(int c); vraa vrijednost razliitu od nule ako je znak c veliko ili malo slovo, inae vraa 0. int iscntrl(int c); vraa vrijednost razliitu od nule ako je znak c kontrolni znak, inae vraa 0. Dodatak C - standardna biblioteka C jezika 12 int isalnum(int c); vraa vrijednost razliitu od nule ako je znak c slovo ili znamenka, inae vraa 0. int isdigit(int c); vraa vrijednost razliitu od nule ako je znak c decimalna znamenka, inae vraa 0. int isxdigit(int c); vraa vrijednost razliitu od nule ako je znak c heksadecimalna znamanka, inae vraa 0. int isgraph(int c); vraa vrijednost razliitu od nule ako je znak c tiskani znak osim razmaka, inae vraa 0. int isprint(int c); vraa vrijednost razliitu od nule ako je znak c tiskani znak ukljuujui razmak, inae vraa 0. int ispunct(int c); vraa vrijednost razliitu od nule ako je znak c tiskani znak osim razmaka, slova ili znamanke, inae vraa 0. int isspace(int c); vraa vrijednost razliitu od nule ako je znak c razmak, tab, vert. tab, nova linija, povrat ili nova stranica, inae vraa 0. Pretvorba znaka
int toupper(int c); int tolower(int c);
Funkcija toupper() pretvara malo slovo u ekvivalentno veliko slovo, ostala slova ostaju nepromijenjena. Slino, tolower() pretvara veliko slovo u ekvivalentno malo slovo. C 4 <stdlib.h> U zaglavlju <stdlib.h> definirano je nekoliko temeljnih funkcija za alokaciju memorije, pretvorbu stringa u brojeve, manipuliranje s multibajtnim znakovnim skupom, itd. Alokacija memorije
malloc, calloc
void *malloc(size_t n); void *calloc(size_t n, size_t elsize); Funkcijom malloc alocira se n bajta slobodne memorije. Ako je alociranje uspjeno funkcija vraa pokaziva na tu memoriju, u suprotnom vraa NULL pokaziva. Primjerice, naredbom
double *dp = malloc(10 * sizeof(double)); dobije se pokaziva dp, koji pokazuje na niz od 10 elemenata tipa double.
Funkcija calloc(n, elsize) je ekvivalentna malloc(n * elsize), uz dodatni uvjet da calloc inicijalizira sve bitove alocirane memorije na vrijednost nula. Dodatak C - standardna biblioteka C jezika 13
free
void free(void *p); Funkcija free() prima kao argument pokaziva p. Uz pretpostavku da p pokazuje na memoriju koja je prethodno alocirana fukcijom malloc, calloc ili realloc, ova funkcija dealocira tu memoriju.
realloc
void *realloc(void *oldptr, size_t newsize); Funkcija realloc() vri promjenu veliine prethodno alocirane memorije, koja je pridjeljena pokazivau ptr, na veliinu newsize. Funkcija realloc() vraa pokaziva na tu memoriju. Vrijednost toga pokazivaa moe biti ista kao i vrijednost od ptr, ako memorijski alokator moe prilagoditi veliinu zahtjevanog podruju slobodne memorije veliini newsize. Ukoliko se to ne moe ostvariti funkcija realloc alocira novo podruje memorije pa u njega kopira i zatim oslobaa dio memorije na koju pokazuje ptr. Ukoliko se ne moe izvriti alokacija memorije funkcija realloc() vraa NULL.
Napomena: poziv realloc(p, 0) je ekvivalentan pozivu free(p), a poziv realloc(0, n) je ekivalentan pozivu malloc(n).
Pretvorba stringa u numeriku vrijednost
atoi, atol, strtol, strtoul
int atoi(const char *s); long int atol(const char *s); long int strtol(const char *s, char **endp, int baza); unsigned long int strtoul(const char *s, char **endp, int baza); Ove funkcije pretvaraju numeriki string s u odgovarajuu numeriku vrijednost. Funkcija strtol()u stringu s preskae bijele znakove, pretvara s u broj i vraa vrijednost tipa long int. Ona omoguuje pretvorbu iz sustava razliite baze. Ako je baza 10 tada se iz ulaznog stringa s prihvaaju znakovi od 0 do 10, a ako je baza 16 prihvaaju se i znakovi a-f, A-F. Ako je baza manja od 10 prihvacaju se znakovi od 0 do baza-1. Ako je baza 0, tada se koristi pravilo da oktalni brojevi zapoimaju s nulom, a heksadecimalni s 0x ili 0X.
atoi(s) je ekvivalntno strtol(s,NULL,0);
Argument endp ja pokaziva na pokaziva na char. Njega se koristi za tako da ako endp != NULL, tada strtol() sprema u *endp pokaziva na prvi znak koji nije obraen. Ako je to znak '\0', pretvorba je uspjena. Ako je jednak s, pretvorba uope nije izvrena. Funkcija vraa vrijednost koja je pretvoreni broj ili 0 ako pretvorba nije izvrena ili konstanta LONG_MAX ili LONG_MIN ako se broj ne moe predstasviti kao long int. U sluaju prekoraenja postavlja se errno = ERANGE.
Funkcija strtoul() je slina strtol() eosim to vraa tip unsigned long int, ili vrijednost ULONG_MAX kod prekoraenja.
atol(s) je ekvivalntno strtoul(s,NULL,0);
atof, strtod
double atof(const char *s); Dodatak C - standardna biblioteka C jezika 14 double strtod(const char *s, char **endp); Ove funkcije pretvaraju numeriki string s u odgovarajuu numeriku vrijednost realnog broja. Funkcija strtod()u stringu s preskae bijele znakove, pretvara s u broj i vraa vrijednost tipa double. Prihvaa prosti i eksponentni zapis realnoh broja. Argument endp ja pokaziva na pokaziva na char. Njega se koristi za tako da ako endp != NULL, tada strtod() sprema u *endp pokaziva na prvi znak koji nije obraen. Ako je to znak '\0', pretvorba je uspjena. U sluaju prekoraenja vraa konstantu HUGE_VAL, i postavlja globalnu varijablul errno = ERANGE.
atof(s) je ekvivalentno strtod(s, NULL), osim to rezultat nije definiran u sluaju prekoraenja.
Generator sluajnih brojeva
rand
int rand(void); Funkcija rand() vraa sluajni cijeli broj iz intervala 0 do RAND_MAX ( RAND_MAX je konstanta definirana u <stdlib.h>).
srand
void srand(unsigned int seed); Funkcija srand() postavlja poetnu vrijednost seed generatora sluajnih brojeva.
Sortiranje i traenje
qsort
void qsort(void *a, size_t n, size_t elsize, int (*cmpfunc)()); Funkcija qsort() sortira niz a, koji ima n elemenata veliine elsize (u bajtima), prema kriteriju koji je odreen funkcijom na koju pokazuje cmpfunc. Ta funkcija mora biti deklarirana u obliku:
int name(const void *p1, const void *p2); i mora vratiti cijeli broj koji je manji, vei ili jedanak nuli, ovosno o tome da li je objekt na kojeg pokazuje p1 manji, vei, ili jednak objektu na kojeg pokazuje p2.
bsearch
bsearch(const void *pObj, const void *a, size_t n, size_t elsize, int (*cmpfunc)()); Funkcija bsearch() vri binarno traenje u sortitanom nizu a, koji ima n elemenata veliine elsize (u bajtima), traei element koji je jednak objektu na kojeg pokazuje pObj. Pri traenju se za usporedbu koristi funkcija na kojiu pokazuje cmpfunc. Deklaracija te funkcije je ista kao kod qsort().
Interakcija s operativnim sustavom
getenv Dodatak C - standardna biblioteka C jezika 15
char *getenv(const char *name); Environment sadri postavke operativnog sustava u sistemskim varijablama (pr. path). Funkcija getenv() trai environment varijablu imena name i vraa njenu vrijednost u obliku stringa. Ako ne moe pronai tu varijablu, tada vraa NULL.
atexit int atexit(void (*func)(void)); Funkcija atexit() prima kao argument pokaziva na funkciju func, koja e biti pozvana pri normalnim zavretku programa. Vraa 0 ako je funkcija uspjeno registrirana. Moe se registrirati do 32 funkcije, koje e biti pozvane u obrnutom redoslijedu od reda registriranja.
exit void exit(int status); Funkcija exit() vri normalni zavretak programa, poziva sve funkcije koje su registrirane atexit() funkcijom i zatvara sve tokove. Argument status se prosljeuje operativnom sustavu. Mogu se koristiti i dvije simbolike konstante EXIT_SUCCESS i EXIT_FAILURE. Po dogovoru, status=0 (EXIT_SUCCESS) znai uspjean zavretak programa.
system
int system(const char *s); Funkcija system() prima kao argument string koji sadri komandu operativnog sustava. Funkcija vraa vrijednost koju vrati operativni sustav po zavretku procesa.
abort
void abort(void); Funkcija abort() predstavlja zahtjev za neposrednim prekidom programa, na isti nain kao da je izvren poziv raise(SIGABRT).
Cjelobrojne aritmetike funkcije
abs, labs
int abs(int x); long int abs(long int x); Obje funkcije vraaju apsolutnu vrijednost argumenta x..
div, ldiv
div_t div(int num, int denom); ldiv_t div(long int num, long int denom); Ove funkcije vre dijeljenje num/denum na nai da se istovremeno dobije rezultat dijeljenja i ostatak cjelobrojnog dijeljenja. Rezultat se vraa u vrijednost koja je tipa sljedee strukture:
typedef struct { int quot; /* rezultat dijeljenja */ int rem; /* ostatak dijeljenja */ }div_t; Dodatak C - standardna biblioteka C jezika 16
Multibajt znakovne sekvence i stringovi Za zapis znakova po ASCII standardu koristi se tip char. Za zapis znakova se takoer moe koristiti proireni znakovni tip wchar_t, koji podrava 16-bitni Unicode standard, i multibajt znakovne sekvence MBCS (za jezike poput japanskog).
mblen
int mblen(const char *s, size_t n); Funkcija mblen() vraa broj znakova u stringu koji sadri multibajt znakovne sekvence. Analizira se maksimalno n znakova.
mbtowc, wctomb
int mbtowc(wchar_t dest, const char *src, size_t n); int wctomb(char *dest, wchar_t src); Ove funkcije pretvaraju multibajt znakovnu sekvencu u tip wchar_t i obrnuto. Funkcija mbtowc() analizira maksimalno n bajta iz stringa src i pretvara ih u wchar_t i sprema u dest, te vraa broj bajta ili -1 ako pretvorba nije uspjena. Funkcija wctomb() pretvara proireni znak src u multibajt sekvencu dest, i vraa broj bajta u toj sekvenci.. (Ovaj broj nee nikada biti vei od konstante MB_CUR_MAX, definirane u <stdlib.h>.)
mbstowcs, wcstombs
size_t mbstowcs(wchar_t *dest, const char *src, size_t n); size_t wcstombs(char *dest, wchar_t src); Ove funkcije vre pretvorbu viestruke multibajt sequence i niza proirenih znakova znakova. Funkcija mbtowcs() pretvara multibajt sekvencu src i u niz proirenih znakova i sprema u dest, ali maksimalno n znakova. Vraa broj pretvorenih znakova. Funkcija wcstombs() vri obrnutu radnju.
C 5 <math.h> Standardne matematike funkcije su deklarirane u zaglavlju <math.h>. Njihov opis je dan sljedeoj tablici:
Funkcija Vraa vrijednost: double sin(double x); sin(x) , sinus kuta x u radijanima double cos(double x); cos(x) , kosinus kuta x u radijanima double tan(double x); tg(x) , tangens kuta x u radijanima double asin(double x); arcsin(x), vraa vrijednost [-/2, /2], za x [-1,1]. double acos(double x); arccos(x), vraa vrijednost [0, ], za x [-1,1]. double atan(double x); arctg(x), vraa vrijednost [-/2, /2]. double atan2(double y, double x); arctan(y / x), vraa vrijednost [-,]. double sinh(double x); sh(x), sinus hiperbolni kuta x double cosh(double x); ch(x) , kosinus hiperbolni kuta x double tanh(double x); th(x) , tangens hiperbolni kuta x double exp(double x); e x , x potencija broja e = 2,781 Dodatak C - standardna biblioteka C jezika 17 double log(double x); prirodni logaritam ln(x), x>0. double log10(double x); logaritam baze 10, log 10 (x), x>0. double pow(double x, double y); x y , potenciranje x s eksponentom y. Nastaje greka ako je x=0 i y <= 0, ili ako je x<0, a y nije cijeli broj. double sqrt(double x); x, za x>=0, dugi korijen pozitivnog broja double ceil(double x); najmanji cijeli broj (tipa double) koji nije manji od x double floor(double x); najvei cijeli broj (tipa double) koji nije vei od x double fabs(double x); |x|, apsolutna vrijednost od x double ldexp(double x,int n); x*2 n
double frexp(double x, int *exp); rastavlja x na frakcioni dio i eksponent broja 2. Vraa normaliziranu frakciju od x (iz intervala [1/2,1)] i exponent od 2 u *exp. Ako je x jednak nuli, oba dijela su jednaka nuli. Primjerice, frexp(2.5, &i) vraa 0.625 (odnosno 0.101 baze 2) i postavlja i na 2, tako da ldexp(0.625, 2) ponovo daje vrijednost 2.5. double modf(double x, double *ip); rastavlja x na integralni i frakcioni dio, tako da oba imaju predznak od x. Vraa frakcioni dio, a integralni dio smjeta u *ip. double fmod(double x, double y); ostatak dijeljenja realnih brojeva x/y, s predznakom od x.
C 6 <time.h> U zaglavlju <time.h> definirane su funkcije i strukture za rad s datumima i vremenom. Posebni typedef tip time_t, slui za biljeenje vremena. Obino se uzima da ovaj tip predstavlja broj sekundi poevi od 01.01.1970. godine. Za detaljniji zapis vremena i datuma koristi se struktura tm, koja se definira na sljedei nain:
struct tm /* opisuje vrijeme i datum */ { int tm_sec; /* sekunde 0..61 */ int tm_min; /* minute 0..59 */ int tm_hour; /* sat 0..23 */ int tm_mday; /* dan 1..31 */ int tm_mon; /* mjesec 0..11 */ int tm_year; /* broj godina nakon 1900 */ int tm_wday; /* dan u sedmici 0..6 */ int tm_yday; /* dan u godini 0..365 */ int tm_isdst; /* da li je dan promjene sata 0..1 */ }; Napomena: ako dan promjene sata nije implementiran tada tm_isdst ima negativnu vrijednost. Broj sekundi moe biti vei od 59 u sluaju prestupnog vremena. Mjeseci su kodiranu tako da 0 oznaava sijeanj, 1 veljau itd. Dani u sedmici su kodirani tako da 0 oznaava nedjelju, 1 ponedjeljak itd. Stvarna godina se dobije tako da se lanu tm_year doda vrijednost 1900 (primjerice u godini 2002. godini lan tm_year sadri vrijednost 102).
time
time_t time(time_t *tp); Funkcija time() vraa time_t vrijednost kardinalni broj koji predstavlja trenutno vrijeme (obino je to broj sekundi od 1.1.1970.). Parametar tp, ako nije NULL, takoer prihvaa trenutno vrijeme u *tp.
localtime, gmtime Dodatak C - standardna biblioteka C jezika 18
struct tm *localtime(const time_t *t); struct tm *gmtime(const time_t *t); Pretvorbu vremena iz formata time_t u struct tm vri se funkcijom localtime(), kada se eli dobiti lokalno vrijeme, ili funkcijom gmtime() za dobiti univerzalno vrijeme u nultom meridijanu. Obje funkcije primaju adresu varijable koja sadri vrijeme u formatu time_t, a vraaju pokaziva na statiku strukturu tipa tm (sadraj se obnavlja pri svakom pozivu ovih funkcija) .
ctime, asctime Ako se eli dobiti zapis vremena u obliku stringa, mogu se koristiti funkcije
char *ctime(const time_t *t); char *asctime(const struct tm *tp); Funkcija ctime() za argument koristi adresu varijable koja sadri vrijeme u formatu time_t, a funkcija asctime()za argument koristi pokaziva na strukturu tm. Obje funkcije vraaju pokaziva statikog stringa koji sadri zapis vremena u standardnom formatu. Primjerice, sekvenca naredbi time_t t = time(NULL); char *s = ctime(&t); puts(s); generira ispis: Sat May 11 14:21:20 2002 Uoite da je rezultat poziva ctime(&t) ekvivalentan pozivu asctime(localtime(&t)) .
Standardna verzija je prilagoena amerikim standardima. Ako se eli napisati vrijeme u formatu 11.05.2002 14:21 tada se moe koristiti sljedee iskaze: /* ispisuje datum i vrijeme u formatu 11.05.2002 14:21 */ time_t t = time(NULL); struct tm *p = localtime(&t); printf("%.2d.%.2d.%.2d %2d:%.2d\n", p->tm_mday, p->tm_mon + 1, p->tm_year +1900, p->tm_hour, p->tm_min);
strftime
size_t strftime(char *buf, size_t bufsize, const char *fmt, const struct tm *tp); Funkcija strftime() se koristi za formatirani ispis vremena. Format se zadaje kao kod printf() funkcije. Prvi argument je string str u koji se vri formatirani zapis. Drugi argument (bufsize) ograniava broj znakova stringa. Trei parametar je string u kojem se zapisuje format ispisa nizom specifikatora oblika %x (kao kod printf() funkcije). Posljednji argument je pokaziva strukture tm. Funkcija vraa broj znakova u stringu ili 0 ako nije mogue generirati formatirani string. Specifikatori formata su:
%a kratica od tri slova za ime dana u sedmici (eng. Sun, Mon, Tue,..) %A puno ime dana u sedmici (eng.) %b kratica od tri slova za ime mjeseca (eng. Jan, Feb, Mar,...) %B puno ime mjeseca (eng.) %c kompletni zapis vremena i datuma %d dan u mjesecu (1..31) %H sat u formatu (1..24) %I sat u formatu (1..12) %j dan u godini (1..365) Dodatak C - standardna biblioteka C jezika 19 %m mjesec u godini (1..12) %M minute %p AM/PM (eng.) string koji oznaava jutro ili popodne %S sekunde %U broj za sedmicu u godini (1..52) - 1 odreen prvom nedjeljom %w broj za dan u sedmici (0-nedjelja) %W broj za sedmicu u godini (1..52) - 1 odreen prvim ponedjeljkom %x kompletni zapis datuma %X kompletni zapis vremena %y zadnje dvije znamenke godine %Y godina u 4-znamenkastom formatu %Z ime vremenske zone (ako postoji ) %% znak %
mktime time_t mktime(struct tm *tp); Funkcija mktime() pretvara zapisa iz strukture tm u time_t format. Korisna je u tzv. kalendarskim proraunima. Kada je potrebno dodati nekom datumu n dana, tada se moe upisati datum u tm strukturu, poveati lan tm_mday za n, zatim pozivom mktime() se dobije time_t vrijednost koja odgovara novom datumu.
difftime double difftime(time_t t1, time_t t2); Funkcija difftime() vraa realnu vrijednost koja je jednaka razlici vremena t1 i t1 u sekundama.
clock clock_t clock(void); Funkcija clock() slui za preciznije mjerenje vremena nego je to mogue sa prethodnim funkcijama. Ona vraa vrijednost procesorskog mjeraa vremena, koji starta na poetku programa, u jedinicama koje su znatno manje od sekunde (nekoliko milisekundi). Koliko je tih jedinica u jednoj sekundi odreeno je konstantom CLOCKS_PER_SEC. To znai da izraz:
(double)clock()/CLOCKS_PER_SEC daje vrijednost koja je jednaka vremenu (u sekundama) od startanja programa.
C 7 <signal.h> U zaglavlju <signal.h> deklarirane su dvije funkcije (signal() i raise()) za prihvat i generiranje asinkronih prekida programa ili "signala". Za identificiranje nekoliko moguih signala, u ovom zaglavlju su definirane simbolike cjelobrojne konstante sa sljedeim imenima:
SIGABRT Signal kojeg generira funnkcija abort(). SIGFPE Signal koji se generira kad nastane greka kod matematikih operacija primjerice pri djeljenju s nulom. SIGILL Signal koji se generira ako se pokuava izvriti nepostojea ili nedozvoljena instrukcija procesora. SIGINT Signal koj se generira s tipkovnce (primjerice, Ctrl-C tipkom). SIGSEGV Signal koji se generira ako se pristupa zatienoj ili nepostojeoj memoriji ("segmentation violations"). SIGTERM Signal koji se generira kada je proces prekinut nekim vanjskim dogaajem.
Dodatak C - standardna biblioteka C jezika 20 Ovisno o implementaciji kompilatora, mogue su i dodatne definicije identifikatora signala.
raise
int raise(int sig); Funkcija raise() alje izvrnom programu signal sig.
signal
void (*signal(int sig, void (*func)(int)))(int); Funkcija signal() se koristi za definiranje akcije koja se treba izvriti kada se pojavi neki signal. Ukoliko nije definirana radnja koja se vri nakon pojave signala, prekida se program.
Argument sig je signal kojeg treba prihvatiti (jedna od SIGxxx konstanti). Argument func je ili konstanta SIG_IGN (kojom se zahtijeva ignoriranje signala) ili konstanta SIG_DFL (kojom se postavlja predodreeni postupak prihvata signala) ili pokaziva na korisniki definiranu funkciju koja e se izvriti pojavom signala. Ta funkcija mora imati prototip oblika
void signalhandler(int sig); Argument ove funkcije tipa int je broj signala koji se prihvaa.
Funkcija signal() vraa prethodni oblik prihvata signala; SIG_DFL, SIG_IGN, ili pokaziva na funkciju. Zbog navedenih svojstava, deklaracija funkcije signal() je kompleksna. To je funkcija koja vraa pokaziva na funkciju koja prima jedan argument tipa int i vraa void. Prvi argument je tipa int, a drugi argument je pokaziva na funkciju koja prima jedan argument tipa int i vraa void.
Primjer: u sljedeem programskom odsjeku pokazano je kako se postavlja poziv funkcije exithandler u sluaju pojave prekida (interrupt signal - SIGINT), ali samo ako taj signal nije prethodno ignoriran:
C 8 <setjmp.h> U zaglavlju <setjmp.h> deklarirane su funkcije setjmp() i longjmp(), pomou kojih se moe izvriti skok u program i izvan funkcije. Toka u programu na koju se vri skok oznaava se funkcijom setjmp(), koja pamti stanje stoga i registara procesora i trenutnu programsku lokaciju u objektu tipa jmp_buf. Kasnije se s bilo kojeg mjesta u programu moe skoiti na ovu poziciju pozivom funkcije longjmp().
setjmp
int setjmp(jmp_buf context); Funkcija setjmp() sprema trenutnu programsku lokaciju i stanje procesora u objekt context, koji je tipa jmp_buf , i vraa vrijednost 0. Kasnije, nakon poziva funkcije longjmp() povratna vrijednost se moe promijeniti.
longjmp
void longjmp(jmp_buf context, int retval) Dodatak C - standardna biblioteka C jezika 21 Funkcija longjmp() vri skok na stanje opisano u objektu context, koji je prethodno spremljen pozivom funkcija setjmp(). Skok se vri na mjesto gdje je prethodno pozvana funkcija setjmp(), pa se sada vri povrat iz funkcije setjmp()s vrijednou retval. C 9 <locale.h> U zaglavlju <locale.h> deklarirane su dvije funkcije za lokalizirane postavke. Poetno, program zapoima u "C" lokalizaciji, koja se zatim moe promijeniti sa setlocale() funkcijom. Lokalno- specifine informacije se dijele u nekoliko kategorija, koje se oznaavaju sljdeim konstantama:
LC_COLLATE Usporedba stringova se vri pomou funkcija strcoll() i strxfrm() LC_CTYPE Klasiofikacija znakova pomou funkcija iz <ctype.h> LC_MONETARY Monetarne postavke se dobiju funkcijom localeconv() LC_NUMERIC Koristi decimalnu toku u funkcijama printf(), scanf()), strtod(), itd. LC_TIME Lokalizirani format strftime() funkcije LC_ALL Unija prethodnih postavki
setlocale
char *setlocale(int cat, const char *locale); Funkcija setlocale()ima dva argumenta. Prvi argument je oznaka kategorije koja se postavlja, a drugi parametar locale je string za oznaku lokalizacije. Ako taj string je jednak C, tada se koristi predodreena lokalizacija. Prazni string takoer oznaava predodreenu lokalizaciju. Sve ostale oznake su specifine za pojedinu implementaciju kompilatora. Funkcija vraa pokaziva na string koji sadri prethodnu locale postavku. Ako se setlocale() pozove s locale = NULL tada funkcija vraa trenutnu postavku.
localeconv
struct lconv *localeconv(void); Funkcija localeconv() vraa pokaziva na strukturu lconv koja sadri lokalno-specifine informacije. Ta struktura je otprilike definirana ovako:
struct lconv { char *decimal_point; char *thousands_sep; char *grouping; char *int_curr_symbol; char *currency_symbol; char *mon_decimal_point; char *mon_thousands_sep; char *mon_grouping; char *positive_sign, *negative_sign; char int_frac_digits; char frac_digits; char p_cs_precedes, p_sep_by_space; char n_cs_precedes, n_sep_by_space; char p_sign_posn, n_sign_posn; }; decimal_point je oznaka koja se koristi za decimalni zarez. thousands_sep je separator koji se koristi izmeu grupe znamenki grouping je string that defines veliinu grupe (primjerice "\3" oznaava da se ponavlje grupa od 3 znaka ). Dodatak C - standardna biblioteka C jezika 22
Ostali lanovi opisuju monetarno-specifine informacije. Ukratko, int_curr_symbol i currency_symbol su verzije (internacionalne i lokalne) za lokalnu valutu, mon_decimal_point je decimalna toka, mon_thousands_sep i mon_grouping dopisuju grupiranje znamenki (analogno s thousands_sep i grouping), positive_sign i negative_sign su znakovi pozitivnog i negativnog predznaka, int_frac_digits i frac_digits opisuju broj decimalnih znamenki koje se prikazuju. Ostali lanovi opisuju oznaku valute i inikatore predznaka. C 10 <stdarg.h> U zaglavlju <stdarg.h> su definirani makro naredbe pomou kojih se omoguuje definiranje funkcija s promjenjljivim brojem parametara. Koristi se ideja da se argumentima neke funkcije pridijeli lista pokazivaa koja ima apstraktni tip va_list. U tu svrhu koristi se makro va_start. Zatim se iz ove liste mogu dobiti svi argumenti pomou makroa va_arg. Na kraju rada, unutar iste funkcije, treba pozvati makro va_end.
va_start
va_start(va_list argp, lastarg); va_start inicijalizira argp tako da se njime mogu dohvatiti argumenti. lastarg is je ime posljednjeg fiksnog argumenta funkcije.
va_arg
argtype va_arg(va_list argp, argtype); va_arg dobavlja vrijednost sljedeeg argumenta koji je tipa argtype. argtype se specificira na isti nain kako se definira argument sizeof operatora. Tip mora odgovarati tipu sljedeeg argumenta.
va_end
va_end(va_list argp); va_end oznaava da je zavren pristup promjenjljivoj listi argumenata.
Primjer: u sljedeem programu definirana je funkcija miniprintf(), kojom je pokazano kako je implementirana printf() funkcija.
for(p = format; *p != '\0'; p++) { if(*p != '%') { putchar(*p); continue; } switch(*++p) { case 'c': i = va_arg(argp, int); putchar(i); Dodatak C - standardna biblioteka C jezika 23 break; case 'd': i = va_arg(argp, int); sprintf(tmpbuf, "%d", i); fputs(tmpbuf, stdout); break; case 'o': i = va_arg(argp, int); sprintf(tmpbuf, "%o", i); fputs(tmpbuf, stdout); break; case 's': fputs(va_arg(argp, char *), stdout); break; case 'x': i = va_arg(argp, int); sprintf(tmpbuf, "%x", i); fputs(tmpbuf, stdout); break; case '%': putchar('%'); break; } } va_end(argp); } C 11 <stddef.h> U zaglavlju <stddef.h> definirano je nekoliko tipova i makro naredbi.
NULL Makro koji oznaava konstantu za null pokaziva (vrijednost mu je 0 ili (void *)0). size_t Cjelobrojni unsigned tip koji se koristi za oznaavanje veliine memorijskog objekta. ptrdiff_t Cjelobrojni tip koji oznaava vrijednosti koji nastaju kod oduzimanja pokazivaa. wchar_t Tip wide character koji moe imati znatno vei interval vrijednosti od tipa char. Koristi se za multinacionalni skup znakova (Unicode). offsetof() Makro kojm se rauna pomak (eng. offset) u bajtima nekog elementa strukture, primjerice offsetof(struct tm, tm_year).
Koritenje ovih tipova osigurava portabilnost programa.
C 12 <assert.h>
U zaglavlju <assert.h> definar je makro assert, koji omoguuje testiranje pograma.
void assert(int test_izraz)
Ako je test_izraz jednak nuli, tada
assert(test_izraz)
alje na stdderr poruku, poput ove:
Assertion failed: test_izraz, file filename, line nnn
Dodatak C - standardna biblioteka C jezika 24 i vri poziv funkcije abort(), ime se prekida izvrenje programa. Ime izvorne datoteke (filename) i broj linije u kojoj je assert, su dobijeni is pretprocesorskih makro naredbi: __FILE__ i __LINE__.
Ako se pri kompiliranju definira makro NDEBUG (s bilo kojom vrijednou) tada se ignorira makro assert. C 13 <errno.h> U zaglavlju <errno.h> deklarirana je globalna varijable errno u kojoj se biljei kd greke koja nastaje pri koritenju funkcija standardne biblioteke. Takoer su definirane simbolike konstante EDOM and ERANGE koje oznaavaju kd pogreke kod matematikih operacija. C 14 <limits.h> U zaglavlju <limits.h> definirane su simbolike konstante koje oznaavaju interval standardnih tipova. To su:
CHAR_BIT broj bitova u tipu char CHAR_MAX maksimalna vrijednost od char CHAR_MIN maksimalna vrijednost od of char INT_MAX maksimalna vrijednost od of int INT_MIN minimalna vrijednost od int LONG_MAX maksimalna vrijednost od long LONG_MIN minimalna vrijednost od long SCHAR_MAX maksimalna vrijednost od signed char SCHAR_MIN minimalna vrijednost od signed char SHRT_MAX maksimalna vrijednost od short SHRT_MIN minimalna vrijednost od short UCHAR_MAX maksimalna vrijednost od od unsigned char UINT_MAX maksimalna vrijednost od unsigned int ULONG_MAX maksimalna vrijednost od unsigned long USHRT_MAX maksimalna vrijednost od unsigned short MB_LEN_MAX broj bajta u multibajt znakovnoj sekvenci
C 15 <float.h> U zaglavlju <float.h> definirane su simbolike konstante koje oznaavaju implementaciju realnih brojeva s pominom tokom. To su:
Dodatak C - standardna biblioteka C jezika 25 FLT_RADIX je baza floating-point modela (pr. 2, 16). FLT_ROUNDS je konstanta koja pokazuje kako se zaokruuje rezultat pri zbrajanju: 0 ako je prema 0, 1 ake je prema najblioj vrijednosti, 2 ako je prema +, 3 ako je , i -1 znai da nije definirano.
Ostali makroi daju svojstva tipova: float (FLT_), double (DBL_), i long double (LDBL_). MANT_DIG je broj znamenki (baze FLT_RADIX) u mantisi. DIG daje priblinu preciznost u ekvivalentnoj bazi 10. MIN_EXP i MAX_EXP daju maksimalni i minimalni eksponent (MIN_10_EXP i MAX_10_EXP daju njihov ekvivalent u bazi 10). MIN i MAX daju minimalnu i maksimalnu vrijednost realnog broja. EPSILON je razlika izmeu 1.0 i sljedeeg veeg broja. C 16 <iso646.h> U zaglavlju <iso646.h> definirani su makroi za zamjenu operatora koji moda nisu implementirani na nekom mikro raunalima. To se sljedee definicije:
U zaglavlju <wchar.h> definirane su gotovo sve funkcije za rad s znakovima i stringovima koji su tipa wchar_t. Obino se ASCII znakove naziva prostim znakovima, a znakove tipa wchar_t proirenim znakovima (eng. wide charracter). Evo kako se inicijalizira proireni znakovni tip i string:
wchar_t c = L'A'; wchar_t *s = L"Hello"; Pored wchar_t tipa definiran wint_t, integralni tip koji moe sadravati vrijednost wchar_t tipa, te makro WEOF kao oznaka za kraj datoteke. Operacije sa stringovima proirenih znakova
size_t wcslen(const wchar_t *s); wchar_t *wcscpy(wchar_t *dest, const wchar_t *src); wchar_t *wcscat(wchar_t *dest, const wchar_t *src); wchar_t *wcsncpy(wchar_t *dest, const wchar_t *src, size_t n); wchar_t *wcsncat(wchar_t *dest, const wchar_t *src, size_t n); int wcscmp(const wchar_t *s1, const wchar_t *s2); int wcsncmp(const wchar_t *s1, const wchar_t *s2, size_t n); int wcscoll(const wchar_t *s1, const wchar_t *s2); size_t wcsxfrm(wchar_t *dest, const wchar_t *src, size_t n); wchar_t *wcschr(const wchar_t *s, wchar_t c); wchar_t *wcsrchr(const wchar_t *s, wchar_t c); wchar_t *wcsstr(const wchar_t *s, const wchar_t *pat); size_t wcsspn(const wchar_t *s, const wchar_t *set); size_t wcscspn(const wchar_t *s, const wchar_t *set); wchar_t *wcspbrk(const wchar_t *s, const wchar_t *set); Dodatak C - standardna biblioteka C jezika 26 Ove funkcije (wcsxxx) su ekvivalentne funkcijama za rad s ASCII stringovima (strxxx), osim to se umjesto pokazivaa na char koristi pokaziva na wchar_t, a broj n se intepretira kao broj wchar_t znakova. Operacije s nizovima proirenih znakova
wchar_t *wmemcpy(wchar_t *dest, const wchar_t *src, size_t n); wchar_t *wmemmove(wchar_t *dest, const wchar_t *src, size_t n); int wmemcmp(const wchar_t *p1, const wchar_t *p2, size_t n); wchar_t *wmemchr(const wchar_t *p, wchar_t c, size_t n); wchar_t *wmemset(wchar_t *p, wchar_t c, size_t n); Ove funkcije (wmemxxx) su ekvivalentne funkcijama za rad s ASCII nizovima (memxxx), osim to se umjesto pokazivaa na char koristi pokaziva na wchar_t, a broj n se intepretira kao broj wchar_t znakova. Pretvorba stringa proirenih znakova u numeriku vrijednost
long int wcstol(const wchar_t *s, wchar_t **endp, int base) unsigned long int wcstoul(const wchar_t *s, wchar_t **endp, int base); double wcstod(const wchar_t *s, wchar_t **endp); Ove funkcije (wcsxxx) su ekvivalentne funkcijama za rad s ASCII stringovima (strxxx), osim to se umjesto pokazivaa na char koristi pokaziva na wchar_t, Pretvorba vremena
wchar_t *wcstok(wchar_t *s, const wchar_t *sep, wchar_t **state); Funkcija wcstok() vri rastav stringa (s) ne lekseme koji su odvojeni znacima sepatatora (sep) analogno funkciji strtok(), osim to je temeljni tip wchar_t, i dodan je trei argument state, koji je pokaziva na objekt tipa wchar_t *; wcstok() koristi ovaj objekt za pohranu stanja izmeu uzastopnih poziva funkcije. Ulazno izlazne operacije s proirenim znakovima
getwchar, getwc, fgetwc
wint_t getwchar(void); wint_t getwc(FILE *fp); wint_t fgetwc(FILE *fp); Ove funkcije itaju znakove iz toka fp ili stdin (implicitno se vri pretvotba multibajt-znakovnih sekvenci, kao da je pozvana funkcija mbrtowc).Ako je kraj datoteke funkcije vraaju WEOF. Funkcionalnost im je ista kao kod funkcija getchar, getc, i fgetc.
putwchar, putwc, fputwc
wint_t putwchar(wchar_t c); wint_t putwc(wchar_t c, FILE *fp); Dodatak C - standardna biblioteka C jezika 27 wint_t fputwc(wchar_t c, FILE *fp); Ove funkcije upisuju wchar_t znakove u toka fp ili stdin (implicitno se vri pretvotba multibajt- znakovnih sekvenci, kao da je pozvana funkcija mbrtowc). Funkcionalnost im je ista kao kod funkcija putchar, putc, i fputc.
wprintf, fwprintf
int wprintf(const wchar_t *, ...); int fwprintf(FILE *fp, const wchar_t *, ...); Ove funkcije su ekvivalentne funkcijama printf() i fprintf(), osim to se u tok zapisuje multibajt znakovna sekvenca, kao da je pozvan fputwc(). U format stringu specifikatori %c i %s dalje znaa da se oekuje prosti znakovi, a da bi se ispisali proireni znakovi treba koristiti specifikatore %lc i %ls.
wscanf, fwscanf
int wscanf(const wchar_t *, ...); int fwscanf(FILE *fp, const wchar_t *, ...); Ove funkcije su ekvivalentne funkcijama scanf() i fscanf(), osim to se format string tretira kao niz proirenih znakova, a tok koji se oitava tretira se kao multibajt znakovni niz. U format stringu specifikatori %c, %s i %[ znae da se oekuje prosti znakovi, a da bi se unijeli proireni znakovi treba koristiti specifikatore %lc , %ls i %l[.
fgetws, fputws
wchar_t *fgetws(wchar_t *, int, FILE *fp); int fputws(const wchar_t *, FILE *fp); Ove funkcije su slue itanju ili zapisu linije teksta analogno funkcijama fgets() i fputs().
ungetwc
wint_t ungetwc(wint_t c, FILE *fp); Funkcija ungetwc() vraa proireni znak c natrag u ulazni tok fp, analogno ungetc()funkciji.
swprintf, swscanf
int swprintf(wchar_t *buf, size_t bufsize, const wchar_t *format, ...; int swscanf(const wchar_t *buf, const wchar_t *format, ...); Funkcija swprintf() generira string buf, makimalne veliine bufsize, a funkcija swscanf() dobavlja podatke iz stringa buf, prema zadanom formatu, analogno funkcijama sprintf() i sscanf().
vwprintf, vfwprintf, vswprintf
int vwprintf(const wchar_t *format, va_list argp); int vfwprintf(FILE *fp, const wchar_t *format, va_list argp); int vswprintf(wchar_t *buf, size_t bufsize, const wchar_t *format, va_list argp); Ove funkcije su analogne funkcijama vprintf, vfprintf, and vsprintf. Argument vswprint() bufsize omoguuje kontrolu makimalne duljine stringa kao kod swprintf().
fwide
int fwide(FILE *fp, int mode); Dodatak C - standardna biblioteka C jezika 28 Svaki tok ima "orijentaciju" koja pokazuje da li se on koristi s normalnim ili multibajt znakovima (pomou funkcija iz ove sekcije) Poetno je tok neorjentiran, ali se nakon prve upotrebe prebacuje u "bajt-orijentirani" or "proireno-orijentirani" mod. Funkcijom fwide() moe se postaviti orijentacija toka fp, tako da se argument mode postavi na vrijednost veu od nule za "proireno-orijentirani" mod, ili na vrijednost manju od nule za "bajt- orijentirani" mod. Funkcija vraa vrijednost trenutne orijentacije (0 znai da je tok neorijentiran).
Dodatne pretvorbe
btowc, wctob
wint_t btowc(int c); int wctob(wint_t wc); Funkcija btowc() pretvara normalni znak c u proireni znak. Funkcija wctob() pretvara proireni znak wc u normalni znak. Vraa znak ili EOF ako pretvorba nije mogua.
mbrlen
size_t mbrlen(const char *s, size_t n, mbstate_t *state); Funkcija mbrlen() je slina funkciji mblen(). Njome se moe dobiti i duljinu prekinute multibajt sekvence. Poetni se dio referira u objektu state, a na preostali dio pokazuje pokaziva s. Vraa vrijednost kao funkcija mbrtowc().
Ove su funkcije sline funkcijama mbtowc() i wctomb(), osim to mogu obraditi i dio multibajt sekvence koja je prekinuta, uz uvjet da je stanje pretvorbe zabiljeeno u objektu na kojeg pokazuje state. Funkcija mbrtowc() pretvara multibajt sekvencu src u proiren znak u *dest i vraa broj bajta na koje pokazuje src koji tvore ispravnu multibajt sekvencu, ili 0 ako src==NULL, ili -1 ako nastane greka, ili -2 ako nije pronaena kompletna multbajt sekvenca (upotrebljena za *state). Funkcija wcrtomb() pretvara proireni znak src u multibajt sekvencu dest i vraa broj bajta zapisanih u dest, ili -1 ako nastane greka.
mbsrtowcs, wcsrtombs
size_t mbsrtowcs(wchar_t *dest, const char **srcp, size_t n, mbstate_t *state); size_t wcsrtombs(char *dest, const wchar_t **srcp, size_t n, mbstate_t *state); Ove su funkcije sline funkcijama mbtowcs() i wctombs(), osim to mogu obraditi i dio multibajt sekvence koja je prekinuta, uz uvjet da je stanje pretvorbe zabiljeeno u objektu na kojeg pokazuje state. String koji se pretvara prenosi se po referenci *srcp, kako bi se mogao aurirati da pokazuje na preostali dio nepretvorenog stringa. Ako je broj n nedovoljan (kao broj proirenih znakova za mbsrtowcs ili bajta za wcsrtombs) za kapacitet odredinog stringa rezultata, *srcp se postavlja da pokazuje na nepretvoreni ulaz, a *state se aurira da odrazi prekinuto stanje pretvorbe.
mbsinit Dodatak C - standardna biblioteka C jezika 29
int mbsinit(const mbstate_t *p);
Funkcija mbsinit() vraa nenultu vrijednost ako je objekt stanja na kojeg pokazuje p u poetnom stanju, ili ako je p==NULL .
C 18 <wctype.h> U zaglavlju <wctype.h> deklarirano je nekoliko funkcija, analognih funkcijama iz <ctype.h> za klasificiranje i pretvorbu znakova tipa wchar_t. Klasifikacija proirenih znakova
int iswupper(wint_t c); int iswlower(wint_t c); int iswalpha(wint_t c); int iswdigit(wint_t c); int iswalnum(wint_t c); int iswxdigit(wint_t c); int iswspace(wint_t c); int iswpunct(wint_t c); int iswprint(wint_t c); int iswgraph(wint_t c); int iswcntrl(wint_t c);
Funkcije (iswxxx) su analogne funkcijana (isxxx), osim to je argument ovih funkcija tipa wint_t.
Dodatne funkcije za klasifikacija proirenih znakova
wctype_t wctype(const char *classname); int iswctype(wint_t c, wctype_t classtok);
Funkcija wctype() prihvaa argument classname u kojem se indicira klasifikacija i vraa token tipa wctype_t (definiran je u <wctype.h>). Funkcija wctype() prihvaa stringove: "upper", "lower", "alpha", "digit", "alnum", "xdigit", "space", "punct", "print", "graph", i "cntrl" (koji odgovaraju predefiniranoj klasifikaciji ), plus korisniki definirani string za klasifikaciju. Funkcija iswctype() prihvaa argumente znak c i token classtok koji je prethodno dobijen funkcijom wctype(), te vrae nenultu vrijednost ako znak ne pripada klasifikaciji
Funkcije za pretvorbu proirenih znakova i stringova
wint_t towupper(wint_t c); wint_t towlower(wint_t c); Ove funkcije su ekvivalentne funkcijana toupper() i tolower(), za normalne znakove.
wctrans_t wctrans(const char *convname); wint_t towctrans(wint_t c, wctrans_t convtok); Funkcija wctrans()prihvaa argument convname u kojem se indicira znakovna pretvorba i vraa token tipa wctrans_t koji se koristi za izvrenje pretvorbe (wctrans_t je definiran u <wctype.h>). Funkcija towctrans() vri pretvorbu proirenog znaka c prema tokenu convtok koji je prethodno dobijen funkcijom wctrans(), i vraa pretvoreni proireni znak. Dodatak C - standardna biblioteka C jezika 30 Funkcija wctrans() prihvaa stringove "toupper" i "tolower" (koji oznaavaju predefinirani nain pretvorbe), plus korisniki definirani string za pretvorbu.