Condividi tramite


_dup, _dup2

Creare un secondo descrittore di file per un file aperto (_dup), oppure riassegnare un descrittore del file (_dup2).

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

Parametri

  • fd, fd1
    Descrittori del file che fanno riferimento al file aperto.

  • fd2
    Un descrittore del file.

Valore restituito

_dup restituisce un nuovo descrittore del file._dup2 restituisce 0 per indicare la riuscita.Se si verifica un errore, termine di ogni funzione a 1 e imposta errno a EBADF se il descrittore di file non valido o a EMFILE se non esistono descrittori di file disponibili.Nel caso di un descrittore di file non valido, la funzione viene richiamato il gestore non valido di parametro, come descritto in Convalida dei parametri.

Per ulteriori informazioni su questi e altri codici restituiti, vedere _doserrno, errno, _sys_errlist, e _sys_nerr.

Note

Le funzioni di _dup2 e di _dup associano un secondo descrittore di file con un file aperto.Tali funzioni possono essere utilizzate per associare un descrittore di file predefinito, come quella per stdout, con un file diverso.Le operazioni su file può essere eseguito utilizzando qualsiasi descrittore del file.Il tipo di accesso consentito per il file non viene influenzato dalla creazione di un nuovo descrittore._dup restituisce il descrittore del file successivo disponibile per il file specificato._dup2 impone fd2 per fare riferimento allo stesso file di fd1.Se fd2 è associato a un file aperto al momento della chiamata, verrà chiuso.

Sia _dup che _dup2 accettano i descrittori di file come parametri.Per passare un flusso (FILE *) *)a una di queste funzioni, utilizzare _fileno.La routine di fileno restituisce il descrittore del file attualmente associato al flusso specificato.Di seguito viene illustrato come associare stderr (definito FILE* in Stdio.h) con un descrittore del file:

int cstderr = _dup( _fileno( stderr ));

Requisiti

Routine

Intestazione obbligatoria

_dup

<io.h>

_dup2

<io.h>

La console non è supportata nelle applicazioni di Windows Store.L'handle standard del flusso associate alla console, stdin, stdoute stderr, devono essere reindirizzati prima di funzioni di runtime del linguaggio C possono essere utilizzate nelle applicazioni di Windows Store.Per ulteriori informazioni sulla compatibilità, vedere Compatibilità nell'introduzione.

Esempio

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

Vedere anche

Riferimenti

L'I/O di basso livello

_close

_create, _wcreat

_open, _wopen