Recommanded Free YOUTUBE Lecture: <% selectedImage[1] %>

dup(2)

1장. dup(2)

차례
1.1절. 사용법
1.2절. 설명
1.3절. 반환값
1.4절. 에러
1.5절. 예제
1.6절. 참고문헌

파일 지정자를 복사한다.


1.1절. 사용법

#include <unistd.h>

int dup(int oldfd);
int dup2(int oldfd, int newfd);
		


1.2절. 설명

dup()와 dup2()는 파일 지정자 oldfd에 대한 복사본을 생성한다. 성공적으로 수행될경우 oldfd 지정자에 대한 복사본은 서로 공유되어서 사용된다. 즉 lock, 파일위치 포인터, 플래그등을 공유한다. 만약 원본 파일지정자 에서 위치변경이 일어 났다면, 다른 복사된 파일지정자에도 영향을 미친다.

그러나 이 두개의 파일지정자간 close-on-exe 플래그는 공유되지 않는다.

dup()를 이용해서 복사되어지는 새로운 파일 지정자는 사용되지 않는 가장 작은 파일 지정자를 이용한다. dup2()는 디스크립터는 파일 지정자를 지정할 수 있는데, 이전에 열린 newfd가 있다면 닫고 나서, oldfdnewfd에 복사하면 된다.


1.3절. 반환값

복사된 새로운 파일지정자를 리턴한다. 에러가 발생하면 -1 을 리턴한다.


1.4절. 에러

EBADF

oldfd 가 열린 파일 지정자가 아닐경우

EMFILE

프로세스가 최대로 열수 있는 파일 지정자 갯수를 가진 상태에서 새로운 파일지정자를 얻고자 시도하는 경우


1.5절. 예제

#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>

int main()
{
    int fd, fd2;
    char buf[80];

    fd = open("dup.c", O_RDONLY);
    fd2 = dup(fd);
    printf("%d = %d\n", fd, fd2);

    memset(buf, 0x00, 80);
    read(fd, buf, 20);
    printf("fd : %d\n%s\n", fd, buf);

    memset(buf, 0x00, 80);
    read(fd2, buf, 20);
    printf("fd : %d\n%s\n", fd2, buf);

    close(fd);
}