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 archivo de cabecera de la biblioteca estándar de C < stdio.h > . [ 1 ] La funcionalidad deriva 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 se convirtió oficialmente en parte del sistema operativo Unix en la versión 7. [ 3 ]
La funcionalidad de entrada/salida de C es bastante básica para los estándares actuales; C abstrae todas las operaciones de archivo en operaciones sobre flujos de bytes , que pueden ser "flujos de entrada" o "flujos de salida". A diferencia de algunos lenguajes de programación anteriores, C no admite directamente archivos de datos de acceso aleatorio ; para leer un registro en medio de un archivo, el programador debe crear un flujo, posicionarse en el centro del archivo y luego leer los bytes secuencialmente desde el flujo.
El modelo de flujo para la entrada/salida 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 los flujos de Unix, y muchos lenguajes de la familia de lenguajes de programación C han heredado la interfaz de entrada/salida de archivos de C con pocos o ningún cambio (por ejemplo, PHP ).
Descripción general
Esta biblioteca utiliza lo que se denomina flujos para interactuar con dispositivos físicos como teclados, impresoras, terminales o cualquier otro tipo de archivos compatibles con el sistema. Los flujos constituyen una abstracción que permite interactuar con estos dispositivos de forma uniforme. Todos los flujos poseen propiedades similares, independientemente de las características individuales del medio físico al que están asociados. [ 4 ]
Funciones
La mayoría de las funciones de entrada/salida de archivos C están definidas en <stdio.h>(o en el encabezado de C++<cstdio> , que contiene la funcionalidad estándar de C pero en el espacio de nombres std ).
Constantes
Las constantes definidas en el <stdio.h>encabezado incluyen:
Variables

Las variables definidas en el <stdio.h>encabezado incluyen:
Tipos de miembros
Los tipos de datos definidos en el <stdio.h>encabezado incluyen:
- ARCHIVO – también conocido como unidentificador de archivo o unPuntero de archivo , este es unpuntero opacoque contiene la información sobre un archivo o flujo de texto necesaria para realizar operaciones de entrada o salida en él, incluyendo:
- Identificador específico de la plataforma del dispositivo de E/S asociado, como un descriptor de archivo.
- el búfer
- Indicador de orientación del flujo (sin configurar, estrecho o ancho)
- Indicador de estado de almacenamiento en búfer de la transmisión (sin búfer, con búfer de línea, con búfer completo)
- Indicador de modo de E/S (flujo de entrada, flujo de salida o flujo de actualización)
- Indicador de modo binario/texto
- indicador de fin de archivo
- indicador de error
- la posición actual del flujo y el estado de conversión multibyte (un objeto de tipo
mbstate_t) - cerradura reentrante (obligatoria a partir de C11 )
fpos_t– un tipo que no es una matriz, capaz de identificar de forma única la posición de cada byte en un archivo y cada estado de conversión que puede ocurrir en todas las codificaciones de caracteres multibyte compatibles.size_t– un tipo de entero sin signo que es el tipo del resultado del operador sizeof .
Extensiones
El estándar POSIX define varias extensiones en <stdio.h>sus Definiciones Base, entre las cuales se encuentran una readlinefunción que asigna memoria, las filenofunciones fdopenque establecen el vínculo entre los objetos FILE y los descriptores de archivo , y un grupo de funciones para crear objetos que hacen referencia a búferes en memoria. [ 5 ]FILE
Ejemplo
El siguiente programa en C abre un archivo binario llamado myfile.bin , lee cinco bytes del mismo y luego cierra el archivo.
#include <stdio.h> #include <stdlib.h>int main ( void ) { const char file_name [] = "myfile.bin" ;char buffer [ 5 ]; FILE * fp = fopen ( file_name , "rb" );if ( fp == NULL ) { fprintf ( stderr , "Error al abrir el archivo " %s ! \ n " , file_name ); return EXIT_FAILURE ; }size_t len = fread ( buffer , 1 , sizeof buffer , fp ); if ( len < sizeof buffer ) { if ( ferror ( fp )) { fprintf ( stderr , "Error de lectura en " %s "\n " , file_name ); } else if ( feof ( fp )) { fprintf ( stderr , "Fin de archivo inesperado en " %s "\n " , file_name ); } fclose ( fp ); return EXIT_FAILURE ; }fclose ( fp );printf ( "Los bytes leídos fueron: " ); for ( size_t i = 0 ; i < len ; ++ i ) { printf ( "%02X " , ( unsigned char ) buffer [ i ]); } putchar ( '\n' );devolver EXIT_SUCCESS ; }Alternativas a stdio
Se han desarrollado varias alternativas <stdio.h>. Entre ellas se encuentran los encabezados de E/S de C++<iostream> y <print>, parte de la biblioteca estándar de C++ . ISO C++ todavía requiere la <stdio.h>funcionalidad, y se encuentra en el encabezado <cstdio>.
Otras alternativas incluyen la biblioteca Sfio [ 6 ] (A Safe/Fast I/O Library) 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.h>. Entre sus características está la posibilidad de insertar funciones de devolución de llamada en un flujo para personalizar el manejo de datos leídos o escritos en el flujo. [ 7 ] [ 8 ] Fue lanzada al mundo exterior en 1997, y la última versión estable oficial fue el 1 de febrero de 2005 [ 9 ] [ 10 ] [ 11 ]
Véase también
Referencias
- ↑ Especificación ISO/IEC 9899:1999 . pág. 274, § 7.19.
- ↑ Kernighan, Brian ; Pike, Rob (1984). El entorno de programación UNIX . Englewood Cliffs : Prentice Hall . pág. 200. Bibcode : 1984upe..book.....K .
- ↑ McIlroy, MD (1987). Un lector de Research Unix: extractos anotados del Manual del programador, 1971–1986 (PDF) (Informe técnico). CSTR. Bell Labs. 139.
- ↑ "(stdio.h) - Referencia de C++" . C++ . Consultado el 25 de julio de 2021 .
- ↑ – Referencia de definiciones básicas, Especificación única de UNIX , Versión 5 de The Open Group
- ↑ "Sfio: Una biblioteca de E/S segura y rápida" . Archivado del original el 11 de febrero de 2006. Consultado el 16 de marzo de 2021 .
{{cite web}}: CS1 maint: bot: estado de la URL original desconocido ( enlace ) - ↑ Korn, David G. ; Vo, Kiem-Phong (1991). SFIO: E/S de cadena/archivo segura/rápida . Proc. Summer USENIX Conf. CiteSeerX 10.1.1.51.6574 .
- ↑ Fowler, Glenn S.; Korn, David G.; Vo, Kiem-Phong (2000). Formato extendido con Sfio . Actas de la Conferencia USENIX de Verano.
- ↑ "Lista de paquetes de descarga de software sfio" . Archivado del original el 19 de enero de 2012. Consultado el 17 de enero de 2026 .
{{cite web}}: CS1 maint: bot: estado de la URL original desconocido ( enlace ) - ↑ sfio-2005-02-01
- ↑ sfio-AST-2012-08-01
Enlaces externos
Contenido multimedia relacionado con la entrada/salida de archivos C en Wikimedia Commons.
- Biblioteca estándar de C
- Entrada/salida