Udostępnij za pośrednictwem


_dup, _dup2

Tworzenie drugiego deskryptor pliku otwartego pliku (_dup), lub zmiany przypisanych deskryptor pliku (_dup2).

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

Parametry

  • fd, fd1
    Deskryptory odnoszące się do otwarcia pliku.

  • fd2
    Dowolny deskryptor.

Wartość zwracana

_dupZwraca nowy deskryptor pliku._dup2Zwraca wartość 0 do wskazania sukcesu.Jeśli wystąpi błąd, każda funkcja zwraca –1 i ustawia errno do EBADF Jeżeli deskryptor pliku jest nieprawidłowa lub na EMFILE Jeśli nie więcej deskryptorów plików są dostępne.W przypadku deskryptora nieprawidłowy plik funkcję również wywołuje program nieprawidłowy parametr obsługi, zgodnie z opisem w Sprawdzanie poprawności parametru.

Aby uzyskać więcej informacji na temat tych i innych kody powrotne, zobacz _doserrno, errno, _sys_errlist i _sys_nerr.

Uwagi

_dup i _dup2 funkcje skojarzyć deskryptor drugiego pliku z aktualnie otwartego pliku.Tych funkcji można użyć w celu skojarzenia deskryptor pliku wstępnie zdefiniowanych, takich jak za stdout, z innego pliku.Operacji na pliku może odbywać się przy użyciu albo deskryptor pliku.Typ dostępu przyznany dla pliku jest utworzenie nowego deskryptora nie ma wpływu._dupZwraca następny deskryptor pliku dostępne dla danego pliku._dup2Wymusza fd2 do odwoływania się do tego samego pliku jako fd1.Jeśli fd2 jest skojarzony z otwartego pliku w trakcie rozmowy, że plik jest zamykany.

Obie _dup i _dup2 przyjmuje deskryptorów jako parametry.Aby przekazać strumienia (FILE *) do jednej z tych funkcji, należy użyć _fileno.fileno Rutynowych zwraca deskryptor pliku, aktualnie skojarzonych z danym strumieniu.Poniższy przykład pokazuje jak skojarzyć stderr (zdefiniowane jako FILE* w Stdio.h) z deskryptorem pliku:

int cstderr = _dup( _fileno( stderr ));

Wymagania

Rozpoczęto wykonywanie procedury

Wymaganego nagłówka

_dup

<io.h>

_dup2

<io.h>

Konsola nie jest obsługiwana w Windows Store aplikacji.Związanych z konsolą, dojścia do strumienia standard stdin, stdout, i stderr, muszą być przeniesione, aby funkcje uruchomieniowej C mogą być użyte w Windows Store aplikacji.Informacji dotyczących zgodności, zobacz zgodności we wprowadzeniu.

Przykład

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

Zobacz też

Informacje

Niskiego poziomu we/wy

_close

_creat, _wcreat

_open, _wopen