dup(시스템 호출)

dup (system call)

Unix와 유사한 운영 체제에서 dup("중복제"의 줄임말)과 dup2 시스템 호출은 지정된 파일 설명자의 복사본을 만든다. 이 새로운 설명자는 사실 복사처럼 행동하는 것이 아니라, 옛 설명자의 가명처럼 행동한다.

C 라이브러리 POSIX 정의

dup과 dup2 통화는 POSIX 규격에 의해 표준화된다.[1]

인트로 속이다 (인트로 올드프드); 인트로 dup2 (인트로 올드프드, 인트로 뉴프드); 

전자는 열려 있는() 동작과 마찬가지로 사용 가능한 첫 번째 설명자를 할당한다. 파일 설명자를 지정되지 않은 위치에 복제하는 다른 방법은 다음과 같은 fcntl 시스템 호출이다. F_DUPFD 명령하다

후자는 복사본을 새로운 fd에 넣는다. newfd가 열려 있으면 먼저 을 닫는다.

입출력 리디렉션을 위한 dup2

유닉스 셸입출력 리디렉션에 dup2를 사용한다. 이와 함께 유닉스 파이프가 의존하는 툴이다.

다음 예에서는 다음을 사용한다. pipe() 그리고 dup() Unix 파이프를 사용하여 두 개의 개별 프로세스(프로그램1프로그램2)를 연결하려면:

#include <stdio.h> #include <stdlib.h> #include <유니스트드>.h>  /* 기능 프로토타입 */ 공허하게 하다 죽다(경시하다 마를 뜨다*);   인트로 본래의(인트로 argc, 마를 뜨다 **아그브) {  인트로 pdes[2];  pid_t 어린아이의;    만일(파이프를 치다(pdes) == -1)   죽다("파이프()");    어린아이의 = 포크를 갈다();  만일(어린아이의 == (pid_t)(-1))          죽다("fork()"); /* 포크 고장 */    만일(어린아이의 == (pid_t)0) {          /* 하위 프로세스 */           가까운.(1);       /* stdout 닫기 */                    만일(속이다(pdes[1]) == -1)           죽다("dup()");                    /* 이제 stdout과 pdes[1]가 동일하다(최저 자유 설명자 중복 반환) */           만일((퇴장시키다("프로그램1", "프로그램1", "arg1", NULL)) == -1)           죽다("execlp()");    _beakes(EXIT_SUPTION);  } 다른 {          /* 상위 프로세스 */           가까운.(0);       /* 닫힌 스틴 */                    만일(속이다(pdes[0]) == -1)           죽다("dup()");           /* 이제 stdin과 pdes[0]는 동일하다(최저 자유 설명자 중복 반환) */           만일((퇴장시키다("프로그램2", "프로그램2", "arg1", NULL)) == -1)           죽다("execlp()");    퇴장하다(EXIT_SUPTION);  }    돌아오다 0; }  공허하게 하다 죽다(경시하다 마를 뜨다 *음스그) {  착오를 일으키다(음스그);  퇴장하다(EXIT_Failure); } 

참고 항목

  • 파일 설명자 – 파일 설명자의 작동 방식 및 열기 관련 기타 기능

참조

  1. ^ "dup, dup2". opengroup.org.