Compartir a través de


_dup, _dup2

Cree segundo descriptor de archivo para un archivo abierto (_dup), o reasigne descriptor de archivo (_dup2).

int _dup( 
   int fd 
);
int _dup2( 
   int fd1,
   int fd2 
);

Parámetros

  • fd, fd1
    Descriptores de archivo que hacen referencia al archivo abierto.

  • fd2
    Cualquier descriptor de archivo.

Valor devuelto

_dup devuelve nuevo descriptor de archivo._dup2 devuelve 0 para indicar correctamente.Si se produce un error, cada función vuelve – 1 y establece errno a EBADF si descriptor de archivo no es válido o a EMFILE si no más de descriptores de archivo están disponibles.En el caso descriptor de archivo no válido, la función también invoca el controlador no válido de parámetro, tal y como se describe en Validación de parámetros.

Para obtener más información sobre éstos y otros códigos de retorno, vea _doserrno, errno, _sys_errlist, y _sys_nerr.

Comentarios

Las funciones de _dup y de _dup2 asociar segundo descriptor de archivo con un archivo abierto actualmente.Estas funciones se pueden usar para asociar el descriptor de archivo predefinida, como que para stdout, con un archivo diferente.Las operaciones en el archivo se pueden realizar utilizando cualquier descriptor de archivo.El tipo de acceso permitido para el archivo no se ve afectado por la creación de nuevo descriptor._dup devuelve descriptor de archivo disponible siguiente para el archivo especificado._dup2 fuerza fd2 para hacer referencia al mismo archivo que fd1.Si fd2 está asociado a un archivo abierto en el momento de la llamada, ese archivo se cierra.

_dup y _dup2 aceptan descriptores de archivo como parámetros.Para pasar una secuencia (FILE *) *)cualquiera de estas funciones, utiliza _fileno.La rutina de fileno devuelve descriptor de archivo asociado actualmente a la secuencia especificada.El ejemplo siguiente se muestra cómo asociar stderr (definido como FILE* en Stdio.h) con el descriptor de archivo:

int cstderr = _dup( _fileno( stderr ));

Requisitos

Rutina

Encabezado necesario

_dup

<io.h>

_dup2

<io.h>

La consola no se admite en las aplicaciones de Tienda Windows.Los identificadores estándar de la secuencia asociados a la consola, stdin, stdout, y stderr, deben redirigir antes de que las funciones en tiempo de ejecución de C pueden utilizarlos en las aplicaciones de Tienda Windows.Para obtener más información de compatibilidad, vea Compatibilidad en la Introducción.

Ejemplo

// crt_dup.c
// This program uses the variable old to save
// the original stdout. It then opens a new file named
// DataFile and forces stdout to refer to it. Finally, it
// restores stdout to its original state.
//

#include <io.h>
#include <stdlib.h>
#include <stdio.h>

int main( void )
{
   int old;
   FILE *DataFile;

   old = _dup( 1 );   // "old" now refers to "stdout" 
                      // Note:  file descriptor 1 == "stdout" 
   if( old == -1 )
   {
      perror( "_dup( 1 ) failure" );
      exit( 1 );
   }
   _write( old, "This goes to stdout first\n", 26 );
   if( fopen_s( &DataFile, "data", "w" ) != 0 )
   {
      puts( "Can't open file 'data'\n" );
      exit( 1 );
   }

   // stdout now refers to file "data" 
   if( -1 == _dup2( _fileno( DataFile ), 1 ) )
   {
      perror( "Can't _dup2 stdout" );
      exit( 1 );
   }
   puts( "This goes to file 'data'\n" );

   // Flush stdout stream buffer so it goes to correct file 
   fflush( stdout );
   fclose( DataFile );

   // Restore original stdout 
   _dup2( old, 1 );
   puts( "This goes to stdout\n" );
   puts( "The file 'data' contains:" );
   _flushall();
   system( "type data" );
}
  

Vea también

Referencia

E/S de bajo nivel

_close

_creat, _wcreat

_open, _wopen