Funciones C (gnu/linux)

32
Funciones de librerías C GNU/Linux Copyright (c) 2006, Jose Daniel Gutiérrez Porset [email protected]

Transcript of Funciones C (gnu/linux)

Page 1: Funciones C (gnu/linux)

Funciones de librerías CGNU/Linux

Copyright (c) 2006, Jose Daniel Gutiérrez [email protected]

Page 2: Funciones C (gnu/linux)

2

Acerca de este documento

Copyright (c) 2006, Jose Daniel Gutiérrez [email protected]

Se otorga permiso para copiar, distribuir y/o modificar este documento bajo los términos de la Licencia de Documentación Libre de GNU en su versión 1.2 o cualquier otra versión posterior publicada por la Free Software Foundation, siendo todo él invariante. Una copia de la licencia está disponible en la web de la Free Software Foundation, dentro de la sección titulada GNU Free Documentation License.

Este documento ha sido realizado íntegramente con software libre.

Licencia de Uso

Page 3: Funciones C (gnu/linux)

3

Índice

● Licencia de uso de este documento● Ayuda de funciones● Cuadros sinópticos● Funciones

Page 4: Funciones C (gnu/linux)

4

Ayuda de funciones

● Paquete debian/ubuntu/...: manpages-dev

● Comandos desde la shell:– apropos <todo_o_parte_de_nombre_funcion>

– man nombre_funcion

– man 2 nombre_funcion

– man 3 nombre_funcion

Page 5: Funciones C (gnu/linux)

5

Cuadros sinópticos

● Tabla de funciones de gestión de streams en stdio.h

Funciones de E/S mediante streams

Función E/S stream Contenido Destino Origen Comentarios

printf S stdout texto Argumentossegún formato

putchar S stdout texto Carácter

puts S stdout texto Cadena Añade salto de línea

scanf E stdin texto Argumentos segúnformato

getchar E stdin texto Carácter

gets E stdin texto Cadena A diferencia de fgets noestablece tamaño máx.

fprintf S FILE * texto Argumentossegún formato

fputc S FILE * texto Carácter Hay una macro estándarequivalente: putc

fputs S FILE * texto Cadena No añade salto de línea

fscanf E FILE * texto Argumentos segúnformato

fgetc E FILE * texto Carácter Hay una macro estándarequivalente: getc

fgets E FILE * texto Cadena

fwrite S FILE * binario Zona de memoria

fread E FILE * binario Zona de memoria

Page 6: Funciones C (gnu/linux)

6

Cuadros sinópticos

● Características comúnes a las funciones indicadas:– Funcionan con buffers de entrada y salida, y no los limpian previamente. Tiene que ver con 

la espera a que esté el buffer lleno (en salida se mejora el rendimiento; en el caso de un buffer de entrada, se puede editar). Los buffers pueden ser de tres tipos: completo, de línea (ej. las de stdin) o nulo.

– En el caso de las funciones que leen de la entrada estándar, se hace eco a la pantalla si no hay redirección a fichero.

– Todas las indicadas son estándar, y existen tanto en GNU/Linux como en Ms DOS/Windows.

– Hay otras funciones no estándares, dependientes de S.O. y que operan sobre la terminal (no sobre streams de E/S). Ej. en el caso de Ms, se definen en conio.h las siguientes: getche, getch, putch. Su comportamiento difiere según hagan o no eco, etc.

● Regla nemotécnica para ubicación de parámetro FILE * en las declaraciones: siempre es el último parámetro excepto en fprintf y fscanf donde es el primero

Funciones de streams

Page 7: Funciones C (gnu/linux)

7

Funciones

● void *calloc (size_t num_elem, size_t tam_bytes);

– malloc.h, stdlib.h

– Reserva dinámica de memoria de num_elem x tam_bytes

– Valor devuelto: puntero a la memoria asignada, o NULL si la petición falla

● void clearerr( FILE *stream);

– stdio.h

– Limpia los indicadores de fin de fichero y error para un stream concreto

