Ads 468x60px

Perfil

lunes, 17 de octubre de 2011

La librería estándar de C


El estándar de C define sólo unas pocas palabras reservadas. Sólo con ellas no puede hacerse un programa ``normal'' en la vida real. El programador necesita una serie de funciones y herramientas estándar, que deben estar disponibles en cualquier entorno de programación de C / C++. A este conjunto de funciones se le llama librería estándar. Las funciones se declaran en ficheros de cabecera o .h. Las cabeceras contienen única y exclusivamente los prototipos de las funciones. El código o cuerpo de las funciones se incluye en ficheros objeto que son realmente la librería.
Los principales ficheros de cabecera de C ``suelen ser'' los siguientes:
  • ctype.h: Funciones útiles para la clasificación y el mapeado de códigos.
  • errno.h: Funciones que permiten comprobar el valor almacenado en errno por algunas funciones de librerías.
  • float.h: Funciones que establecen algunas propiedades de las representaciones de tipos real.
  • limits.h: Funciones que establecen algunas propiedades de las representaciones de tipos enteros.
  • math.h: Funciones que sirven para realizar operaciones matemáticas comunes sobre valores de tipo double.
  • stdarg.h: Son declaraciones que permiten acceder a los argumentos adicionales sin nombre en una función que acepta un número variable de argumentos.
  • stdio.h: Macros y funciones para realizar operaciones de entrada y salida sobre ficheros y flujos de datos.
  • stdlib.h y a veces unistd.h: Declaraciones de una colección de funciones útiles y la definición de tipos y macros para usarlas. Entre ellas suele estar la función malloc que permite hacer peticiones de memoria dinámica al sistema.
  • string.h: Declaración de una colección de funciones útiles para manejar cadenas y otros arrays de caracteres.
  • time.h: Declaración de funciones para el manejo de fechas.
int printf (const char *formato, ...);
Escribe texto formateado por el flujo stdout, según las especificaciones de ``formato'' y la lista de expresiones. Devuelve el número de caracteres escritos o un valor negativo en caso de error.
int scanf (const char *formato, ...);
Lee texto por el flujo stdin y lo almacena según las especificaciones de ``formato''. Devuelve el número de valores asignados o EOF si se produce error o se alcanza fin de fichero sin producirse lectura.
int puts (const char *s);
Escribe los caracteres de la cadena ``s'' por el flujo stdout. Escribe un carácter ``NL'' en lugar del nulo de terminación. Devuelve un valor no negativo. En caso de error devuelve EOF.

fopen
FILE *fopen(const char *nombre_fichero, const char *modo);
Abre el fichero de nombre ``nombre_fichero'', lo asocia con un flujo de datos y devuelve un puntero al mismo. Si falla la llamada, devuelve un puntero nulo. Algunos de los caracteres iniciales de ``modo'' son:
``r'', para abrir un fichero de texto existente para su lectura
``w'', para crear un fichero de texto o abrir y truncar uno existente, para su escritura
``a'', para crear un fichero de texto o abrir uno existente, para su escritura. El indicador de posición se coloca al final del fichero antes de cada escritura
``r+'', para abrir un fichero de texto existente para su lectura y escritura
int fclose(FILE *flujo);
Cierra el fichero asociado con ``flujo''. Devuelve 0 en caso de éxito y EOF (end of file) en caso contrario.

size_t fwrite(const void *buffer, size_t n, size_t c, FILE *flujo);
La rutina fwrite permite escribir c elementos de longitud n bytes almacenados en el buffer apuntado por ``flujo''.

size_t fread(const void *buffer, size_t n, size_t c, FILE *flujo);
La rutina fread permite leer c elementos de longitud n bytes del fichero apuntado por ``flujo'' y los almacena en el buffer especificado.

int fgetc(FILE *flujo);
Lee el siguiente carácter por ``flujo'', avanza el indicador de posición y devuelve int. Devuelve EOF si pone a 1 el indicador de fin de fichero o el de error.
char *fgets(char *s, int n, FILE *flujo);
Lee caracteres por ``flujo'' y los almacena en elementos sucesivos del ``array'' que comienza en ``s'', continuando hasta que almacene ``n-1'' caracteres, almacene un carácter del nueva línea o ponga a 1 los indicadores de error o de fin de fichero. Si almacena un carácter, concluye almacenando un carácter nulo en el siguiente elemento del ``array''. Devuelve ``s'' si almacena algún carácter y no ha puesto a 1 el indicador de error; en caso contrario devuelve un puntero nulo.
int fputc(int c, FILE *flujo);
Escribe el carácter c por ``flujo'', avanza el indicador de posición del fichero y devuelve int c . En caso de error devuelve EOF.
int fputs(const char *s, FILE *flujo);
Escribe los caracteres de la cadena s por ``flujo''. No escribe el carácter nulo de terminación. En caso de éxito, devuelve un valor no negativo; en caso de error devuelve EOF.
int fscanf(FILE *flujo, const char *formato, ...);
Lee texto y convierte a la representación interna según el formato especificado en formato. Devuelve el número de entradas emparejadas y asignadas, o EOF si no se almacenan valores antes de que se active el indicador de error o de fin de fichero.
int fprintf(FILE *flujo, const char *formato, ...);
Genera texto formateado, bajo el control de formato formato y escribe los caracteres generados por flujo. Devuelve el número de caracteres generados o un valor negativo en caso de error.
A modo de resumen estas son las especificaciones de formato más comunes:
Formato
Descripción
%d
Entero con signo
%u
Entero sin signo
%c
Caracter
%s
Puntero a cadena de caracteres

