_dup, _dup2

 

Pour obtenir la dernière documentation sur Visual Studio 2017 RC, consultez Documentation Visual Studio 2017 RC.

Crée un second descripteur de fichier pour un fichier ouvert (_dup), ou réaffecte un descripteur de fichier (_dup2).

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

Paramètres

fd, fd1
Descripteur de fichier qui fait référence pour ouvrir le fichier.

fd2
Un descripteur de fichier.

_dupRetourne un nouveau descripteur de fichier. _dup2Renvoie la valeur 0 pour indiquer la réussite. Si une erreur se produit, chaque fonction retourne –&1; et les jeux de errno à EBADF si le descripteur de fichier n’est pas valide ou à EMFILE si plus aucun descripteur de fichier n’est disponibles. Dans le cas d’un descripteur de fichier non valide, la fonction appelle également le Gestionnaire de paramètre non valide, comme décrit dans Validation de paramètre.

Pour plus d'informations sur ces codes de retour et autres, consultez _doserrno, errno, _sys_errlist et _sys_nerr.

Le _dup et _dup2 fonctions associer un second descripteur de fichier à un fichier ouvert. Ces fonctions peuvent être utilisées pour associer un descripteur de fichier prédéfinie, par exemple pour stdout, avec un autre fichier. Opérations sur le fichier peuvent être effectuées à l’aide d’un descripteur de fichier. Le type d’accès autorisé pour le fichier n’est pas affecté par la création d’un nouveau descripteur. _dupRetourne le descripteur de fichier disponible suivant pour le fichier donné. _dup2force fd2 pour faire référence au même fichier comme fd1. Si fd2 est associé avec un fichier ouvert au moment de l’appel, ce fichier est fermé.

Les deux _dup et _dup2 accepter des descripteurs de fichiers en tant que paramètres. Pour passer d’un flux (FILE *) à une de ces fonctions, utilisez _fileno. Le fileno routine retourne le descripteur de fichier actuellement associé au flux donné. L’exemple suivant montre comment associer stderr (défini en tant que FILE * dans Stdio.h) avec un descripteur de fichier :

int cstderr = _dup( _fileno( stderr ));  

RoutineEn-tête requis
_dup<io.h>
_dup2<io.h>

La console n'est pas prise en charge dans les applications Windows 8.x Store . Les handles de flux standard associés à la console (stdin, stdout et stderr) doivent être redirigés pour que les fonctions Runtime C puissent les utiliser dans les applications du Windows 8.x Store. Pour plus d’informations sur la compatibilité, consultez Compatibility.

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

This goes to stdout first  
This goes to stdout  
  
The file 'data' contains:  
This goes to file 'data'  

E/s de bas niveau
_close
_creat, _wcreat
_open, _wopen

Afficher: