getc, getchar, fgetc o getw Subroutine
Finalidad
Obtiene un carácter o una palabra de una corriente de entrada.
Biblioteca
Paquete de E/S estándar (libc.a)
Sintaxis
#include <stdio.h> FILE *Stream;
int fgetc (Stream)
FILE *Stream; int getchar (void) int getw (Stream)
FILE *Stream;Descripción
La macro getc devuelve el siguiente byte como un tipo de datos unsigned char convertido a un tipo de datos int de la entrada especificada por el parámetro Stream y mueve el puntero de archivo, si está definido, adelante un byte en el parámetro Stream . La macro getc no se puede utilizar cuando es necesaria una subrutina; por ejemplo, un puntero de subrutina no puede apuntar a ella.
Puesto que se implementa como una macro, la macro getc no funciona correctamente con un valor de parámetro Stream que tiene efectos secundarios. En particular, lo siguiente no funciona:
getc(*f++)En estos casos, utilice la subrutina fgetc .
La subrutina fgetc realiza la misma función que la macro getc , pero fgetc es una subrutina verdadera, no una macro. La subrutina fgetc se ejecuta más lentamente que getc pero ocupa menos espacio de disco.
La macro getchar devuelve el siguiente byte de stdin (la corriente de entrada estándar). La macro getchar es equivalente a getc (stdin).
La primera ejecución satisfactoria de fgetc, fgets, fgetwc, fgetws, fread, fscanf, getc, getchar, obtiene la subrutina o scanf utilizando una secuencia que devuelve datos no proporcionados por una llamada anterior a la subrutina ungetc o ungetwc marca last_atimecampo de actualización.
Las macros getc y getchar también se han implementado como subrutinas para la compatibilidad con ANSI. Para acceder a las subrutinas en lugar de las macros, inserte #undef getc o #undef getchar al principio del archivo de origen.
La subrutina getw devuelve la siguiente palabra (int) de la entrada especificada por el parámetro Corriente e incrementa el puntero de archivo asociado, si se ha definido, para que apunte a la siguiente palabra. El tamaño de una palabra varía de una arquitectura de máquina a otra. La subrutina getw devuelve la constante EOF al final del archivo o cuando se produce un error. Puesto que EOF es un valor entero válido, se deben utilizar las subrutinas feof y ferror para comprobar el éxito de getw. La subrutina getw no presupone ninguna alineación especial en el archivo.
Debido a las diferencias adicionales en la longitud de palabra y el orden de bytes de una arquitectura de máquina a otra, los archivos escritos utilizando la subrutina putw dependen de la máquina y es posible que no se puedan leer utilizando la macro getw en un tipo de procesador diferente.
Parámetros
| Elemento | Descripción |
|---|---|
| Flujo | Apunta a la estructura de archivos de un archivo abierto. |
Valores de retorno
Tras una finalización satisfactoria, getc, fgetc, getchar, y las subrutinas getw devuelven el siguiente byte o tipo de datos int de la corriente de entrada apuntada por el parámetro Stream . Si la corriente está al final del archivo, se establece un indicador de fin de archivo para la corriente y se devuelve la constante entera EOF . Si se produce un error de lectura, la variable global errno se establece para reflejar el error y se devuelve un valor de EOF . Las subrutinas ferror y feof deben utilizarse para distinguir entre el final del archivo y una condición de error.
Códigos de error
Si la corriente especificada por el parámetro Corriente no está en el almacenamiento intermedio o los datos deben leerse en el almacenamiento intermedio de la corriente, getc, getchar, fgetc, o la subrutina getw no es satisfactoria en las siguientes condiciones de error:
| Elemento | Descripción |
|---|---|
| FEAGA | Indica que el distintivo O_NONBLOCK está establecido para el descriptor de archivo subyacente a la corriente especificada por el parámetro Corriente . El proceso se retrasaría en la operación de subrutina fgetc . |
| EBADF | Indica que el descriptor de archivo subyacente a la corriente especificada por el parámetro Corriente no es un descriptor de archivo válido abierto para lectura. |
| EFBIG | Indica que se ha intentado leer un archivo que excede el límite de tamaño de archivo del proceso o el tamaño máximo de archivo. Consulte la subrutina ulimit . |
| EINTR | Indica que la operación de lectura se ha terminado debido a la recepción de una señal, y o bien no se han transferido datos, o bien la implementación no informa de una transferencia parcial para este archivo. Nota: En función de la rutina de biblioteca a la que se enlaza la aplicación, esta subrutina puede devolver EINTR. Consulte la subrutina signal relacionada con sa_restart.
|
| EIO | Indica que se ha producido un error físico, o que el proceso está en un grupo de procesos en segundo plano intentando realizar una llamada de subrutina read desde su terminal de control, y el proceso está ignorando (o bloqueando) la señal SIGTTIN o el grupo de procesos está huérfano. |
| EPIPE | Indica que se ha intentado leer desde un conducto o FIFO (primero en entrar, primero en salir) que no está abierto para que lo lea ningún proceso. También se enviará una señal SIGPIPE al proceso. |
| DESBORDAMIENTO | Indica que el archivo es un archivo normal y que se ha intentado leer en o más allá del máximo de desplazamiento asociado con la corriente correspondiente. |
La subrutina getc, getchar, fgetco getw tampoco se ejecuta correctamente bajo las siguientes condiciones de error:
| Elemento | Descripción |
|---|---|
| ENOMEM | Indica que no hay suficiente espacio de almacenamiento disponible. |
| ENXIO | Indica que se ha realizado una solicitud de un dispositivo no existente o que la solicitud estaba fuera de las prestaciones del dispositivo. |