Capitol Ul 12

23
Capitolul 12 – Funcţii standard Biblioteca C standard cuprinde o mare varietate de func\ii, instrumente puternice =i eficiente ]n elaborarea programelor. O parte din aceste func\ii, cea mai uzual[, a fost deja prezentat[ de-a lungul lucr[rii. }n continuare prezent[m prototipurile func\iilor standard C, mai importante, ]nso\ite de un scurt comentariu privind argumentele lor, valorile ]ntoarse =i efectul ac\iunii lor. Se poate face o clasificare a func\iilor C dup[ cum urmeaz[: func\ii pentru opera\ii de intrare/ie=ire func\ii pentru prelucrarea caracterelor func\ii pentru prelucrarea =irurilor de caractere func\ii pentru gestiunea memoriei heap func\ii matematice func\ii pentru gestiunea timpului UNC|II PENTRU OPERA|II DE INTRARE/IE+IRE FUNC|II DESCHIDERE/}NCHIDERE FI+IER FILE * fopen (const char * numefis, const char mod); 248

Transcript of Capitol Ul 12

Page 1: Capitol Ul 12

Capitolul 12 – Funcţii standard

Biblioteca C standard cuprinde o mare varietate de func\ii, instrumente puternice =i eficiente ]n elaborarea programelor. O parte din aceste func\ii, cea mai uzual[, a fost deja prezentat[ de-a lungul lucr[rii. }n continuare prezent[m prototipurile func\iilor standard C, mai importante, ]nso\ite de un scurt comentariu privind argumentele lor, valorile ]ntoarse =i efectul ac\iunii lor.

Se poate face o clasificare a func\iilor C dup[ cum urmeaz[:

func\ii pentru opera\ii de intrare/ie=ire func\ii pentru prelucrarea caracterelor func\ii pentru prelucrarea =irurilor de

caractere func\ii pentru gestiunea memoriei heap func\ii matematice func\ii pentru gestiunea timpului

UNC|II PENTRU OPERA|II DE INTRARE/IE+IRE

FUNC|II DESCHIDERE/}NCHIDERE FI+IER

FILE * fopen (const char * numefis, const char mod);

deschide fi=ierul cu numele numefis =i ]l asocieaz[ unui flux identificat printr-un pointer. Modul de deschidere este specificat de mod (vezi Capitolul 10). Intoarce un pointer c[tre o structur[ FILE dac[ opera\ia a avut succes =i un pointer de valoare NULL, dac[ opera\ia a e=uat.

int fclose(FILE *fp);

]nchide fi=ierul deschis cu fopen(). Pointerul fp este pointerul fi=ier returnat la apelarea func\iei fopen().

FUNC|II CARE CONTROLEAZ{ INDICATORUL DE

POZI|IE }N FI+IER

248

Page 2: Capitol Ul 12

Capitolul 12 – Funcţii standard

int fseek(FILE *fp,long nr_octeti,int origine);

pozi\ioneaz[ indicatorul de pozi\ie ]n fi=ierul fp la valoarea specificat[ de origine la care se adaug[ deplasarea egal[ cu nr_octeti (vezi Capitolul 10).

int fgetpos(FILE *fp,long int *poz);

memoreaz[ valoarea curent[ a indicatorului de pozi\ie ]n obiectul indicat de poz. }n caz de succes se ]ntoarce o valoare diferit[ de 0, iar ]n caz de eroare valoarea 0.

int fsetpos(FILE *fp,const long int *poz);

seteaz[ indicatorul de pozi\ie la valoarea *poz, ob\inut[ anterior cu func\ia fgetpos(). }n caz de succes se ]ntoarce o valoare diferit[ de 0, iar ]n caz de eroare valoarea 0.

long ftell(FILE *fp);

]ntoarce valoarea curent[ a indicatorului de fi=ier sau -1 ]n caz de eroare.

void feof(f);

]ntoarce o valoare diferit[ de 0 dac[ indicatorul de pozi\ie se afl[ la sf`r=itul fi=ierului =i 0 ]n caz contrar.

FUNC|II PENTRU CITIREA +I SCRIEREA

CARACTERELOR

int fgetc(FILE *fp);

]ntoarce valoarea caracterului c`nd opera\ia de citire din fi=ierul fp are succes sau EOF c`nd s-a atins sf`r=itul fi=ierului sau a avut loc o eroare.

int fputc(int c,FILE *fp);

]ntoarce caracterul scris ]n fi=ierul fp, ]n caz de succes sau EOF ]n caz de eroare.

int ungetc(int c,FILE *fp);

249

Page 3: Capitol Ul 12

Capitolul 12 – Funcţii standard

se repune un caracter ]n bufferul asociat fi=ierului fp. Se ]ntoarce c ]n caz de succes sau EOF ]n caz de eroare.

int getc(FILE *fp);

este similar[ cu fgetc() (este macro-instruc\iune).int getchar(void);

este echivalent[ cu fgetc(stdin);int putc(int c, FILE *fp);

este similar[ cu fputc() (este macro-instruc\iune).int putchar(int c);

este echivalent[ cu fputc(int c,stdout);

FUNC|II PENTRU CITIREA +I SCRIEREA +IRURILOR

DE CARACTERE

char *fgets(char *str,int lg, FILE *fp);

cite=te din fi=ier un =ir de lungime cel mult lg-1 caractere =i le transfer[ ]n =irul str. }n caz de succes este ]ntoars[ adresa =irului str, iar ]n caz de eroare sau dac[ se atinge sf`r=it de fi=ier se ]ntoarce valoarea NULL.

int fputs(const char *sir, FILE *fp);

scrie ]n fi=ierul fp =irul precizat la adresa sir. }n caz de succes ]ntoarce ultimul caracter scris, iar ]n caz de insucces ]ntoarce caracterul EOF.

char *gets(char *sir);

cite=te un =ir de caractere de la tastatur[ =i ]l depune ]n sir. Caracterul ’\n’ nu se include ]n =ir =i se adaug[ terminatorul ’\0’. Func\ia ]ntoarce sir ]n caz de succes sau EOF ]n caz de eroare.

int puts(const char *sir);

scrie =irul sir pe ecran ]ntorc`nd ultimul caracter scris sau EOF ]n caz de eroare.

250

Page 4: Capitol Ul 12

Capitolul 12 – Funcţii standard

FUNC|II DE INTRARE/IE+IRE CU FORMAT

int fscanf(FILE *fp, const char *sir_format);

]ntoarce num[rul de valori pentru care citirea, conversia =i memorarea datelor a fost f[cut[ corect. Dac[ apare o eroare ]nainte de a ]ncepe citirea se ]ntoarce EOF.

int scanf(const char *sir_format);

este echivalent[ cu func\ia

int fscanf(stdin, const char *sir_format);

int sscanf(char *sir, const char *sir_format);

cite=te date din =irul de caractere sir conform formatului.

Valorile ]ntoarse de func\iile scanf() =i sscanf() sunt similare celor ]ntoarse de func\ia fscanf().

int fprintf(FILE *fp, const char *sir_format);

]ntoarce num[rul de caractere scrise efectiv sau o valoare negativ[ ]n caz de insucces.

int printf(const char *sir format);

este echivalent[ cu func\iafprintf(stdout, const char *sir_format);

int sprintf(char *sir,const char *sir_format);

scrie date conform formatului ]n =irul sir.Similare cu func\iile fprintf(), printf(), sprintf()

sunt func\iile vfprintf(), vprintf() respectiv vsprintf(), pe care nu le prezent[m ]n aceast[ lucrare. Pentru documentare se poate consulta [2].

251

Page 5: Capitol Ul 12

Capitolul 12 – Funcţii standard

FUNC|II PENTRU CITIREA +I SCRIEREA

BLOCURILOR DE DATE

size_t fread(void *buf, size_t nr_oct, size_t nb, FILE *fp);

cite=te din fi=ierul fp, nb blocuri, fiecare cu lungimea nr_oct =i le transfer[ ]n zona specificat[ de buf. }ntoarce num[rul de blocuri citite efectiv.size_t fwrite(const void *buf,size_t nr_oct,

size_t nb, FILE *fp);

scrie ]n fi=ierul fp, nb blocuri preluate din zona specificat[ de buf, fiecare bloc av`nd lungimea egal[ cu nr_octeti. Se ]ntoarce num[rul de blocuri scrise efectiv.

FUNC|II PENTRU TESTAREA APARTENEN|EI LA

CLASE DE CARACTERE

Prototipurile acestor func\ii apar ]n fi=ierul antet ”ctype.h”. Func\iile se aplic[ unui parametru de tip ]ntreg =i ]ntorc valori diferite de 0 dac[ e satisf[cut[ condi\ia de apartenen\[ =i 0 ]n caz contrar.

int isalnum(int c); testeaz[ dac[ c e alfanumericint isalpha(int c); testeaz[ dac[ c e alfabeticint iscntrl(int c); testeaz[ dac[ c e caracter de control

(FF,NL, CR, HT, VT, BEL, BS);

int isdigit(int c); testeaz[ dac[ c este cifr[ zecimal[int isgraph(int c); testeaz[ dac[ c este caracter grafic f[r[ spa\iuint islower(int c); testeaz[ dac[ c este litera mic[int isprint(int c); testeaz[ dac[ c e caracter tip[ribil

inclusiv spa\iuint ispcmct(int c); testeaz[ dac[ c este caracter

tip[ribil f[r[ spa\iu sau caracter alfanumeric

252

Page 6: Capitol Ul 12

Capitolul 12 – Funcţii standard

int isspace(int c); testeaz[ dac[ c este CR, FF, HT, VT, NL, spa\iu

int isupper(int c); testeaz[ dac[ c este liter[ mareint isxdigit(int c); testeaz[ dac[ c este

cifr[ hexazecimal[ (0-9, A-F sau a-f);

Tot aici amintim func\iile tolower() =i toupper():

int tolower(int c); converte=te o liter[ mic[ la litera mare corespunz[toare

int toupper(int c); converte=te o liter[ mare la litera mic[ corespunz[toare

Pentru ambele func\ii, c r[m`ne nemodificat dac[ nu este liter[!

UNC|II PENTRU PRELUCRAREA +IRURILOR DE

CARACTERE

Se deosebesc trei categorii de func\ii:

func\ii pentru citirea =i scriere =irurilor, prezentate deja (care au prototipurile ]n stdio.h)

func\ii cu prototipul in string.h (copiere, comparare, concatenare, ini\ializare =iruri)

func\ii de conversie a =irurilor (cu prototipul in stdlib.h)

253

Page 7: Capitol Ul 12

Capitolul 12 – Funcţii standard

FUNC|II CU PROTOTIPUL IN STRING.H

Exist[ dou[ categorii de func\ii: func\ii care se refer[ la =iruri care se termin[ prin ’\0’ =i func\ii ]n care =irurile sunt v[zute pur =i simplu ca tablouri de caractere (f[r[ terminatorul ’\0’).

Func\iile care se refer[ la =iruri cu terminator ’\0’ sunt:

char *strcat(char *sir1, const char *sir2);

concateneaz[ sir2 la sir1 =i returneaz[ sir1.char *strchr(const char *sir, int c);

caut[ c ]n =irul de caractere sir ]ntorc`nd ]n caz de succes pozi\ia lui, iar ]n caz contrar valoarea NULL.

int strcmp(const char sir1, const char sir2);

compar[ lexicografic =irurile sir1 =i sir2 =i ]ntoarce o valoare

<0 dac[ sir1<sir2=0 dac[ sir1=sir2>0 dac[ sir1>sir2

char *strcpy(char *sir1, const char *sir2);

copiaz[ =irul sir2 ]n =irul sir1 =i ]ntoarce sir1.size_t strcspn(const char *sir1, const char *sir2);

]ntoarce lungimea prefixului =irului sir1 care nu con\ine nici unul din caracterele =irului sir2.

char *strerror(int er_cod);

]ntoarce un pointer c[tre un =ir ce reprezint[ un mesaj de eroare corespunz[tor codului er_cod.

size_t strlen(const char *sir);

]ntoarce num[rul de caractere din =irul sir, exclusiv terminatorul ’\0’.char *strncat(char *sir1, const char *sir2,

size_t nr);

254

Page 8: Capitol Ul 12

Capitolul 12 – Funcţii standard

concateneaz[ cel mult nr caractere din sir2 la sir1 =i ]ntoarce sir1.int *strncmp(const char *sir1, const char *sir2, size_t

nr);

compar[ cel mult nr caractere din sir1 =i sir2 =i ]ntoarce valori la fel ca func\ia strcmp().char *strncpy(char *sir1, const char *sir2,

size_t nr);

copiaz[ cel mult nr caractere din =irul sir2 ]n =irul sir1 =i ]ntoarce sir1.char *strpbrk(const char *sir1, const char *sir2);

]ntoarce un pointer la prima apari\ie ]n sir1 a oric[rui caracter din sir2 sau NULL dac[ nici un caracter din sir2 nu se afl[ ]n sir1.

char * strrchr(const char *sir, int c);

]ntoarce pointerul la ultima apari\ie a lui c ]n sir sau NULL dac[ c nu apare ]n sir.

size_t strspn(const char *sir1, const char *sir2);

]ntoarce lungimea prefixului =irului sir1 care con\ine numai elemente din sir2.

char *strstr(const char *sir1, const char *sir2);

]ntoarce un pointer la prima apari\ie ]n sir1 a =irului sir2 sau NULL dac[ sir2 nu este sub=ir al =irului sir1.

char *strtok(char *sir1, const char sir2);

caut[ ]n sir1 sub=iruri delimitate de caractere din =irul sir2.

Urm[toarele func\ii se refer[ la tablouri de caractere (f[r[ a avea terminatorul ’\0’ ca la =iruri).void *memchr(const void *tablou, int c, size_t nr);

caut[ ]n tabloul indicat prin tablou, prima apari\ie a lui c printre cele nr caractere. }ntoarce adresa lui ]n caz de succes sau NULL ]n caz contrar.

255

Page 9: Capitol Ul 12

Capitolul 12 – Funcţii standard

void memcmp(const void *tablou1, const void *tablou2, size_t nr);

compar[ ]n sens lexicografic primele nr caractere ale tablourilor tablou1 =i tablou2. }ntoarce un ]ntreg calculat ca la func\ia strcmp().void *memcpy(void *tablou1, const void *tablou2, size_t

nr);

copiaz[ nr caractere din tablou2 ]n tabloul indicat de tablou1. Dac[ tablourile se suprapun efectul este nedefinit.void *memmove(void *tablou1, const void *tablou2,

size_t nr);

copiaz[ nr caractere din tablou2 ]n tablou1. Tablourile se pot suprapune.

void *memset(void *tablou, int c, size_t nr);

copiaz[ c (octetul s[u inferior) ]n primele nr caractere ale tabloului tablou.

FUNC|II DE CONVERSIE A +IRURILOR

Urm[toarele func\ii realizeaz[ conversii ale =irurilor de caractere ]n valori numerice.

double atof(const char *str);

]ntoarce rezultatul conversiei =irului de caractere indicat de pointerul str la un num[r real. +irul trebuie s[ con\in[ o valoare numeric[ scris[ corect, ]n caz contrar se ]ntoarce o valoare nedefinit[. Delimitatorul final poate fi orice caracter diferit de punct =i de literele e sau E (care intervin ]n mod natural ]n reprezentarea unui num[r ]n virgul[ mobil[).

int atoi(const char *str);

256

Page 10: Capitol Ul 12

Capitolul 12 – Funcţii standard

]ntoarce rezultatul conversiei =irului de caractere indicat de pointerul str la un num[r ]ntreg. +irul trebuie s[ con\in[ o valoare ]ntreag[ corect scris[, ]n caz contrar se ]ntorce o valoare nedefinit[. Delimitatorul final poate fi orice caracter diferit de cifr[.

int atol(const char *str);

]ntoarce rezultatul conversiei =irului de caractere indicat de pointerul str la o valoare long int. +irul trebuie s[ con\in[ o valoare ]ntreag[ valid[, ]n caz contrar se ]ntoarce o valoare nedefinit[. Delimitatorul final poate fi orice caracter diferit de cifr[.

double strtod(char *str, char **sf);

]ntoarce rezultatul conversiei =irului de caractere indicat de pointerul str la un num[r ]n format double, ignor`nd spa\iile libere ini\iale. +irul trebuie s[ con\in[ o valoare numeric[ corect scris[, ]n caz contrar se ]ntoarce valoarea zero. Delimitatorul final poate fi orice caracter diferit de punct =i de literele e sau E. }n *sf se depune pointerul la delimitatorul final din sir.long strtol(const char *str, char **sf, int radix);

]ntoarce rezultatul conversiei =irului de caractere indicat de pointerul str ignor`nd spa\iile libere ini\iale ]ntr-un num[r de tip long, reprezentat ]n baza de numera\ie stabilit[ de radix. Dac[ radix este zero se consider[ c[ baza este 8, 10 sau 16 ]n caz contrar baza este dat[ de valoarea radix aflat[ obligatoriu ]ntre 2 =i 36. Delimitatorul poate fi orice caracter care nu poate intra ]n componen\a unui num[r ]ntreg. Dac[ nu se poate realiza conversia se ]ntoarce valoarea zero. }n *sf se depune pointerul la delimitatorul final din =ir.unsigned long strtoul(const *start, char **sf,

int radix);

ac\ioneaz[ similar cu func\ia strtol() cu excep\ia faptului c[ ]ntoarce ]n caz de succes o valoare unsigned long.

257

Page 11: Capitol Ul 12

Capitolul 12 – Funcţii standard

UNC|II PENTRU GESTIUNEA MEMORIEI HEAP

void *calloc(size_t nr, size_t nr_oct);

aloc[ o zon[ compact[ din memoria heap pentru un tablou av`nd nr elemente fiecare de lungime nr_oct octe\i. }ntoarce un pointer c[tre primul octet al tabloului sau NULL dac[ nu exist[ suficient[ memorie pentru alocare.

void *free(void *ptr);

dealoc[ zona de memorie indicat[ de ptr, alocat[ anterior cu func\iile calloc(), malloc() sau realloc().

void *malloc(size_t nr_oct);

aloc[ o zon[ compact[ din memoria heap de dimensiune nr_oct octe\i. }ntoarce un pointer la primul octet din zona de memorie alocate sau NULL dac[ nu exist[ spa\iu disponibil.

void *realloc(void *ptr, size_t nr_oct);

realoc[ zona de memorie indicat[ de ptr (alocat[ anteriror cu ajutorul func\iilor calloc() =i malloc()) la valoarea dat[ de nr_oct octe\i. }ntoarce un pointer la zona realocat[ sau NULL dac[ nu exist[ suficient spa\iu de memorie pentru alocarea celor nr_oct octe\i, situa\ie ]n care zona ini\ial[ de memorie r[m`ne nemodificat[.

258

Page 12: Capitol Ul 12

Capitolul 12 – Funcţii standard

UNC|II MATEMATICE

Standardul ANSI C define=te 22 func\ii matematice frecvent utilizate ]n programe. Prototipurile lor sunt con\inute de fi=ierul antet ”math.h”. Argumentele func\iilor sunt, cu mici excep\ii, de tip double iar valorile ]ntoarse sunt de tip double. Principalele erori care pot apare la apelul func\iilor sunt: eroare de domeniu =i eroare de reprezentare.

Eroarea de domeniu apare atunci c`nd argumentele func\iei sunt ]n afara domeniului s[u de defini\ie (de exemplu valori negative folosite drept argumente pentru func\ia logaritm), iar eroarea de reprezentare apare atunci c`nd rezultatul ]ntors de func\ie nu poate fi reprezentat.

Aceste erori provoac[ setarea variabilei globale incorporate errno la valorile EDOM respectiv ERANGE. Cele dou[ macrocomenzi sunt definite ]n fi=ierul antet ”errno.h”. }n situa\iile de eroare descrise se ]ntoarce o valoare definit[ la implementare, ]n cazul erorii de domeniu =i respectiv valoarea HUGE_VAL (o valoare <mare> definit[ ]n fi=ierul antet ”math.h”) ]n cazul erorii de reprezentare. Argumentele func\iilor trigonometrice care sunt unghiuri sunt considerate ]n radiani.

double acos(double x); arccos de xdouble asin(double x); arcsinus de xdouble atan(double x); arctangent[ de xdouble atan2(double y,double x); arctangent[ de y/xdouble ceil(double x); cel mai mic ]ntreg >= xdouble cos(double x); cosinus de xdouble cosh(double x); cosinus hiperbolic de xdouble exp(double x); exponen\ial[ e la xdouble fabs(double x); valoarea absolut[ a lui xdouble floor(double x); cel mai mare ]ntreg <= xdouble fmod(double x,int y); restul ]mp[r\irii lui x la y

v[zu\i ca ]ntregi (x modulo y)

259

Page 13: Capitol Ul 12

Capitolul 12 – Funcţii standard

double frexp(double x,double exp);intoarce valoarea mantisei num[rului x si memoreaz[ valoarea exponentului ]n exp astfel ]nc`t x=mantisa*2exp (mantisa e cuprins[ ]ntre 0.5 =i 1).

double ldexp(double x,int exp); calculeaz[ x*2exp

double log(double x); calculeaz[ logaritm natural de xdouble log10(double x); calculeaz[ logaritm zecimal de xdouble modf(double x,double *pin); descompune un

num[r x de tip double ]n partea sa frac\ionar[ pe care o ]ntoarce =i partea ]ntreag[ pe care o memoreaz[ ]n pin

double pow(double x,double y); ]ntoarce xy pentru x =i y apar\in`nd domeniul de defini\ie

double sin(double x); sinus de xdouble sinh(double x); sinus hiperbolic de xdouble sqrt(double x); r[d[cina p[trat[ a lui xdouble tan(double x); tangent[ de xdouble tanh(double x); tangent[ hiperbolic[ de x

UNC|II PENTRU GESTIUNEA TIMPULUI

Prototipurile func\iilor care gestioneaz[ timpul se g[sesc ]n fi=ierul header ”time.h”. Acest header con\ine defini\iile a patru tipuri de date:

size_t, clock_t, time_t =i tm.

Tipul size_t reprezint[ un ]ntreg f[r[ semn. Tipurile clock_t =i time_t se folosesc la reprezentarea orei =i a datei sistemului, ca date de tip long integer. Structura standard de tip struct tm are alc[tuirea urm[toare:

struct tm

260

Page 14: Capitol Ul 12

Capitolul 12 – Funcţii standard

{int tm_sec;/* secunde 0...59 */int tm_min;/* minute 0...59 */int tm_hour;/* ore 0...23 */int tm_mday;/* ziua din luna 1...31 */int tm_mon;/* luna 0...11 */int tm_year;/* anul >=1900 */int tm_wday;/* ziua saptamanii 0...6 */int tm_yday;/* ziua din an 0...365 */int tm_isdst;/* indicator al orei de vara este:

>0 daca functioneaza=0 daca nu functioneaza<0 daca nu exista informatii in domeniu */

}

List[m mai jos prototipurile celor mai uzuale func\ii cuprinse ]n fi=ierul ”time.h”

char *asctime(const struct tm *ptr);

converte=te timpul din structura indicat[ de pointerul ptr ]ntr-un =ir de forma

zi luna data ore:minute:secunde an\n\0, unde

pointerul ptr este ob\inut cu ajutorul func\iei localtime() sau cu functia gmtime().

clock_t clock(void);

}ntoarce num[rul de impulsuri de ceas, efectuate o dat[ cu lansarea programului ]n execu\ie. Transformarea ]n secunde se face ]mp[r\ind aceast[ valoare la macroul CLOCKS_PER_SEC care d[ num[rul de b[t[i pe secund[ ale ceasului.

char *ctime(const time_t *ptr);

converte=te timpul de calendar din structura indicat[ de pointerul ptr ]ntr-un =ir de forma

zi luna data ore:minute:secunde an\n\0

Pointerul ptr este ob\inut cu ajutorul func\iei time(). Ea este echivalent[ cu asctime(local(time));

double diff_time(time_t timp2, timp_t timp1);

]ntoarce valoarea timp2-timp1 exprimat[ ]n secunde.

261

Page 15: Capitol Ul 12

Capitolul 12 – Funcţii standard

struct tm *gmtime(const time_t *ptr);

converte=te timpul de calendar indicat de pointerul ptr ]n Timp Coordonat Universal (Universal Coordinated Time) ]ntorc`nd un pointer la o structur[ de tip tm. Dac[ nu este disponibil se ]ntoarce NULL. Pointerul ptr este ob\inut, printr-un apel al func\iei time().

struct tm *localtime(const time_t *ptr);

converte=te tipul de calendar indicat de pointerul ptr ]n timp local ]ntorc`nd un pointer la o structur[ de tip tm. Dac[ nu e disponibil se ]ntoarce NULL. Pointerul ptr e ob\inut printr-un apel al func\iei time().

size_t strftime(char *sir, size_t dimmax,const char *sir_format, const struct tm *ptr);

converte=te datele din structura indicat[ de pointerul ptr ]n =irul sir, conform cu formatul sir_format.

time_t time(time_t *ptr);

]ntoarce ora curent[ calendaristic[ a sistemului sau –1 dac[ nu exist[ aceast[ facilitate.

Se poate apela cu ptr=NULL sau cu o adres[ a unei variabile de tip time_t. }n ultimul caz valoarea ]ntoars[ se atribuie de asemenea variabilei indicate de ptr.

LTE FUNC|II UTILE

int abs(int intr); /* fisier header stdlib.h */

]ntoarce un ]ntreg egal cu valoarea absolut[ a ]ntregului intr.void clearerr(FILE *fp); /* fisier header stdio.h */

=terge indicatorii de eroare =i de sf`r=it de fi=ier.div_t div(int numarator, int numitor);

/* fisier header stdlib.h */

262

Page 16: Capitol Ul 12

Capitolul 12 – Funcţii standard

]ntoarce o structur[ de tip div_t care con\ine c`tul =i restul ]mp[r\irii num[r[tor la numitor ]n membrii quot, respectiv rem ai acestei structuri.

void exit(int cod); /* fisier header graph.h */

produce ie=irea dintr-un program =i revenirea ]n sistemul de operare. Dac[ valoarea parametrului cod este 0 sau EXIT_SUCCES se indic[ terminarea cu succes a programului, iar dac[ este diferit de 0 sau EXIT_FAILURE se indic[ terminarea cu eroare a programului.

int ferror(FILE fp); /* fisier header stdio.h */

]ntoarce fie valoarea 0 indic`nd faptul c[ nu are loc o eroare sau o valoare diferit[ de 0 dac[ indicatorul de eroare asociat lui fp este pozi\ionat.

int fflush(FILE fp); /* fisier header stdio.h */

gole=te bufferul asociat unui fi=ier deschis pentru scriere sau citire/scriere. Efectul este nedefinit dac[ fi=ierul a fost deschis numai pentru citire. }ntoarce EOF ]n caz de eroare sau 0 ]n caz normal.

long labs(long lintr); /* fisier header stlib.h */

]ntoarce un ]ntreg egal cu valoarea absolut[ a ]ntregului lintr.ldiv_t ldiv(long numarator, long numitor);

/* fisier header stdlib.h */

]ntoarce o structur[ de tip ldiv_t care con\ine c`tul =i restul ]mp[r\irii ]ntre num[r[tor =i numitor ]n membrii quot =i rem de tip long ai acestei structuri.int remove(const char *numefis);

/* fisier header stdio.h */

=terge fi=ierul cu nume numefis. }ntoarce 0 ]n caz de succes =i o valoare diferit[ de 0 ]n caz de eroare.int rename(const char *nume_nou, const char *nume_vechi); /* fisier header stdio.h */

263

Page 17: Capitol Ul 12

Capitolul 12 – Funcţii standard

redenume=te un fi=ier. }ntoarce 0 ]n caz de succes =i o valoare diferit[ de 0 ]n caz de eroare.

int rand(void); /* fisier header stdlib.h */

]ntoarce un num[r ]ntreg uniform aleator din intervalul [0,RAND_MAX].int srand(unsigned int seed);

/* fisier header stdlib.h */

ini\ializeaz[ generatorul de numere aleatoare cu valoarea seed.

void qsort(void *buf, size_t nr, size_t lung,int(*cmp)(const void *arg1, const void *arg2));

/* fisier header stdlib.h */

sorteaz[ ]n ordine cresc[toare tabloul buf[0],buf[1],…,buf[nr-1] folosind metoda QuickSort. Parametrul lung reprezint[ m[rimea ]n octe\i a fiec[rui element. Func\ia de comparare este *cmp =i trebuie s[ ]ntoarc[

o valoare<0 dac[ arg1<arg2o valoare=0 dac[ arg1=arg2o valoare>0 dac[ arg1>arg2

void bsearch(const void *cheie, const void *buf,size_t nr, size_t lung, int(*cmp)(const void *arg1, const void *arg2)); /* fisier header stdlib.h */

caut[ ]n tabloul ordonat buf[0],buf[1],…,buf[nr-1] ]ntorc`nd un pointer c[tre primul membru care corespunde cheii indicat[ de cheie, ]n caz de succes, sau NULL ]n caz contrar. Semnifica\ia parametrilor este cea descris[ la func\ia qsort().

264