_fdopen, _wfdopen
Asocia una secuencia a un archivo que anteriormente se abrió 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 abierta.Un valor de puntero null indica un error.Cuando se produce un error, se invoca el controlador de parámetro no válido, como se describe en Validación de parámetros.Si se permite la ejecución para continuar, errno se establece EBADF, lo que indica un descriptor de archivo incorrecto, o EINVAL, lo que indica que mode era un puntero null.
Para obtener más información acerca de estos y otros códigos de error, consulte _doserrno, errno, _sys_errlist y _sys_nerr.
Comentarios
El _fdopen función asocia una secuencia de E/s con el archivo identificado por fdy, por tanto, permite que un archivo que se abrió para que E/s de bajo nivel en el búfer y el formato._wfdopenes una versión de caracteres anchos de _fdopen; el mode el argumento de la _wfdopen es una cadena de caracteres anchos._wfdopeny _fdopen de lo contrario se comportan de forma idéntica.
Asignaciones de rutina de texto genérico
Rutina de TCHAR.h |
_UNICODE y _MBCS no definidos |
MBCS definido |
_UNICODE definido |
---|---|---|---|
_tfdopen |
_fdopen |
_fdopen |
_wfdopen |
El mode cadena de caracteres especifica el tipo de archivo y 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"
Se abre para lectura.Si el archivo no existe o no se encuentra, el fopen se produce un error de llamada."w"
Se abre un archivo vacío para escritura.Si no existe el archivo dado, se destruyen sus contenidos."a"
Se abre para escritura, al final del archivo (anexar).Crea el archivo si no existe."r+"
Se abre para lectura y escritura.(El archivo debe existir)."w+"
Se abre un archivo vacío para lectura y escritura.Si no existe el archivo dado, se destruyen sus contenidos."a+"
Se abre para leer y agregar texto.Crea el archivo si no existe.
Cuando se abre un archivo con el "a" o "a+" acceder a tipo, todas las operaciones se producen al final del archivo de escritura.El puntero de archivo se puede cambiar la posición mediante el uso de fseek o rewind, pero es siempre ha devuelto al final del archivo antes de cualquier operación se lleva a cabo de escritura.Por lo tanto, no se puede sobrescribir datos existentes.Cuando el "r+", "w+", o "a+" especifica el tipo de acceso, se permiten la lectura y escritura (se dice el archivo abierto para "actualización").Sin embargo, al cambiar entre lectura y escritura, debe haber una intervención fflush, fsetpos, fseek, o rewind operación.Puede especificar la posición actual de la fsetpos o fseek operación, si desea.
Además de los valores anteriores, los caracteres siguientes también pueden incluirse en mode para especificar el modo de traducción de caracteres de nueva línea.
t
Abrir como texto (había traducido) modo.En este modo, las combinaciones de avance de línea de retorno (CR-LF) de transporte se traducen en las fuentes de una línea (LF) en la entrada y caracteres de LF se convierten en combinaciones de CR-LF en la salida.Además, Ctrl + Z se interpreta como un carácter de fin de archivo en la entrada.En los archivos abiertos para lectura/escritura, fopen busca una Ctrl + Z al final del archivo y lo quita, si es posible.Esto se hace porque usando el fseek y ftell pueden hacer que las funciones para desplazarse dentro de un archivo que termina con una Ctrl + Z fseek se comporte incorrectamente cerca del final del archivo.b
Abrir en modo binario (no traducido).Las traducciones de t se suprimen modo.c
Habilita el indicador de confirmación para el asociado filename para que el contenido del búfer de archivo se escribe directamente en el disco si bien fflush o _flushall se llama.n
Restablecer el indicador de confirmación para el asociado filename a "no-commit". Éste es el valor predeterminado.También reemplaza el indicador de ejecuciones global si vincula el programa con Commode.obj.El valor predeterminado de indicador de ejecuciones global es "sin obligación" a menos que se vincula explícitamente el programa con Commode.obj.
The t, c, and nmode options are Microsoft extensions for fopen and _fdopen.No utilizar si desea conservar la portabilidad de ANSI.
Si t o b no se da mode, el modo de traducción predeterminado está definido por la variable global _fmode.Si t o b como prefijo para el argumento, la función se produce un error y devuelve NULL.Para obtener una explicación del modo de texto y binario, consulte texto y E/s de archivos binarios de modo.
Los caracteres válidos para el mode cadena utilizada en fopen y _fdopen corresponden a oflag argumentos que se utilizan en _open y _sopen, como se indica a continuación.
Caracteres en mode cadena |
Equivalent oflagvalue for _open/_sopen |
---|---|
a |
_O_WRONLY | _O_APPEND(usually _O_WRONLY | _O_CREAT | _O_APPEND) |
a+ |
_O_RDWR | _O_APPEND (usually _O_RDWR | _O_APPEND | _O_CREAT ) |
r |
_O_RDONLY |
r+ |
_O_RDWR |
w |
_O_WRONLY(usually _O_WRONLY | _O_CREAT | _O_TRUNC) |
w+ |
_O_RDWR(usually _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, consulte 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
Output
Lines in file: 2
Equivalente en .NET Framework
System::IO::FileStream::FileStream