티스토리 뷰

리눅스

파일 디스크립터

삼전동해커 2020. 9. 13. 13:35

출처 : https://m.blog.naver.com/PostView.nhn?blogId=complusblog&logNo=221182201024&proxyReferer=https:%2F%2Fwww.google.com%2F




파일 디스크립터

리눅스 시스템에서 프로세스가 파일을 다룰 때 사용하는 개념.
파일 디스크립터는 프로세스에서 특정 파일에 접근할 때 사용하는 추상적인 값.
일반적으로 0이 아닌 정수값을 갖는다.

프로세스가 존재하는 파일을 open()함수를 이용해 열거나 creat()함수를 이용해 새로운 파일을 생성할 때 커널은 필요한 동작을 수행하고, 파일 디스크립터 값을 리턴해준다. 이 파일 디스크립터 값은 프로세스가 read(),write()함수를 수행할 때 인자로 사용되며, 어느 파일에 read(),write() 요청을 수행할 지를 구분하는 값으로 사용된다.

리눅스 시스템에서 일반적으로 0,1,2번 파일 디스크립터는 특수한 목적으로 사용한다.

0번 파일 디스크립터는 표준입력(stdin), 1번은 표준 출력(stdout), 2번은 표준 오류(stderr)에 매핑되어 있다. 

즉, 0번 파일 디스크립터를 이용해 파일에 입력을 할 수 있고, 1번을 이용해 내용을 출력, 2번을 이용해 오류를 알 수 있다.


open(),openat()함수


open(),openat()함수의 헤더는 <fcntl.h>를 사용한다.


open()함수는 path에 사용할 파일의 경로와 파일이름을 넣어주고, flag에 설정한 모드를 지정한다.


flag 모드

O_RDONLY : 파일을 읽기 전용으로 연다.
O_WRONLY : 파일을 쓰기 전용으로 연다.
O_RDWR : 파일을 쓰기와 읽기용으로 연다.
O_EXEC : 파일을 실행 전용으로 연다.
O_SEARCH : 디렉토리 파일을 탐색 전용으로 연다.


open(),openat()함수가 리턴해주는 파일 디스크립터는 현재 가용한 숫자중 가장 작은 값이다.


open(),openat()함수는 거의 비슷하지만 파일 디스크립터 인자를 이용하는 방식에 차이가 있다.


1.path 인자가 절대 경로이면, 파일 디스크립터 인자는 무시된다.

2.path 인자가 상대 경로 이면, 파일 디스크립터 인자에 명시된 디렉토리를 기준으로 상대 경로를 찾아간다.


openat()함수와 open()함수의 차이점은


1.멀티 쓰레드 환경에서 상대 경로를 다루기 쉽게 해준다.

2.time-of-check-to-time-of-use 문제를 해결하기 위해서 사용된다.


creat()함수

새로운 파일을 생성할 때 creat()함수를 사용한다.

creat()함수는 write모드로만 열린다. 다시 읽기 위해서는 creat()로 만들고, close()로 닫고,
O_RDONLY 나 O_RDWR 등의 플래그를 사용해 다시 열어야 한다.

close()함수


open()으로 연 파일은 close()로 닫는다.


'리눅스' 카테고리의 다른 글

Linux의 부팅  (0) 2020.10.24
john the ripper 사용하기  (0) 2020.09.26
root 권한에 비밀번호 설정  (0) 2020.06.26
리눅스의 기본 명령어  (1) 2018.07.13
리눅스의 설치  (0) 2018.07.10
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
글 보관함