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