Articulo de referencia

C file input/output

The C programming language provides many standard library functions for file input and output . These functions make up the bulk of the C standard library header "}},"i":0}}]}">...

The C programming language provides many standard libraryfunctions for fileinput and output. These functions make up the bulk of the C standard libraryheader<stdio.h>.[1] The functionality descends from a "portable I/O package" written by Mike Lesk at Bell Labs in the early 1970s,[2] and officially became part of the Unix operating system in Version 7.[3]

The I/O functionality of C is fairly low-level by modern standards; C abstracts all file operations into operations on streams of bytes, which may be "input streams" or "output streams". Unlike some earlier programming languages, C has no direct support for random-access data files; to read from a record in the middle of a file, the programmer must create a stream, seek to the middle of the file, and then read bytes in sequence from the stream.

The stream model of file I/O was popularized by Unix, which was developed concurrently with the C programming language itself. The vast majority of modern operating systems have inherited streams from Unix, and many languages in the C programming language family have inherited C's file I/O interface with few if any changes (for example, PHP).

Overview

This library uses what are called streams to operate with physical devices such as keyboards, printers, terminals or with any other type of files supported by the system. Streams are an abstraction to interact with these in a uniform way. All streams have similar properties independent of the individual characteristics of the physical media they are associated with.[4]

Functions

Most of the C file input/output functions are defined in <stdio.h> (or in the C++ header <cstdio>, which contains the standard C functionality but in the stdnamespace).

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

  1. Especificación ISO/IEC 9899:1999 . pág. 274, § 7.19.
  2. Kernighan, Brian ; Pike, Rob (1984). El entorno de programación UNIX . Englewood Cliffs : Prentice Hall . pág. 200. Bibcode : 1984upe..book.....K . 
  3. McIlroy, MD (1987). Un lector de Research Unix: 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. Referencia de definiciones básicas, Especificación única de UNIX , Versión 5 de The Open Groupstdio.h  
  6. "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 )
  7. 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 . 
  8. Fowler, Glenn S.; Korn, David G.; Vo, Kiem-Phong (2000). Formato extendido con Sfio . Actas de la Conferencia de Verano de USENIX.
  9. "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 )
  10. sfio-2005-02-01
  11. sfio-AST-2012-08-01
  • Logotipo de Wikimedia CommonsContenido multimedia relacionado 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=1337054524#fflush "