You are on page 1of 14

BIBLIOTECA ESTNDAR DEL ANSI C

El estndar ANSI C define una serie de funciones que deben estar presentes en todo compilador
de C.
Usando nicamente estas funciones podemos asegurar la portabilidad de los programas.
Estas funciones se pueden agrupar en las siguientes categoras:
!unciones de E"S
!unciones de cadenas # de caracteres
!unciones matemticas
!unciones de asignaci$n dinmica de memoria
%tras funciones
&a forma de acceso a las mismas es usando los fic'eros de cabecera donde estn definidas las
caractersticas # elementos necesarios de las funciones.
(C) *aro +l,are- .uti/rre-
0
FICHEROS DE CABECERA ESTNDAR DEL ANSI C
assert.' *efine la macro assert # el smbolo N*E1U.. Se usa para diagn$sticos del
programa.
ct#pe.' *efine rutinas de clasificaci$n # con,ersi$n para caracteres.
errno.' *efine macros para las condiciones de error2 E*%3 # E4AN.E # la ,ariable
entera errno.
float.' *efine smbolos para los ,alores m5imos # mnimos de los nmeros en coma
flotante.
limits.' *efine smbolos para los ,alores e5tremos de los tipos enteros.
locale.'*eclara las funciones necesarias para adaptar los programas a un pas determinado.
*efine la estructura lcon,.
mat'.' *eclara las funciones matemticas # la constante 6U.E78A&.
set9mp.' *efine el tipo de datos 9mp7buf usado por las rutinas set9mp # long9mp.
signal.'*efine smbolos # rutinas necesarios para la gesti$n de condiciones especiales.
stdarg.' *efine las macros que facilitan la manipulaci$n de listas de argumentos de
longitud ,ariable.
stddef.' *efine los tipos estndar ptr7diff2 si-e7t2 :c'ar7t2 el smbolo NU&&2 # la macro
offsetof.
stdio.' *efine tipos # macros necesarios para el paquete de Entrada"Salida Estndar.
*efine las secuencias predefinidas stdin2 stdout2 stderr # stdprn. *eclara rutinas de
Entrada"Salida.
stdlib.' *eclara las funciones de utilidad como las rutinas de con,ersi$n de cadenas2
generador de nmeros aleatorios2 rutinas de asignaci$n de memoria2 # rutinas de
control de procesos.
string.' *eclara las rutinas de manipulaci$n de strings.
time.' *efine el tipo de datos time7'2 la estructura de datos tm2 # declara las funciones
de tiempo.
3uc'as de estas funciones estn mu# ligadas a la estructura del sistema UNI; (como las de
mane9o de se<ales). Sin embargo2 al ser parte de la biblioteca estndar2 se garanti-a que funcionan
en otros entornos.
Algunos de estos fic'eros simplemente son usados a su ,e- por otros fic'eros de cabecera.
Importantes son ct#pe.'2 errno.'2 mat'.'2 set9mp.'2 signal.'2 stdio.'2 stdlib.'2 string.' # time.'.
(C) *aro +l,are- .uti/rre-
=
FUNCIONES MS INTERESANTES DE LA
BIBLIOTECA ESTNDAR DEL ANSI C
ENTRADA/SALIDA: STDIO.H
Tarea Nombre de la rutina
Crear o abrir un fic'ero fopen2 freopen
Cerrar un fic'ero fclose
1orrar o renombrar un fic'ero remo,e2 rename
&ectura con formato fscanf2 scanf
Escritura con formato fprintf2 printf2 f,printf2 ,printf
&ectura de un carcter fgetc2 fgetc'ar2 fputc2 fputc'ar
&ectura de una lnea fgets2 gets
Establecer posici$n &"E fsee>2 fsetpos2 re:ind
%btener posici$n &"E fgetpos2 ftell
&ectura binaria fread
Escritura binaria f:rite
8olcado de buffer fflus'
Comprobaci$n de error"E%! clearerr2 feof2 ferror
.esti$n de fic'eros temp. tmpfile2 tmpnam
Control de buffers setbuf2 set,buf
*e,ol,er un carcter al buffer ungetc
int rename(const c'ar ?oldname2 const c'ar ?ne:name)@
4enombra el fic'ero a cu#o nombre apunta oldname2 por el de ne:name.
int ,fprintf(!I&E ?stream2 const c'ar ?format2 ,a7list arglist)@
int ,printf (const c'ar ?format2 ,a7list arglist)@
!uncionan como printf2 s$lo que en lugar de escribir los argumentos directamente como
parmetros se pasa una lista de argumentos (similar a arg,)
c'ar ?fgets(c'ar ?s2 int n2 !I&E ?stream)@
&ee una cadena del fic'ero2 'asta encontrar fin de lnea o leer n0 caracteres.
int fgetpos(!I&E ?stream2 fpos7t ?pos)@
%btiene la posici$n del puntero de lectura # escritura del fic'ero2 en un formato que puede usar
luego fsetpos.
int fsetpos(!I&E ?stream2 const fpos7t ?pos)@
Establece la posici$n de lectura # escritura del fic'ero2 usando el formato dado por fgetpos
long ftell(!I&E ?stream)@
*e,uel,e la posici$n del puntero de lectura # escritura del fic'ero2 e5presada como un
despla-amiento en b#tes desde su comien-o. Auede usarse este ,alor para 'acer luego una
llamada a fsee>.
int ferror(!I&E ?stream)@
Indica si est acti,o el indicador de error del fic'ero2 de,ol,iendo un nmero positi,o.
,oid clearerr(!I&E ?stream)@
4esetea los indicadores de error # de fin de fic'ero del fic'ero.
(C) *aro +l,are- .uti/rre-
B
CONVERSIN DE DATOS: STDLIB.H
Tarea Nombre de la rutina
Con,ertir cadena a un flotante atof2 strod
Con,ertir cadena a entero atoi
Con,ertir cadena a entero largo atol2 strtol
Con,ertir cadena a unsigned long stroul
int atoi(const c'ar ?s)@
long atol(const c'ar ?s)@
double atof(const c'ar ?s)@
Con,ierten la cadena s en un entero2 entero largo # doble precisi$n2 respecti,amente. Indican
error de,ol,iendo cero.
(C) *aro +l,are- .uti/rre-
C
FUNCIONES MATEMTICAS: MATH.H
Tarea Nombre de la rutina
!unciones trigonom/tricas acos2 asin2 atan2 atan=2 cos2 sin2 tan
Aotencias # logaritmos e5p2 fre5p2 lde5p2 log2 log0D2 po:
4a- cuadrada sqrt
8alor absoluto abs2 fabs
4edondear nmeros flotantes ceil2 floor
!unciones 'iperb$licas cos'2 sin'2 tan'
*escomponer flotante en modf
entero # fracci$n
4esto de di,isi$n flotante fmod
Aritmetica de enteros abs2 di,2 labs2 ldi,
.enerar nmeros aleatorios rand2 srand
double cos(double 5)@
double sin(double 5)@
double tan(double 5)@
double e5p(double 5)@
*e,uel,e eE5
double fre5p(double 52 int ?e5ponent)@
*e,uel,e la mantisa # en e5ponent el e5ponente de 5
double po:(double 52 double #)@
*e,uel,e 5E#
double sqrt(double 5)@
4a- cuadrada de 5
double ceil(double 5)@
double floor(double 5)@
4edondea un flotante 'acia arriba o aba9o
...
,oid srand(unsigned seed)@
Iniciali-a el generador de nmeros aleatorios
int rand(,oid)@
*e,uel,e un nmero aleatorio entre D # 4AN*73A;
(C) *aro +l,are- .uti/rre-
F
CONVERSIN Y CLASIFICACIN DE CARACTERES: CTYPE.H
Tarea Nombre de la rutina
Clasificar un carcter isalnum2 isalp'a2 iscntrl2 isdigit2 isgrap'2 islo:er2
isprint2 ispunct2 isspace2 isupper2 is5digit
Con,ertir de ma#scula a minscula tolo:er
Con,ertir de minscula a ma#scula toupper
int isalnum(int c)@ int islo:er(int c)@
int isalp'a(int c)@ int isprint(int c)@
int isascii(int c)@ int ispunct(int c)@
int iscntrl(int c)@ int isspace(int c)@
int isdigit(int c)@ int isupper(int c)@
int isgrap'(int c)@ int is5digit(int c)@
*e,uel,en cierto si el carcter c es alfanum/rico2 alfab/tico2 de control2 dgito2 se puede imprimir
(sin el espacio)2 est en minscula2 se puede imprimir (inclu#e el espacio)2 es de puntuaci$n
(imprimibles menos alfab/ticos # espacio)2 es un separador (espacio2 tabulador2 etc.)2 est en
ma#scula o es un dgito 'e5adecimal
int tolo:er(int c)@
int toupper(int c)@
*e,uel,en el carcter con,ertido a ma#scula o minscula
(C) *aro +l,are- .uti/rre-
G
ASIGNACIN DE MEMORIA: MALLOC.H STDLIB.H
Nombre Descripcin
calloc Asigna memoria para un arra# de elementos # los iniciali-a a cero
free &ibera memoria asignada pre,iamente
malloc Asigna un nmero de b#tes # de,uel,e un puntero al primer b#te de la memoria
asignada
realloc Amplia o disminu#e un bloque de memoria asignado pre,iamente. 3ue,e el
bloque en la memoria fsica2 si es necesario.
,oid ?calloc(si-e7t nitems2 si-e7t si-e)@
Asigna memoria para un arra# de nitems elementos2 cada uno de ellos de tama<o si-e. Iniciali-a la
memoria a D. *e,uel,e un puntero al primer b#te de la -ona de memoria.
,oid ?malloc(si-e7t si-e)@
Asigna si-e b#tes de memoria # de,uel,e un puntero al primer
,oid free(,oid ?bloc>)@
&ibera un bloque de memoria asignado pre,iamente2 a tra,/s del puntero al inicio.
,oid ?realloc(,oid ?bloc>2 si-e7t si-e)@
Aumenta el bloque de memoria en si-e b#tes.
Hodas estas funciones (e5cepto free) de,uel,en un puntero a la -ona de memoria.
Si se produce algn error2 se de,uel,e null.
El puntero que se de,uel,e es de tipo ,oid (sin tipo)2 por tanto2 ser necesario con,ertirlo al tipo
del puntero que usemos para acceder a esos datos:
int ?p@
p I (int ?)calloc(0DD2 si-eof(int))@
"? 8amos a ,er la memoria asignada como formada por enteros ?"
Estas funciones se usan muc'o con punteros a carcter (cadenas)2 para almacenar e5actamente el
nmero de caracteres de la cadena2 sin ponerles un lmite m5imo # a'orrar luego memoria:
c'ar ?s@
"? Si quiero almacenar una cadena de 0DD caracteres ?"
s I (c'ar ?)malloc(0DD)@
"? Si quiero aumentar la cadena en FD caracteres ms ?"
s I (c'ar ?)realloc(s2 FD)@
"? Cuando #a no la necesite ?"
free(s)@
(C) *aro +l,are- .uti/rre-
J
MANIPULACIN DE CADENAS Y DE BUFFERS: STRING.H
Tarea Nombre de la rutina
&ongitud de una cadena mblen2 strlen
Comparaci$n de dos cadenas memcmp2 strcmp2 strncmp2 strcoll2 str5frm
Copia # concatenaci$n memcp#2 memmo,e2 strcat2 strcp#2 strncat2 strncp#
1squeda de carcter o subcadena memc'r2 strc'r2 strcspn2 strpbr>2 strrc'r2 strspn2 strstr
E5traer to>ens de un string strto>
4ellenar buffer con carcter memset
%btener la cadena de un error strerror
si-e7t strlen(const c'ar ?s)@
*e,uel,e la longitud de una cadena
int strcmp(const c'ar ?s02 const c'ar?s=)@
Compara las cadenas s0 # s=2 de,ol,iendo D si s0IIs=2 negati,o si s0Ks= o positi,o si s0Ls=
int strncmp (const c'ar ?s02 const c'ar ?s=2 si-e7t ma5len)@
Como strcmp2 mirando como m5imo ma5len caracteres.
c'ar ?strcat(c'ar ?dest2 const c'ar ?src)@
A<ade la cadena src al final de la cadena dest.
c'ar ?strcp#(c'ar ?dest2 const c'ar ?src)@
Copia la cadena src sobre la cadena dest.
Esta funci$n es mu# usada para almacenar cadenas no conocidas en tiempo de compilaci$n en
arra#s de caracteres:
c'ar cadMNDO
strcp#(cad2 cad7aleatoria())@
"? cad I cad7aleatoria()@ no es ,lido pues un arra# es un puntero constante2 no se puede
modificar ?"
c'ar ?strncat(c'ar ?dest2 const c'ar ?src2 si-e7t ma5len)@
c'ar ?strncp#(c'ar ?dest2 const c'ar ?src2 si-e7t ma5len)@
Como strcat # strcp# s$lo que como m5imo usan ma5len caracteres.
Hodas estas funciones de,uel,en el puntero a la cadena dest.
No comprueban que est/ reser,ado el espacio necesario # sobreescriben memoria si no lo est.
c'ar ?strc'r(const c'ar ?s2 int c)@
1usca en la cadena la primera ocurrencia del caracter c
c'ar ?strrc'r(const c'ar ?s2 int c)@
1usca la ltima ocurrencia
(C) *aro +l,are- .uti/rre-
N
c'ar ?strstr(const c'ar ?s02 const c'ar ?s=)@
1usca en la cadena s0 la primera ocurrencia de la subcadena s=
c'ar ?strpbr>(const c'ar ?s02 const c'ar ?s=)@
1usca en la cadena s0 la primera ocurrencia de cualquier carcter que est/ en la cadena s=
Hodas estas funciones de,uel,en el ,alor null si no tienen /5ito. En otro caso2 de,uel,en un
puntero a la ocurrencia encontrada.
c'ar ?strto>(c'ar ?s02 const c'ar ?s=)@
s0 es una cadena compuesta por to>ens de te5to. &os separadores de los to>ens son los
caracteres de la cadena s=.
&a primera llamada a s= de,uel,e el primer to>en encontrado. Es decir de,uel,e un puntero al
primer carcter del to>en en s0 # escribe un nulo a continuaci$n del to>en (en s0). Auede tratarse
entonces la cadena como el to>en directamente.
&as siguientes llamadas a strto>2 usando NU&& como primer parmetro de,uel,en los siguientes
to>ens.
&a cadena de separadores s= puede ser distinta entre llamada # llamada.
Cuando #a no 'a# ms to>ens de,uel,e NU&&.
E9emplo:
c'ar entradaMO I Pto>en02to>en=P@
c'ar ?p@
p I strto>(entrada2 P2P)@ "? Ho>en 02 separado por 2 ?"
if (p) printf(PQsRnP2 p)@ "? Si no es NU&&2 ,erlo ?"
p I strto>(NU&&2 P2P)@ "? Siguientes2 NU&& de primero ?"
if (p) printf(PQsRnP2 p)@
c'ar ?strerror(int errnum)@
*e,uel,e una cadena que describe el mensa9e de error del sistema de nmero errnum
(C) *aro +l,are- .uti/rre-
S
CONTROL DE PROCESOS: STDLIB.H
Tarea Nombre de la rutina
E9ecutar un comando del s'ell s#stem
Herminar un proceso abort2 e5it
.esti$n de errores assert2 perror
%btener entorno del proceso geten,
Instalar gestor de se<ales # generarlas raise2 signal
Salto no local de una funci$n a otra long9mp2 set9mp
Instalar rutinas de terminaci$n ate5it
int s#stem(const c'ar ?command)@
&lama al s'ell para que e9ecute el comando contenido en la cadena.
Si no tiene /5ito de,uel,e 02 si lo tiene de,uel,e D.
,oid abort(,oid)@
Aborta el proceso2 imprimiendo un mensa9e de error # de,ol,iendo al sistema un c$digo de error
de B.
,oid e5it(int status)@
Hermina el proceso2 de,ol,iendo al sistema el c$digo de error status.
,oid assert(int test)@ "? assert.' ?"
Comprueba la condici$n test. Si es falsa2 aborta el programa e imprime en el error estndar un
mensa9e de error2 indicando la condici$n2 el fic'ero # la lnea donde se produ9o.
,oid perror(const c'ar ?s)@ "? stdio.' ?"
Imprime el mensa9e de error asociado al ltimo error producido en una funci$n del sistema
(indicado por el ,alor de la ,ariable errno).
El arra# c'ar ?s#s7errlistMO contiene los mensa9es de error2 e int s#s7nerr indica el nmero de
mensa9es e5istentes.
int ate5it(ate5it7t func)@
4egistra la funci$n func como funci$n de salida.
Cuando termina el programa se llama a la funci$n (?func)().
Cada llamada a ate5it registra una nue,a funci$n de salida.
Se pueden registrar 'asta B= funciones2 que se ,an llamando en orden in,erso.
c'ar ?geten,(const c'ar ?name)@
*e,uel,e el ,alor asociado a la ,ariable de entorno especificada en name. (HE43I,t0DD2 etc.)
Si la ,ariable no est de,uel,e NU&&.
int raise(int sig)@ "? signal.' ?"
En,a la se<al sig al proceso en e9ecuci$n.
(C) *aro +l,are- .uti/rre-
0D
Si se 'a instalado un mane9ador para esa se<al2 se e9ecuta el mane9ador2 si no2 se e9ecuta la acci$n
por defecto para la se<al.
,oid (?signal(int sig2 ,oid (?func) (int sig)))(int)@
Instala una funci$n para mane9ar la se<al sig. &a funci$n mane9adora debe aceptar un parmetro
de tipo entero.
signal de,uel,e un puntero a la anterior funci$n mane9adora de la se<al. Si no puede de,uel,e
NU&&.
Estn definidas un nmero dado de se<ales # dos mane9adores estndar (ignorar # por defecto).
int set9mp(9mp7buf 9mpb)@
3arca la situaci$n actual del proceso en 9mpb2 para que pueda ser usado en un long9mp posterior
# de,uel,e D.
,oid long9mp(9mp7buf 9mpb2 int ret,al)@
4estaura el estado en que estaba el proceso cuando se llam$ a set9mp2 'aciendo que para el
proceso pare-ca que la llamada a set9mp retorna con un ,alor de ret,al.
(C) *aro +l,are- .uti/rre-
00
FUNCIONES DE TIEMPO: TIME.H
Tarea Nombre de la rutina
%btener fec'a # 'ora actuales time
Con,ertir entre formatos diferentes asctime2 ctime2 gmtime2 localtime2 m>time
Calcular tiempo transcurrido cloc>2 difftime
Se define la estructura tm2 para contener la fec'a # 'ora con los componentes separados:
struct tm T
int tm7sec@ "? Segundos ?"
int tm7min@ "? 3inutos ?"
int tm7'our@ "? 6ora (D=B) ?"
int tm7mda#@ "? *a del mes (0B0) ?"
int tm7mon@ "? 3es (D00) ?"
int tm7#ear@ "? A<o (AA) ?"
int tm7:da#@ "? *a de la semana (DG@ *omingo I D) ?"
int tm7#da#@ "? *a del a<o (DBGF) ?"
int tm7isdst@ "? D si no 'a# a'orro de lu- diurna ?"
U@
Hambi/n define el tipo time7t para almacenar la fec'a # 'ora como un total de segundos.
time7t time(time7t ?timer)@
*e,uel,e el nmero de segundos transcurridos desde el 0 de Enero de 0SJD2 # almacena ese
,alor en ?timer2 si el puntero no es NU&&.
c'ar ?asctime(const struct tm ?tbloc>)@
Con,ierte la fec'a # 'ora almacenados en la estructura tbloc> a una cadena de caracteres
c'ar ?ctime(const time7t ?time)@
Como asctime2 solo que la fec'a # 'ora estn almacenadas con formato time7t
struct tm ?gmtime(const time7t ?timer)@
struct tm ?localtime(const time7t ?timer)@
Con,ierten la fec'a # 'ora del formato time7t a formato tm.
gmtime de,uel,e la 'ora .3H.
localtime la 'ora local. Aara ello e5iste la ,ariable long time-one que debe contener la diferencia
en segundos de la 'ora .3H a la 'ora local.
time7t m>time(struct tm ?t)@
Con,ierte del formato tm al formato time7t
cloc>7t cloc>(,oid)@
*e,uel,e el nmero de tic>s de relo9 transcurridos desde el inicio del proceso.
&a constante C&V7HCV define el nmero de tic>s por segundo.
double difftime(time7t time=2 time7t time0)@
*e,uel,e el tiempo transcurrido en segundos entre los instantes time0 # time= (de tipo time7t)
(C) *aro +l,are- .uti/rre-
0=
BSQUEDA Y ORDENACIN: STDLIB.H
Nombre Descripcin
1searc' 1squeda binaria de un elemento en un arra# ordenado
qsort %rdenaci$n de un arra# mediante el algoritmo quic>sort
,oid ?bsearc'(const ,oid ?>e#2 const ,oid ?base2 si-e7t nelem2
si-e7t :idt'2 int (?fcmp)(const ,oid?2 const ,oid?))@
1usca en el arra# que comien-a en la direcci$n base # que tiene nelem elementos2 cada uno de
tama<o :idt'. El argumento >e# apunta al ,alor que se busca.
*e,uel,e un puntero al elemento buscado.
Si el arra# no contiene la cla,e2 de,uel,e un puntero nulo.
fcmp es una funci$n definida por el usuario que compara dos elementos # de,uel,e D si ambos
son iguales2 menor que D si el primero es menor que el segundo # ma#or que D en caso contrario.
E9emplo: *eterminaci$n de si un carcter est dentro del alfabeto
Winclude Kstdio.'L
Winclude Kstdlib.'L
int comparar(const c'ar ?a2 const c'ar ?b)@
t#pedef int (?fptr)(const ,oid?2 const ,oid?)@
"? *efine el tipo fptr2 el de la funci$n de comparaci$n ?"
main()
T
c'ar alfabetoMOIPabcdefg'i9>lmnopqrstu,:5#-P@
c'ar c2 ?p@
do T
printf(PIntrodu-ca un carcter: P)@
c I getc'ar()@
c I tolo:er(c)@
p I (c'ar ?) bsearc'(Xc2 alfabeto2 =G2 02 (fptr)comparar)@
"? &lamada a bsearc':
Con,ertir el puntero de,uelto a puntero a caracteres porque el elemento apuntado es
de tipo carcter. 6a# que con,ertir la funci$n de comparaci$n al tipo de la funci$n
de comparaci$n que espera bsearc' ?"
if (pYINU&&) printf(PRnQc Est en el alfabetoRnP2 c)@
else printf(PRnNo estRnP)@
U :'ile (cYIZqZ)@
return D@
U
int comparar(const c'ar ?a2 const c'ar ?b)
T return ?a?b@ U "? Comprueba cual es el ma#or ?"
(C) *aro +l,are- .uti/rre-
0B
,oid qsort(,oid ?base2 si-e7t nelem2
si-e7t :idt'2 int (?fcmp)(const ,oid ?2 const ,oid ?))@
%rdena el arra# que comien-a en la direcci$n base # que tiene nelem elementos2 cada uno de
tama<o :idt'.
fcmp es una funci$n definida por el usuario que compara dos elementos # de,uel,e D si ambos
son iguales2 menor que D si el primero es menor que el segundo # ma#or que D en caso contrario.
E9emplo: Arograma que ordena un arra# de enteros
Winclude Kstdio.'L
Winclude Kstdlib.'L
int comparar(const int ?a2 const int ?b)@
t#pedef int (?fptr)(const ,oid?2 const ,oid?)@
"? *efine el tipo fptr2 el de la funci$n de comparaci$n ?"
main()
T
int ,ectorMO I T 0B2 =F2 02 =BC2 CF2 GF2 BC2 F U@
int i@
Wdefine NU37E&E (int)(si-eof(,ector)"si-eof(int))
printf(PRnArra# desordenado: P)@
for (iID@ iKNU37E&E@
i[[) printf(PQd P2 ,ectorMiO)@
qsort(X,ector2 NU37E&E2 si-eof(int)2 (fptr)comparar)@
"? &lamada a qsort:
6a# que con,ertir la funci$n comparar al tipo de la
funci$n de comparaci$n que espera bsearc' ?"
printf(PRnArra# ordenado: P)@
for (iID@ iKNU37E&E@ i[[) printf(PQd P2 ,ectorMiO)@
return D@
U
int comparar(const int ?a2 const int ?b)
T return ?a?b@ U "? Comprueba cul es el ma#or ?"
(C) *aro +l,are- .uti/rre-
0C

You might also like