_dup, _dup2

Membuat pendeskripsi file kedua untuk file terbuka (_dup), atau menetapkan ulang pendeskripsi file (_dup2).

Sintaks

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

Parameter

fd, fd1
Deskriptor file yang merujuk ke file terbuka.

fd2
Setiap pendeskripsi file.

Nilai hasil

_dup mengembalikan pendeskripsi file baru. _dup2 mengembalikan 0 untuk menunjukkan keberhasilan. Jika terjadi kesalahan, setiap fungsi mengembalikan -1 dan diatur errno ke EBADF jika deskriptor file tidak valid, atau jika EMFILE tidak ada lagi deskriptor file yang tersedia. Ketika melewati deskriptor file yang tidak valid, fungsi juga memanggil handler parameter yang tidak valid, seperti yang dijelaskan dalam Validasi parameter.

Untuk informasi selengkapnya tentang kode pengembalian, lihat errno, , _doserrno_sys_errlist, dan _sys_nerr.

Keterangan

Fungsi _dup dan _dup2 mengaitkan deskriptor file kedua dengan file yang saat ini terbuka. Fungsi-fungsi ini dapat digunakan untuk mengaitkan deskriptor file yang telah ditentukan sebelumnya, seperti untuk stdout, dengan file yang berbeda. Operasi pada file dapat dilakukan menggunakan pendeskripsi file. Jenis akses yang diizinkan untuk file tidak terpengaruh oleh pembuatan deskriptor baru. _dup mengembalikan pendeskripsi file berikutnya yang tersedia untuk file yang diberikan. _dup2fd2 memaksa untuk merujuk ke file yang sama dengan fd1. Jika fd2 dikaitkan dengan file terbuka pada saat panggilan, file tersebut ditutup.

Baik _dup dan _dup2 terima deskriptor file sebagai parameter. Untuk meneruskan aliran (FILE *) ke salah satu fungsi ini, gunakan _fileno. Rutinitas fileno mengembalikan pendeskripsi file yang saat ini terkait dengan aliran yang diberikan. Contoh berikut menunjukkan cara mengaitkan stderr (didefinisikan sebagai FILE * dalam stdio.h) dengan pendeskripsi file:

int cstderr = _dup( _fileno( stderr ));

Secara default, status global fungsi ini dicakup ke aplikasi. Untuk mengubah perilaku ini, lihat Status global di CRT.

Persyaratan

Rutin Header yang diperlukan
_dup <io.h>
_dup2 <io.h>

Konsol tidak didukung di aplikasi Platform Windows Universal (UWP). Handel aliran standar yang terkait dengan konsol, , stdin, stdoutdan stderr, harus dialihkan sebelum fungsi run-time C dapat menggunakannya di aplikasi UWP. Untuk informasi kompatibilitas selengkapnya, lihat Kompatibilitas.

Contoh

// 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'

Baca juga

I/O tingkat rendah
_close
_creat, _wcreat
_open, _wopen