다음을 통해 공유


_dup, _dup2

열려 있는 파일에 대 한 두 번째 파일 설명자를 만듭니다 (_dup), 또는 파일 설명자를 재지정 (_dup2).

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

매개 변수

  • fd, fd1
    파일 설명자를 참조 하는 파일을 열 수 있습니다.

  • fd2
    파일 설명자 가입니다.

반환 값

_dup새 파일 설명자를 반환합니다._dup2성공을 나타내는 0을 반환 합니다.각 함수에 오류가 발생 하면 – 1을 반환 하 고 설정 하는 errno 에 EBADF 파일 설명자가 유효 하지 않은 경우 또는 EMFILE 없음 자세한 파일 설명자를 사용할 수 있는 경우.에 잘못 된 파일 설명자의 경우 함수도는 잘못 된 매개 변수 처리기의 설명에 따라 호출 매개 변수 유효성 검사.

이러한 및 다른 반환 코드에 대 한 자세한 내용은 참조 하십시오 _sys_nerr, _doserrno, errno, _sys_errlist,.

설명

_dup 및 _dup2 함수는 두 번째 파일 설명자는 현재 열려 있는 파일에 연결 합니다.하기 위한 미리 정의 된 파일 설명자를 연결 하려면 이러한 함수를 사용할 수 있습니다 stdout, 다른 파일을 사용 합니다.어느 파일 설명자를 사용 하 여 파일 작업을 수행할 수 있습니다.파일에 허용 된 액세스 유형을 새 설명자의 생성에 영향을 받는 경우_dup지정 된 파일에 대 한 다음 사용 가능한 파일 설명자를 반환합니다._dup2강제로 fd2 와 동일한 파일을 참조할 fd1.경우 fd2 연결 된 호출 시 열려 있는 파일을 해당 파일이 닫혀 있습니다.

둘 다 _dup 및 _dup2 파일 설명자를 매개 변수로 허용 합니다.데이터를 문자열로 전달할 (FILE *) 이러한 함수 중 하나를 사용 하 여 _fileno.fileno 루틴은 현재 지정 된 스트림과 연결 된 파일 설명자를 반환 합니다.다음 예제에서는 연결 하는 방법을 보여 줍니다. stderr (정의 FILE* Stdio.h에) 파일 설명자를 사용 합니다.

int cstderr = _dup( _fileno( stderr ));

요구 사항

루틴

필수 헤더

_dup

<io.h>

_dup2

<io.h>

콘솔에서 지원 되지 않습니다 Windows 스토어 응용 프로그램입니다.콘솔에 연결 된 표준 스트림 핸들 stdin, stdout, 및 stderr, C 런타임 함수를 사용 하기 전에 이동 해야 Windows 스토어 응용 프로그램입니다.자세한 호환성에 대 한 내용은 호환성 소개에서 합니다.

예제

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

참고 항목

참조

하위 수준 I/O

_close

_creat, _wcreat

_open, _wopen