_fdopen, _wfdopen

Asocia una secuencia en un archivo que se ha abierto 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 de archivo del archivo abierto.

  • mode
    Tipo de acceso a archivos.

Valor devuelto

Cada una de estas funciones devuelve un puntero a la secuencia abierto. Un valor de puntero null indica un error. Cuando se produce un error, se invoca el controlador no válido de parámetro, tal y como se describe en Validación de parámetros. Si la ejecución puede continuar, errno es cualquier establecidos en EBADF, que indica un archivo dañado descriptor, o a EINVAL, que indica que mode era puntero NULL.

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

Comentarios

La función de _fdopen asocia una E/S transmitir el archivo identificado por fd, y permite así un archivo que se abre para que la E/S de bajo nivel se almacene en búfer y formato. _wfdopen es una versión con caracteres anchos de _fdopen; el argumento mode para _wfdopen es una cadena de caracteres anchos. _wfdopen y _fdopen se comportan de manera 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

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

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"
    Abrir para escribir, al final del archivo (el anexar). 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.

Si 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 mueve 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, cuando cambie de lectura y escritura, debe haber fflushintermedia, fsetpos, fseek, u operación de rewind . Puede especificar la posición actual para la operación de fsetpos o de fseek , si lo desea.

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

  • t
    Abra en modo de texto (traducido). En este modo, las combinaciones de fuentes de la retorno- línea de carro (CR-LF) se convierten en las fuentes (LF) de la uno- línea de entrada, y caracteres de LF se traducen a las combinaciones de CR-LF en la salida. También, Ctrl+Z se interpretan como un final de archivo de entrada. En archivos abierto para lectura/escritura, comprobaciones de fopen un Ctrl+Z al final del archivo y colóquelo, si es posible. Se hace esto porque usar las funciones de fseek y de ftell para desplazarse en un archivo que termina con un Ctrl+Z podría hacer fseek para comportarse incorrectamente cerca del final del archivo.

  • b
    Abra en modo (sin traducir) binario. Cualquier traducción de modo de t suprime.

  • 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". Éste es el valor predeterminado. También invalida la marca global de confirmación si vincula el programa con Commode.obj. El valor predeterminado global del indicador de confirmación es “ninguno- confirmación” a menos que explícitamente vincule el programa con Commode.obj.

t, c, y las opciones de nmode son extensiones de Microsoft para fopen y _fdopen. No usar si desea conservar la portabilidad de 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 información sobre los modos de texto y binario, vea E/S de archivo de modo de texto y binario.

Los caracteres válidos para la cadena mode que se usa en fopen y _fdopen corresponden a los argumentos oflag que se usan en _open y _sopen, como se indica a continuación:

Caracteres de la cadena de mode

Valor equivalentede oflagpara _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

c

None

n

None

Requisitos

Función

Encabezado necesario

_fdopen

<stdio.h>

_wfdopen

<stdio.h> o <wchar.h>

Para obtener más información de compatibilidad, vea Compatibilidad.

Ejemplo

// 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 );
}

Entrada: crt_fdopen.txt

Line one
Line two

Resultados

Lines in file: 2

Equivalente en .NET Framework

System::IO::FileStream::FileStream

Vea también

Referencia

E/S de secuencia

_dup, _dup2

fclose, _fcloseall

fopen, _wfopen

freopen, _wfreopen

_open, _wopen