Page 8: Funciones C (gnu/linux)

8

Funciones

● int fclose (FILE *stream);

– stdio.h

– Cerrar stream

– Valor de retorno: en caso de éxito 0, y si error ­1● int feof (FILE *stream);

– stdio.h

– Indicador de fin de fichero

– Valor de retorno: en caso de no haberse intentado leer o escribir al final del fichero devuelve 0

Page 9: Funciones C (gnu/linux)

9

Funciones

● int ferror (FILE *stream);

– stdio.h

– Indicador de error

– Valor de retorno: devuelve el último código de error correspondiente a una operación de streams sobre un stream concreto, o 0 si no lo ha habido.

● int fflush (FILE *stream);

– stdio.h

– Volcado de buffers de salida

Page 10: Funciones C (gnu/linux)

10

Funciones

● int fgetc(FILE *stream);

– stdio.h

– Idem que getchar sobre un stream● char *fgets(char *destino, int n, FILE *stream);

– stdio.h

– Lee desde un stream como mucho n­1 caracteres, o hasta encontrar un salto de línea (que lo mantiene) o fin de fichero

– Añade un '\0' al final

– Valor de retorno: s en caso de éxito, y NULL en caso de error o si se llega al final del stream

Page 11: Funciones C (gnu/linux)

11

Funciones

● FILE *fopen (char *nomfich, char *modo);

– stdio.h

– Abrir stream. Parámetro modo:

­    modo puede incluir la letra 'b' como carácter final o entre dos cualesquiera por  compatibilidad con ANSI C, pero en los sistemas POSIX (GNU/Linux,...) no tiene efecto

­    Si se abre con +, hay que sincronizar buffers entre operaciones: para leer después de escribir, llamar antes a fflush o a una función de posicionamiento (fseek,fsetpos,rewind). Para escribir tras leer, hacer un reposicionamiento, a no ser que sea al final del fichero

– Valor de retorno: en caso de error, devuelve NULL

Modo ¿Puedeleer?

¿Puedeescribir?

Posiciónen fichero

Si existeel fichero

Si no existe elfichero

“r” Sí No Principio No lo borra Da error

“r+” Sí Sí Principio No lo borra Da error

“w” No Sí Principio Lo borra Lo crea

“w+” Sí Sí Principio Lo borra Lo crea

“a” No Sí Final No lo borra Lo crea

“a+” Sí Sí Final No lo borra Lo crea

Page 12: Funciones C (gnu/linux)

12

Funciones

● int fprintf(FILE *stream, const char *formato, ...);

– stdio.h

– Idem que printf sobre un stream● void __fpurge(FILE *stream);

– stdio_ext.h

– Volcado de buffers de entrada

– No es estándar: Sólo en GNU/Linux

Page 13: Funciones C (gnu/linux)

13

Funciones

● int fputc(int caracter, FILE *stream);

– stdio.h

– Idem que putchar sobre un stream● int fputs(const char *origen, FILE *stream);

– stdio.h

– Idem que puts sobre un stream

– No añade '\n'

Page 14: Funciones C (gnu/linux)

14

Funciones

● size_t fread( void *ptr, size_t tam_bytes, size_t num_elem, FILE *stream);

– stdio.h

– Lectura de elementos de memoria

– Valor de retorno: nº de elementos (no de caracteres) leídos correctamente. Si ocurre un error o se llega al fin­de­fichero, el valor devuelto es un nº menor del esperado (o cero).fread no distingue entre fin­de­fichero y error, así que quien llame a esta función debe emplear feof y ferror para determinar qué ha ocurrido.

● void free (void * ptr);

– malloc.h, stdlib.h

– Liberación de memoria reservada dinámicamente

Page 15: Funciones C (gnu/linux)

15

Funciones

● FILE *freopen(char *nomfich, char *modo, FILE *stream);

– stdio.h

– Redireccionar un stream: se abre el fichero nomfich y le asocia el  stream __stream. Éste se cierra si existe.

– El argumento modo se emplea igual que en la función fopen.

– Un uso típico es cambiar el fichero asociado con un stream estándar (stderr, stdin, o stdout).

– Valor de retorno: en caso de error, devuelve NULL

Page 16: Funciones C (gnu/linux)

16

Funciones

● int fscanf(FILE *stream, const char *formato, ...);

– stdio.h

– Idem que scanf aplicado sobre un stream● int fseek (FILE *stream, long int offset, int origen);

– stdio.h

– Desplazar indicador de posición un offset según origen:● SEEK_SET: relativo al comienzo del fichero (offset>0)● SEEK_CUR: relativo a la posición actual (offset positivo o negativo)● SEEK_END: relativo al final del fichero (offset<0)

– Valor de retorno: en caso de éxito 0, y si error ­1

Page 17: Funciones C (gnu/linux)

17

Funciones

● long int ftell (FILE *stream);

– stdio.h

– Obtener el valor actual del indicador de posición de un stream

– Valor de retorno: en caso de error ­1

Page 18: Funciones C (gnu/linux)

18

Funciones

● size_t fwrite (const void *ptr, size_t tam_bytes, size_t num_elem, FILE *stream);

– stdio.h

– Escritura de elementos de memoria

– Valor de retorno: nº de elementos (no de caracteres) escritos correctamente. Si ocurre un error o se llega al fin­de­fichero, el valor devuelto es un nº menor del esperado (o cero).

Page 19: Funciones C (gnu/linux)

19

Funciones

● int getchar(void);

– stdio.h

– Lee de stdin un carácter

– Valor de retorno: carácter leído como un unsigned char modelado a un int o EOF al llegar al final de la entrada o en caso de error.

● char *gets (char *destino);

– stdio.h

– Lee de stdin hasta encontrar un salto de línea (que sustituye por '\0') o EOF

– No controla desbordamiento de buffer

– Valor de retorno: s en caso de éxito, y NULL en caso de error o si se llega al final del stream

Page 20: Funciones C (gnu/linux)

20

Funciones

● void *malloc (size_t tam_bytes);

– malloc.h, stdlib.h

– Reserva dinámica de memoria de tam_bytes

– Valor de retorno: puntero a la memoria asignada, o NULL si la petición falla

Page 21: Funciones C (gnu/linux)

21

Funciones

● int printf (const char *formato, ...);

– stdio.h

– Saca por stdout los argumentos formateándolos según una cadena de control (ver cuadro)

– Muy importante: ha de haber correspondencia entre:● El nº de parámetros y el nº de %● Los tipos de los argumentos y los tipos  indicados con %

– Valor de retorno: nº de caracteres impresos. Si se encuentra un error de salida, se devuelve un valor negativo.

Page 22: Funciones C (gnu/linux)

22

Funciones

– Cadena de control: “%­+ 0w.pmc” (obligatorio: c)

- justif. izda.

+ sacar signo

espacio espacio si no hay signo

0 rellenar con ceros (si no está justif. a izda.)

w mínima anchura de campo

p precisión

m carácter de conversión:● h: short int● l: long int● L: long double

c carácter de conversión:● d,i: int● o: octal● u: unsigned● x,X: hexadecimal● f: float y double● e,E: exponencial● g,G: idem que f, e, E según el exponente● c: char● s: cadena● p: puntero

Page 23: Funciones C (gnu/linux)

23

Funciones

● int putchar(int caracter);

– stdio.h

– Saca por stdout un carácter

– Valor de retorno: el carácter escrito como un unsigned char modelado a un int o EOF en caso de error

● int puts (char *cadena);

– stdio.h

– Saca por stdout una cadena

– Añade '\n'

– Valor de retorno: número no negativo si acaban bien, o EOF en caso de error

Page 24: Funciones C (gnu/linux)

24

Funciones

● void *realloc (void *ptr, size_t tam_bytes);

– malloc.h, stdlib.h

– Reserva dinámica de memoria de tam_bytes a partir de una zona ya reservada

– Valor de retorno: puntero a la memoria asignada, o NULL si la petición falla

