Exporter (0) Imprimer
Développer tout
EOF
Développer Réduire
Cet article a fait l'objet d'une traduction automatique. Déplacez votre pointeur sur les phrases de l'article pour voir la version originale de ce texte. Informations supplémentaires.
Traduction
Source

_dup, _dup2

Créez un deuxième modèle de fichier pour un fichier ouvert (_dup), ou réassignez un modèle de fichier (_dup2).

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

fd, fd1

Modèles de fichier faisant référence au fichier ouvert.

fd2

Tout modèle de fichier.

_dup retourne un modèle de fichier. _dup2 retourne 0 pour indiquer le succès. Si une erreur se produit, retourne de chaque fonction à 1 et définit errno à EBADF si le modèle de fichier non valide ou à EMFILE si plus de modèles de fichier ne sont disponibles. Dans le cas d'un modèle de fichier non valide, la fonction appelle également le gestionnaire de paramètre non valide, comme décrit dans Validation des paramètres.

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

Les fonctions d' _dup et d' _dup2 associent un deuxième modèle de fichier actuellement avec un fichier ouvert. Ces fonctions peuvent être utilisées pour associer un modèle de fichier intégré, tels que ceux pour stdout, avec un autre fichier. Les opérations sur le fichier peuvent être exécutées à l'aide de l'un ou l'autre de modèle de fichier. Le type d'accès autorisé pour le fichier est non affecté par la création d'un modèle. _dup retourne le prochain modèle de fichier disponible pour le fichier donné. _dup2 force fd2 pour faire référence au même fichier qu' fd1. Si fd2 est associé à un fichier ouvert au moment de l'appel, ce fichier est fermé.

_dup et _dup2 reçoivent des modèles de fichier en tant que paramètres. Pour passer un flux (FILE *) à l'un ou l'autre de ces fonctions, utilise _fileno. La routine d' fileno retourne le modèle de fichier actuellement associées au flux donné. L'exemple suivant montre comment associer stderr (sous la forme FILE* dans Stdio.h) avec un modèle de fichier :

int cstderr = _dup( _fileno( stderr ));

Routine

En-tête requis

_dup

<io.h>

_dup2

<io.h>

La console n'est pas prise en charge dans les applications d' Windows Store . Les handles standard de flux de données associés à la console, stdin, stdout, et stderr, doivent être redirigés pour que les fonctions runtime C peuvent les utiliser dans des applications d' Windows Store . Pour plus d'informations de compatibilité, consultez l' Compatibilité dans l'introduction.

// 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" );
}
Cela va dans stdout d'abord que cela va dans stdout données du fichier les « contient : Cela va données au fichier « 

Ajouts de la communauté

AJOUTER
Afficher:
© 2015 Microsoft