El lenguaje de programación C proporciona muchas funciones de biblioteca estándar para la entrada y salida de archivos . Estas funciones constituyen la mayor parte del encabezado de la biblioteca estándar de C < stdio.h > . [1] La funcionalidad desciende de un "paquete de E/S portátil" escrito por Mike Lesk en Bell Labs a principios de la década de 1970, [2] y oficialmente pasó a formar parte del sistema operativo Unix en la Versión 7 . [3]
La funcionalidad de E/S de C es de nivel bastante bajo según los estándares modernos; C abstrae todas las operaciones de archivos en operaciones en flujos de bytes , que pueden ser "flujos de entrada" o "flujos de salida". A diferencia de algunos lenguajes de programación anteriores, C no tiene soporte directo para archivos de datos de acceso aleatorio ; Para leer un registro en medio de un archivo, el programador debe crear una secuencia, buscar la mitad del archivo y luego leer bytes en secuencia desde la secuencia.
El modelo de flujo de E/S de archivos fue popularizado por Unix, que se desarrolló simultáneamente con el propio lenguaje de programación C. La gran mayoría de los sistemas operativos modernos han heredado flujos de Unix, y muchos lenguajes de la familia de lenguajes de programación C han heredado la interfaz de E/S de archivos de C con pocos o ningún cambio (por ejemplo, PHP ).
Esta biblioteca utiliza los llamados streams para operar con dispositivos físicos como teclados, impresoras, terminales o con cualquier otro tipo de archivos soportados por el sistema. Los flujos son una abstracción para interactuar con estos de manera uniforme. Todas las corrientes tienen propiedades similares independientemente de las características individuales de los medios físicos con los que están asociadas. [4]
La mayoría de las funciones de entrada/salida de archivos C se definen en <stdio.h> (o en el encabezado de C++ cstdio , que contiene la funcionalidad estándar de C pero en el espacio de nombres estándar ).
Las constantes definidas en el encabezado <stdio.h> incluyen:
Las variables definidas en el encabezado <stdio.h> incluyen:
Los tipos de datos definidos en el encabezado <stdio.h> incluyen:
El estándar POSIX define varias extensiones para stdio en sus Definiciones Base, entre las que se encuentran una función readline que asigna memoria, las funciones fileno y fdopen que establecen el vínculo entre objetos FILE y descriptores de archivos , y un grupo de funciones para crear objetos FILE que hacen referencia a buffers en memoria. [5]
El siguiente programa en C abre un archivo binario llamado myfile , lee cinco bytes y luego cierra el archivo.
#incluir <stdio.h> #incluir <stdlib.h> int principal ( vacío ) { búfer de caracteres [ 5 ]; ARCHIVO * fp = fopen ( "miarchivo" , "rb" ); if ( fp == NULL ) { perror ( "Error al abrir el archivo \" miarchivo \" " ); devolver EXIT_FAILURE ; } if ( fread ( buffer , 1 , 5 , fp ) < 5 ) { fputs ( "Se produjo un error al leer el archivo. \n " , stderr ); devolver EXIT_FAILURE ; } cerrar ( fp ); printf ( "Los bytes leídos fueron: " ); for ( int i = 0 ; i < 5 ; ++ i ) { printf ( "%02X" , búfer [ i ]); } putchar ( '\n' ); devolver EXIT_SUCCESS ; }
Se han desarrollado varias alternativas a stdio . Entre ellas se encuentra la biblioteca C++ iostream , parte del estándar ISO C++ . ISO C++ todavía requiere la funcionalidad stdio .
Otras alternativas incluyen la biblioteca Sfio [6] (Una biblioteca de E/S segura/rápida) de AT&T Bell Laboratories . Esta biblioteca, introducida en 1991, tenía como objetivo evitar inconsistencias, prácticas inseguras e ineficiencias en el diseño de stdio . Entre sus características está la posibilidad de insertar funciones de devolución de llamada en una secuencia para personalizar el manejo de los datos leídos o escritos en la secuencia. [7] Fue lanzado al mundo exterior en 1997, y el último lanzamiento fue el 1 de febrero de 2005. [8]
{{cite web}}
: CS1 maint: bot: original URL status unknown (link)