Page 25: Funciones C (gnu/linux)

25

Funciones

● int remove(const char *pathname);

– stdio.h

– Borrado de fichero

– Valor de retorno: en caso de éxito 0, y si error ­1● int rename(const char *oldpath, const char *newpath);

– stdio.h

– Renombrar fichero

– Valor de retorno: en caso de éxito 0, y si error ­1

Page 26: Funciones C (gnu/linux)

26

Funciones

● void rewind (FILE *stream);

– stdio.h

– Desplazar el cursor del fichero al inicio.

– Es equivalente a fseek(stream, 0L, SEEK_SET).

Page 27: Funciones C (gnu/linux)

27

Funciones

● int scanf (const char *formato, ...);

– stdio.h

– Lee de stdin e intenta convertir a tipos según según el formato indicado por una cadena de control. El  análisis acaba cuando  un  carácter de  la entrada no concuerda con un carácter del formato, o bien cuando una conversión no puede realizarse. En este caso el resto de caracteres queda en el buffer de entrada.

– Separador de argumentos en la cadena de control:

● En la cadena de control se interpretan igual el espacio en blanco, el tabulador y el salto de línea.  Uno de éstos concuerda con cualquier cantidad de espacio en blanco, incluyendo ninguna, en la entrada.

● Se puede emplear otro carácter.– No coge el carácter de fin de línea sino que éste se elimina

– No controla desbordamiento de buffer para el caso de %s

Page 28: Funciones C (gnu/linux)

28

Funciones

– Cadena de control: “wmc” (obligatorio: c)

– En el caso de introducir números seguidos, puede inducir a confusión. Ej.”%d%f” si se mete 234.567 hay varias posibilidades

– Valor de retorno: nº de conversiones exitosas o el valor EOF si ha habido un fallo de entrada antes de ninguna conversión

w mínima anchura de campo

m carácter de conversión opcional:● h: shortint● l: long int o long double● L: long double

c carácter de conversión:● d,i: int● o: octal● u: unsigned● x,X: hexadecimal● f,e,g,E: float● lf: double● e, E: exponencial● c: char● s: cadena● p: puntero

Page 29: Funciones C (gnu/linux)

29

Funciones

● int sprintf (char *destino, const char *formato, ...);

– stdio.h

– Idem que printf sobre una cadena

– Añade '\0' al final● int sscanf (char *destino, const char *formato, ...);

– stdio.h

– Idem que scanf sobre una cadena

Page 30: Funciones C (gnu/linux)

30

Funciones

● char *strcat (char *destino, char *cadena);

– string.h

– Concatenación de una cadena detrás de otra

– No controla desbordamiento de buffer

– Valor de retorno: puntero a la cadena destino● char *strchr (char *cadena, int caracter);

– string.h

– Búsqueda de un carácter en una cadena, de izda. a dcha.

– Valor de retorno: puntero al elemento de la cadena con el carácter coincidente, o NULL si el carácter no se ha encontrado

Page 31: Funciones C (gnu/linux)

31

Funciones

● int strcmp (char *cadena1, char *cadena2);

– string.h

– Comparación de dos cadenas

– Valor de retorno: entero menor que, igual a, o mayor que cero si s1 se encuentra que es, respectivamente, menor que, igual a, o mayor que s2

● char *strcpy (char *destino, char *origen);

– string.h

– Copia de una cadena a otra

– No controla desbordamiento de buffer

– Valor de retorno: puntero a la cadena destino

Page 32: Funciones C (gnu/linux)

32

Funciones

● size_t strlen (char *cadena);

– string.h

– Longitud de una cadena (nº de caracteres)

– Valor de retorno: nº caracteres● char *strrchr (char *cadena, int caracter);

– string.h

– Búsqueda de un carácter en una cadena, de dcha. a izda. ● char *strstr (char *cadena1, char *cadena2);

– string.h

– Búsqueda de cadena cadena2 en cadena1, de izda a dcha

– Valor de retorno: puntero a la aparición, o NULL si no se encuentra