int fseek( FILE *flujo, long desplazamiento, int origen);
La función fseek mueve el puntero de posición del fichero correspondiente al flujo de datos apuntado por ``flujo''. La nueva posición, medida en bytes, se obtiene añadiendo el número indicado por desplazamiento a la posición especificada por origen. La variable origen puede tomar tres valores:
SEEK_SET: El puntero de posición apuntará al inicio del fichero más el desplazamiento
SEEK_CUR: El puntero de posición apuntará a la posición actual del puntero de posición del fichero más el desplazamiento.
SEEK_END: El puntero de posición apuntará al fin del fichero más el desplazamiento (deberá ser menor o igual que cero).
Funciones para la conversión de tipos
abs
int abs(int i);
Devuelve el valor absoluto de i.
double atof(const char *s);
Convierte los caracteres de la cadena s a la representación interna de tipo double y devuelve ese valor.
int atoi(const char *s);
Convierte los caracteres de la cadena s a la representación interna de tipo int y devuelve ese valor.
long atol(const char *s);
Convierte los caracteres de la cadena s a la representación interna de tipo long y devuelve ese valor.
double strtod(const char *s, char **finptr);
Convierte los caracteres iniciales de la cadena s en la correspondiente representación interna de tipo double y devuelve ese valor. Si finptr no es un puntero nulo, la función almacena en él un puntero al resto de la cadena que no se ha convertido.
long strtol(const char *s, char **finptr);
Convierte los caracteres iniciales de la cadena s en la correspondiente representación interna de tipo long y devuelve ese valor. Si finptr no es un puntero nulo, la función almacena en él un puntero al resto de la cadena que no se ha convertido.
void *malloc(size_t longitud);
Asigna una dirección de memoria para un objeto de datos de tamaño longitud y devuelve esa dirección.
void *calloc(size_t nelem, size_t longitud);
Asigna una localización en memoria a un objeto de datos array que contiene nelem elementos de tamaño longitud, asignando ceros a todos los bytes del array y devuelve la dirección del primer elemento en caso de éxito; en caso contrario, devuelve un puntero nulo.
void *realloc(void *p, size_t longitud);
Cambia el tamaño de la memoria apuntada por p al que se indica con longitud. Asigna una dirección de memoria para un objeto de datos de tamaño longitud, copiando los valores almacenados en p. Devuelve la nueva dirección de memoria asignada.
void free(void *p);
Si p no es un puntero nulo, la función libera la memoria asignada al objeto de datos cuya dirección es p, en caso contrario, no hace nada. Se puede liberar la memoria asignada con calloc, malloc, realloc.

strcmp
int strcmp(const char *s1, const char *s2);
Compara los elementos de dos cadenas s1 y s2 hasta que encuentra elementos diferentes. Si todos son iguales, devuelve 0. Si el elemento diferente de s1 es mayor que el de s2, devuelve un valor mayor que cero; en caso contrario, devuelve un valor menor que cero.
char *strcpy(char *s1, const char *s2);
Copia la cadena s2, incluyendo el nulo, en el array de elementos char que comienza en s1. Devuelve s1.
char *strdup(const char *s);
Devuelve un puntero a una nueva cadena de caracteres que es un duplicado de la cadena s. La memoria para esta cadena de caracteres se obtiene con la función malloc y se libera con la función free.
size_t strlen (const char *s);
Devuelve el número de caracteres de la cadena s, sin incluir el nulo de terminación.
int strncmp(const char *s1, const char *s2, size\_t n);
Compara los elementos de las cadenas s1 y s2 hasta que encuentra alguno diferente o hasta que se han comparado n elementos. Si todos los elementos son inguales, devuelve 0. Si el elemento diferente de s1 es mayor que el de s2, devuelve un número positivo. En caso contrario, devuelve un número negativo.
char *strncpy(char *s1, const char *s2, size\_t n);
Copia la cadena s2, sin incluir el nulo, en la cadena s1. Copia no más de n caracteres de s2. Entonces almacena, cero o más caracteres nulos si son necesarios para completar un total de n caracteres. Devuelve s1.
char *strndup(const char *s, size\_t n);
Devuelve un puntero a una nueva cadena de caracteres que es un duplicado de la cadena s, solo copia los primeros n caracteres, incluyendo el nulo. La memoria para esta cadena de caracteres se obtiene con la función malloc y se libera con la función free.
double ceil(double x);
Valor entero más pequeño no menor que x.
cos
double cos(double x);
Coseno de x en radianes.
exp
double exp(double x);
Exponencial de x, .
double fabs(double x);
Valor absoluto de x, .
double floor(double x);
Mayor valor entero menor que x.
log
double log(double x);
Devuelve el logaritmo natural de x.
double log10(double x);
Devuelve el logaritmo en base 10 de x.
pow
double pow(double x, double y);
Devuelve x elevado a la potencia y, .
sin
double sin(double x);
Devuelve el seno de x (en radianes).
double sqrt(double x);
Devuelve la raíz cuadrada de x.
tan
double tan(double x);
Devuelve la tangente de x (en radianes).
int islower (int c);
Devuelve un valor distinto de cero si c es cualquiera de las letras minúsculas [a-z] u otra minúscula local.
int isupper (int c);
Devuelve un valor distinto de cero si c es cualquiera de las letras mayúsculas [A-Z] u otra mayúscula local.
tolower (int c);
Devuelve la correspondiente letra minúscula si existe y si isupper(c) es distinto de cero; en caso contrario, devuelve c.
toupper (int c);
Devuelve la correspondiente letra mayúscula si existe y si islower(c) es distinto de cero; en caso contrario, devuelve c.

0 comentarios: