Compartilhar via


_dup, _dup2

Crie um segundo arquivo descritor para um arquivo aberto_dup(), ou um atributo novamente um arquivo descritor (_dup2).

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

Parâmetros

  • fd, fd1
    Descritores de Arquivo que fazem referência ao arquivo aberto.

  • fd2
    Qualquer arquivo descritor.

Valor de retorno

_dup retorna um descritor de novo arquivo._dup2 retorna 0 para indicar o êxito.Se ocorrer um erro, os retornos de cada função – 1 e definem errno a EBADF se o arquivo descritor é inválido ou não mais se a EMFILE arquivo descritor está disponível.No caso de um arquivo descritor inválida, a função também chama o manipulador de parâmetro inválido, como descrito em Validação de parâmetro.

Para obter mais informações sobre esses e outros códigos de retorno, consulte _doserrno, errno, _sys_errlist, e _sys_nerr.

Comentários

Funções de _dup e de _dup2 associam um segundo arquivo descritor com um arquivo aberto.Essas funções podem ser usadas para associar um arquivo descritor predefinido, como o para stdout, com um arquivo diferente.Operações no arquivo podem ser executadas usando um ou outro arquivo descritor.O tipo de acesso permitido o arquivo é afetado pela criação de um novo descritor._dup retorna o arquivo descritor disponível a seguir para o arquivo especificado._dup2 força fd2 para se referir ao mesmo arquivo que fd1.Se fd2 está associado a um arquivo aberto no momento de chamada, esse arquivo está fechado.

_dup e _dup2 aceitam descritores de arquivo como parâmetros.Para passar um fluxo (FILE *) *)a qualquer uma dessas funções, use _fileno.A rotina de fileno retorna o arquivo descritor associado com o momento determinado fluxo.O exemplo a seguir mostra como associar stderr (definido como FILE* em Stdio.h) com um arquivo descritor:

int cstderr = _dup( _fileno( stderr ));

Requisitos

Rotina

Cabeçalho necessário

_dup

<io.h>

_dup2

<io.h>

O console não é suportado em aplicativos de Windows Store .Identificadores padrões de fluxo associadas ao console, stdin, stdout, e stderr, devem ser redirecionada antes que as funções de tempo de execução das C pode usar em aplicativos de Windows Store .Para mais informações, consulte Compatibilidade de compatibilidade na introdução.

Exemplo

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

Consulte também

Referência

Nível baixo e/S

Close

_creat, _wcreat

Open, _wopen