Sdílet prostřednictvím


_dup, _dup2

Vytvoří druhý popisovač souboru pro otevření souboru (_dup), nebo znovu přiřadí popisovač souboru (_dup2).

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

Parametry

  • fd, fd1
    Popisovače souboru odkazující na otevření souboru.

  • fd2
    Všechny popisovače souboru.

Vrácená hodnota

_dup vrátí nový popisovač souboru._dup2 vrátí hodnotu 0 označující úspěšné provedení.Pokud dojde k chybě, vrátí každá funkce –1 a nastaví errno na EBADF, pokud popisovač souboru je neplatný, nebo EMFILE, pokud nejsou k dispozici žádné další popisovače souboru.V případě neplatného popisovače souboru funkce také vyvolá obslužnou rutinu neplatného parametru, jak je popsáno v Ověření parametru.

Další informace o těchto a dalších návratových kódech naleznete v části _doserrno, errno, _sys_errlist, and _sys_nerr.

Poznámky

Funkce _dup a _dup2 přidružují druhý popisovač souboru k aktuálně otevřenému souboru.Tyto funkce lze použít k přidružení předdefinovaného popisovače souboru, jako je například stdout s jiným souborem.Operace se souborem lze provádět pomocí libovolného popisovače souboru.Typ přístupu povolený pro soubor není ovlivněn vytvořením nového popisovače._dup vrátí další popisovače souborů pro daný soubor._dup2 donutí fd2 odkazovat na stejný soubor jako fd1.Pokud je fd2 spojen s otevřeným souborem v okamžiku volání, daný soubor je zavřen.

Obě _dup a _dup2 přijímají popisovače souborů jako parametry.Chcete-li předat proud (FILE *) některé z těchto funkcí, použijte _fileno.Rutina fileno vrátí popisovač souboru, který je aktuálně přidružený k danému datovému proudu.Následující příklad ukazuje, jak přidružit stderr (definované jako FILE * v souboru Stdio.h) s popisovačem souboru:

int cstderr = _dup( _fileno( stderr ));

Požadavky

Rutina

Požadované záhlaví

_dup

<io.h>

_dup2

<io.h>

Konzola není v aplikacích Windows Store podporována.Standardní datový proud popisovačů, které jsou spojeny s konzolou – stdin, stdout a stderr, musí být přesměrován před použitím funkcí jazyka C run-time je v aplikacích Windows Store.Další informace o kompatibilitě naleznete v tématu Kompatibilita.

Příklad

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

Viz také

Referenční dokumentace

I/O nízké úrovně

_close

_creat, _wcreat

_open, _wopen