C,C++ & Linux

C/C++ dup()

KyooDong 2020. 5. 16. 23:11
728x90

dup(2) 함수 기능

파일 디스크립터를 복사해줍니다.

함수 원형

#include <unistd.h>

int dup(int  fd);

매개변수

fd

복사할 파일 디스크립터

반환값

성공 시 복사된 파일 디스크립터 빈 파일 디스크립터 중 가장 작은 값이 리턴됩니다.

에러 시 -1 리턴과 errno 설정

예제

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <fcntl.h> // for open
#include <sys/types.h>
#include <sys/stat.h>

#define BUFFER_SIZE 1024

int main(int argc, char *argv[]) {
    char buf[BUFFER_SIZE];
    char *fname = "ssu_test.txt";
    int count;
    int fd1, fd2;

    // fd1 = ssu_test.txt
    fd1 = open(fname, O_RDONLY, 0644);

    // fd2 = copy of fd1
    fd2 = dup(fd1);

    // 처음 12 글자 출력
    count = read(fd1, buf, 12);
    buf[count] = 0;
    printf("fd1's printf : %s\n", buf);

    lseek(fd1, 1, SEEK_CUR);

    // fd2에서 read 하지만 fd1과 fd2는 파일 오프셋을 공유하기에 이어서 읽는 효과가 남
    count = read(fd2, buf, 12);
    buf[count] = 0;
    printf("fd2's printf : %s\n", buf);

	exit(0);
}

 

결과

 

 

 

 

 

 

 

 

 

 

리눅스시스템프로그래밍 저자 : 홍지만
https://book.naver.com/bookdb/book_detail.nhn?bid=14623672

책에 기술된 예제 프로그램입니다. 책 내부에는 훨씬 더 많은 자료가 있습니다. (개인적으로 좋았습니다.)