_fdopen, _wfdopen

 

Para obtener la documentación más reciente de Visual Studio 2017 RC, consulte Documentación de Visual Studio 2017 RC.

Asocia un flujo a un archivo que se abrió previamente para E/S de bajo nivel.

FILE *_fdopen(    
   int fd,  
   const char *mode   
);  
FILE *_wfdopen(   
   int fd,  
   const wchar_t *mode   
);  

Parámetros

fd
Descriptor del archivo abierto.

mode
Tipo de acceso a archivos.

Cada una de estas funciones devuelve un puntero al flujo abierto. Un valor de puntero null indica un error. Cuando se produce un error, se invoca el controlador de parámetros no válidos, como se describe en validación del parámetro. Si la ejecución puede continuar, errno se establece en EBADF, que indica que un descriptor de archivo incorrecto, o en EINVAL, que indica que mode era un puntero nulo.

Para obtener más información sobre estos y otros códigos de error, consulte _doserrno, errno, _sys_errlist y _sys_nerr.

La función _fdopen asocia un flujo de E/S al archivo identificado por fd, lo que permite almacenar en búfer y dar formato a un archivo que está abierto para E/S de bajo nivel. _wfdopen es una versión con caracteres anchos de _fdopen; el argumento mode para _wfdopen es una cadena de caracteres anchos. De lo contrario, _wfdopen y _fdopen se comportan de forma idéntica.

Asignaciones de rutina de texto genérico

Rutina Tchar.h_UNICODE y _MBCS no definidos_MBCS definido_UNICODE definido
_tfdopen_fdopen_fdopen_wfdopen

La cadena de caracteres mode especifica el tipo de archivo y de acceso a archivos.

La cadena de caracteres mode especifica el tipo de acceso solicitado para el archivo, como se muestra en la tabla siguiente.

"r"
Abre para lectura. Si el archivo no existe o no se encuentra, la llamada de fopen falla.

"w"
Abre un archivo vacío para escritura. Si el archivo especificado existe, se destruye su contenido.

"a"
Abre para escritura, al final del archivo (anexo). Crea el archivo si no existe.

"r+"
Abre para lectura y escritura. (El archivo debe existir.)

"w+"
Abre un archivo vacío para lectura y escritura. Si el archivo especificado existe, se destruye su contenido.

"a+"
Se abre para lectura y anexado. Crea el archivo si no existe.

Cuando un archivo se abre con el tipo de acceso de "a" o de "a+", todas las operaciones de escritura aparecen al final del archivo. El puntero de archivo se puede mover mediante fseek o rewind, pero se desplaza siempre al final del archivo antes de que se realice cualquier operación de escritura. Por consiguiente, los datos existentes no pueden sobrescribirse. Cuando se especifica el tipo de acceso "r+", "w+" o "a+", se permiten la lectura y la escritura (el archivo está abierto para "actualización"). Sin embargo, si se cambia entre lectura y escritura, debe haber una operación intermedia fflush, fsetpos, fseek o rewind. Puede especificar la posición actual para la operación fsetpos o fseek, si lo desea.

Además de los valores anteriores, también se pueden incluir los caracteres siguientes en mode para especificar el modo de traducción de los caracteres de nueva línea.

t
Abra en modo de texto (traducido). En este modo, las combinaciones de retorno de carro-avance de línea (CR-LF) se convierten en avances de una línea (LF) en la entrada, y los caracteres de LF se traducen en combinaciones de CR-LF en la salida. Además, Ctrl+Z se interpreta como carácter de final de archivo en la entrada. En los archivos abiertos para lectura/escritura, fopen comprueba un Ctrl+Z al final del archivo y lo elimina, si es posible. Esto se hace porque si se usan las funciones fseek y ftell para desplazarse por un archivo que finaliza con Ctrl+Z es posible que fseek se comporte de forma incorrecta cerca del final del archivo.

b
Abre en modo binario (sin traducir). Las traducciones del modo t se suprimen.

c
Habilite la marca de confirmación para el filename asociado para que el contenido del búfer del archivo se escriba directamente en disco si se llama a fflush o a _flushall .

n
Restaure la marca de confirmación para el filename asociado a "no-commit". Este es el valor predeterminado. También invalida la marca global de confirmación si vincula el programa a Commode.obj. El valor predeterminado de la marca global de confirmación es "no-commit" a menos que explícitamente vincule el programa a Commode.obj.

El t, c, y n mode opciones son extensiones de Microsoft para fopen y _fdopen. No las use si desea conservar la portabilidad ANSI.

Si no se especifica t o b en mode, el modo de traducción predeterminado está definido por la variable global _fmode. Si se agrega t o b como prefijo al argumento, se produce un error en la función y devuelve NULL. Para obtener una explicación de los modos de texto y binarios, consulte texto y E/S de archivo binario de modo.

Los caracteres válidos para el mode cadena usada en fopen y _fdopen corresponden a oflag argumentos utilizados en _open y _sopen, como sigue.

Caracteres de la cadena modeEquivalente oflagvalor_open/_sopen
a_O_WRONLY | _O_APPEND(normalmente _O_WRONLY | _O_CREAT | _O_APPEND)
a+_O_RDWR | _O_APPEND (normalmente _O_RDWR | _O_APPEND | _O_CREAT )
r_O_RDONLY
r+_O_RDWR
w_O_WRONLY(normalmente _O_WRONLY | _O_CREAT | _O_TRUNC)
w+_O_RDWR(normalmente _O_RDWR | _O_CREAT | _O_TRUNC)
b_O_BINARY
t_O_TEXT
cNinguna
nNinguna
FunciónEncabezado necesario
_fdopen<stdio.h>
_wfdopen<stdio.h> o <wchar.h>

Para obtener más información sobre compatibilidad, vea Compatibility.

// crt_fdopen.c  
// This program opens a file by using low-level  
// I/O, then uses _fdopen to switch to stream  
// access. It counts the lines in the file.  
  
#include <stdlib.h>  
#include <stdio.h>  
#include <fcntl.h>  
#include <io.h>  
#include <share.h>  
  
int main( void )  
{  
   FILE *stream;  
   int  fd, count = 0;  
   char inbuf[128];  
  
   // Open a file.  
   if( _sopen_s( &fd, "crt_fdopen.txt", _O_RDONLY, _SH_DENYNO, 0 ) )  
      exit( 1 );  
  
   // Get stream from file descriptor.  
   if( (stream = _fdopen( fd, "r" )) == NULL )  
      exit( 1 );  
  
   while( fgets( inbuf, 128, stream ) != NULL )  
      count++;  
  
   // After _fdopen, close by using fclose, not _close.  
   fclose( stream );  
   printf( "Lines in file: %d\n", count );  
}  

Line one  
Line two  

Salida

Lines in file: 2  

FileStream

E/S de secuencia
_dup, _dup2
fclose, _fcloseall
fopen, _wfopen
freopen, _wfreopen
_open, _wopen

Mostrar: