Entrada / salida de archivo C


De Wikipedia, la enciclopedia libre
  (Redirigido desde Fprintf )
Saltar a navegación Saltar a búsqueda

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 nivel bastante bajo según los estándares modernos; 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 tiene soporte directo para archivos de datos de acceso aleatorio ; Para leer de un registro en medio de un archivo, el programador debe crear una secuencia, buscar en la mitad del archivo y luego leer bytes en secuencia de la secuencia.

El modelo de flujo de E / S de archivos fue popularizado por Unix, que se desarrolló al mismo tiempo que 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 ).

Visión general

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

Funciones

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

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:

  • ARCHIVO - también conocido comoidentificador de archivo , este es un tipo opaco que contiene la información sobre un archivo o secuencia de texto necesaria para realizar operaciones de entrada o salida en él, que incluyen:
    • identificador específico de la plataforma del dispositivo de E / S asociado, como un descriptor de archivo
    • el búfer
    • indicador de orientación de la corriente (desarmado, estrecho o ancho)
    • indicador de estado de almacenamiento en búfer de flujo (sin búfer, búfer de línea, 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 de la secuencia y el estado de conversión multibyte (un objeto de tipo mbstate_t)
    • cerradura reentrante (requerida a partir de C11 )
  • fpos_t : un tipo que no es una matriz capaz de identificar de manera ú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 admitidas
  • 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 a 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 los objetos FILE y los descriptores de archivos , y un grupo de funciones para crear objetos FILE que hacen referencia a búferes en memoria. [5]

Ejemplo

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

#include <stdio.h> #include <stdlib.h> int main ( void ) {   tampón de carbón [ 5 ];  ARCHIVO * fp = fopen ( "miarchivo" , "rb" );     if ( fp == NULL ) {     perror ( "No se pudo abrir el archivo \" miarchivo \ " " ); return EXIT_FAILURE ;  } para ( int i = 0 ; i < 5 ; i ++ ) {          int rc = getc ( fp );    si ( rc == EOF ) {     fputs ( "Ocurrió un error al leer el archivo. \ n " , stderr );  return EXIT_FAILURE ;  }  tampón [ i ] = rc ;   } fclose ( fp ); printf ( "Los bytes leídos fueron ...% x% x% x% x% x \ n " , buffer [ 0 ], buffer [ 1 ],   tampón [ 2 ], tampón [ 3 ], tampón [ 4 ]);   return EXIT_SUCCESS ; }

Alternativas a stdio

Se han desarrollado varias alternativas a stdio . Entre estos se encuentra la biblioteca iostream de C ++ , parte del estándar ISO C ++ . ISO C ++ todavía requiere la funcionalidad 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 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]

Ver también

  • cadena de formato printf
  • cadena de formato scanf

Referencias

  1. ^ Especificación ISO / IEC 9899: 1999 (PDF) . pag. 274, párrafo 7.19.
  2. ^ Kernighan, Brian ; Pike, Rob (1984). El entorno de programación UNIX . Acantilados de Englewood : Prentice Hall . pag. 200.
  3. ^ McIlroy, MD (1987). Un lector de investigación Unix: extractos comentados del Manual del programador, 1971–1986 (PDF) (Informe técnico). CSTR. Bell Labs. 139.
  4. ^ http://www.cplusplus.com/reference/cstdio/
  5. ^ stdio.h  - Referencia de definiciones de base, la especificación única de UNIX , número 7 de The Open Group
  6. ^ "SFIO: una biblioteca de E / S segura / rápida" . Archivado desde el original el 11 de febrero de 2006 . Consultado el 16 de marzo de 2021 .CS1 maint: bot: estado de URL original desconocido ( enlace )
  7. ^ Korn, David G .; Vo, Kiem-Phong (1991). SFIO: E / S segura / rápida de cadenas / archivos . Proc. Verano USENIX Conf. CiteSeerX 10.1.1.51.6574 . 
  8. ^ Fowler, Glenn S .; Korn, David G .; Vo, Kiem-Phong (2000). Formateo extendido con Sfio . Proc. Verano USENIX Conf.

enlaces externos

  • Medios relacionados con la entrada / salida de archivos C en Wikimedia Commons

Obtenido de " https://en.wikipedia.org/w/index.php?title=C_file_input/output&oldid=1043585013#fprintf "