stringtranslate.com

Entrada/salida de archivo C

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 se convirtió oficialmente en parte del sistema operativo Unix en la versión 7. [ 3]

La funcionalidad de E/S de C es de un nivel bastante bajo para los estándares modernos; C abstrae todas las operaciones de archivo en operaciones sobre secuencias de bytes , que pueden ser "secuencias de entrada" o "secuencias 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 el medio de un archivo, el programador debe crear una secuencia, buscar en el medio 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 los 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 cambios, si es que hubo alguno (por ejemplo, PHP ).

Descripción general

Esta biblioteca utiliza lo que se denominan streams para operar con dispositivos físicos como teclados, impresoras, terminales o con cualquier otro tipo de archivos soportados por el sistema. Los streams son una abstracción para interactuar con estos de forma uniforme. Todos los streams tienen propiedades similares independientemente de las características individuales de los medios físicos a los que están asociados. [4]

Funciones

La mayoría de las funciones de entrada/salida del archivo C están definidas en <stdio.h> (o en el encabezado C++ cstdio , que contiene la funcionalidad estándar de C pero en el espacio de nombres std ).

Constantes

Las constantes definidas en el encabezado <stdio.h> incluyen:

Variables

Las variables definidas en el encabezado <stdio.h> incluyen:

Tipos de miembros

Los tipos de datos definidos en el encabezado <stdio.h> incluyen:

Extensiones

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]

Ejemplo

El siguiente programa en C abre un archivo binario llamado myfile , lee cinco bytes de él y luego cierra el archivo.

#include <stdio.h> #include <stdlib.h>  int main ( void ) { char buffer [ 5 ]; ARCHIVO * fp = fopen ( "myfile" , "rb" );          if ( fp == NULL ) { perror ( "Error al abrir el archivo \" myfile \" " ); return EXIT_FAILURE ; }         if ( fread ( buffer , 1 , 5 , fp ) < 5 ) { fputs ( "Ocurrió un error al leer el archivo. \n " , stderr ); return EXIT_FAILURE ; }             fcerrar ( fp ); printf ( "Los bytes leídos fueron: " ); for ( int i = 0 ; i < 5 ; ++ i ) { printf ( "%02X" , buffer [ i ]); } putchar ( '\n' );               devolver SALIDA_EXITO ; } 

Alternativas a stdio

Se han desarrollado varias alternativas a stdio . Entre ellas se encuentra la biblioteca iostream de C++ , parte del estándar ISO C++ . ISO C++ aún requiere la funcionalidad de stdio .

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 . Entre sus características se encuentra la posibilidad de insertar funciones de devolución de llamada en un flujo para personalizar el manejo de los datos leídos o escritos en el flujo. [7] Fue lanzada al mundo exterior en 1997, y la última versión fue el 1 de febrero de 2005. [8]

Véase también

Referencias

  1. ^ Especificación ISO/IEC 9899:1999 . p. 274, § 7.19.
  2. ^ Kernighan, Brian ; Pike, Rob (1984). El entorno de programación UNIX . Englewood Cliffs : Prentice Hall . pág. 200.
  3. ^ McIlroy, MD (1987). Un lector de Unix para investigación: extractos anotados del Manual del programador, 1971–1986 (PDF) (Informe técnico). CSTR. Bell Labs. 139.
  4. ^ "(stdio.h) - Referencia de C++". C++ . Consultado el 25 de julio de 2021 .
  5. ^ stdio.h  – Referencia de definiciones básicas, La especificación única de UNIX , versión 4 de The Open Group
  6. ^ "Sfio: una biblioteca de E/S segura y rápida". Archivado desde el original el 11 de febrero de 2006. Consultado el 16 de marzo de 2021 .{{cite web}}: CS1 maint: bot: original URL status unknown (link)
  7. ^ Korn, David G. ; Vo, Kiem-Phong (1991). SFIO: E/S segura y rápida de cadenas y archivos . Proc. Conferencia USENIX de verano. CiteSeerX 10.1.1.51.6574 . 
  8. ^ Fowler, Glenn S.; Korn, David G.; Vo, Kiem-Phong (2000). Formato extendido con Sfio . Proc. Conferencia de verano de USENIX.

Enlaces externos