_dup _dup2
Vytvoření druhého souboru popisovače pro otevření souboru (_dup), nebo změnit přiřazení popisovač souboru (_dup2).
int _dup(
int fd
);
int _dup2(
int fd1,
int fd2
);
Parametry
fd, fd1
Popisovače souboru ve vztahu k otevření souboru.fd2
Všechny popisovače souboru.
Vrácená hodnota
_dupvrátí nový popisovač souboru._dup2Vrátí hodnotu 0 označuje úspěch.Pokud dojde k chybě, vrátí funkce –1 a nastaví errno na EBADF Pokud popisovač souboru je neplatný nebo EMFILE -li k dispozici žádné další popisovače souboru.V případě popisovač souboru je neplatná funkce také vyvolá obslužnou rutinu neplatný parametr, jak je popsáno v Ověření parametrů.
Další informace o těchto i jiných návratové kódy, viz _doserrno, kód chyby, _sys_errlist a _sys_nerr.
Poznámky
_dup a _dup2 funkce přidružit druhý popisovač souboru aktuálně otevřeného souboru.Tyto funkce můžete použít k přiřazení předdefinovaných souboru popisovače, jako je například stdout, s jiný soubor.Operace se souborem můžete se provádějí buď popisovač souboru.Typ přístupu povolený pro soubor není ovlivněna vytvoření nového popisovače._dupVrátí další popisovače souborů pro daný soubor._dup2Vynutí fd2 odkazovat na stejný soubor jako fd1.Pokud fd2 je spojen s otevřeným souborem v okamžiku volání, že soubor zavřený.
Oba _dup a _dup2 přijmout popisovače souborů jako parametry.Průchod proudu (FILE *) kterékoli z těchto funkcí můžete _fileno.fileno Rutina vrátí popisovač souboru přidružené daný datový proud.Následující příklad ukazuje, jak přidružit stderr (definován jako FILE* v Stdio.h) s popisovačem souboru:
int cstderr = _dup( _fileno( stderr ));
Požadavky
Byla zahájena rutina |
Požadované záhlaví |
---|---|
_dup |
<io.h> |
_dup2 |
<io.h> |
V konzole není podporována v Windows Store apps.Úchyty standardní datový proud přidružené konzoly, stdin, stdout, a stderr, musí být přesměrována před C run-time funkce lze využít v Windows Store apps.Další informace o kompatibilitě v tématu Compatibility v úvodu.
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" );
}