파일 디스크립터는 간단히 말해 프로세스가 파일이나 다른 입출력 리소스에 접근할 때 사용되는 식별자(식별 번호)이다. 모든 리소스는 고유한 파일 디스크립터로 식별되며, 이를 통해 프로세스는 해당 리소스에 대한 입출력 작업을 수행할 수 있다.
모든 프로세스는 각각의 파일 디스크립터 테이블을 갖는다. 프로세스마다 같은 파일에 대한 식별 번호(파일 디스크립터)가 다를 수 있지만 표준 입출력 및 에러 파일 디스크립터인 0, 1, 2는 공통이다.
파일 디스크립터의 종류
- 표준 파일 디스크립터:
- 0: 표준 입력 (stdin)
- 1: 표준 출력 (stdout)
- 2: 표준 에러 (stderr)
- 사용자 정의 파일 디스크립터:
- 3부터 시작하여 사용자가 정의한 파일 디스크립터. 파일이나 소켓 등 다양한 리소스에 대한 접근을 나타낸다.
파일 디스크립터의 동작
프로세스가 파일을 열면, 운영체제는 해당 파일에 대한 새로운 파일 디스크립터를 생성한다. 이 파일 디스크립터는 프로세스가 파일에 접근하고 조작할 때 사용된다. 파일 디스크립터를 통해 읽기, 쓰기, 닫기 등의 동작을 수행할 수 있다.
cCopy code
#include <stdio.h>#include <stdlib.h>#include <unistd.h>int main() {
// 파일 디스크립터를 사용한 파일 열기
int fd = open("example.txt", O_RDONLY);
// 파일 디스크립터를 통한 읽기 동작
char buffer[100];
read(fd, buffer, sizeof(buffer));
// 파일 디스크립터를 통한 파일 닫기
close(fd);
return 0;
}
위 코드에서 open 함수는 파일을 열고, 반환된 파일 디스크립터(fd, 식별 번호이기 때문에 int형이다)를 이용해 read 함수로 파일을 읽어들인 뒤, close 함수로 파일 디스크립터를 닫는다.
'운영체제(OS) > keyword' 카테고리의 다른 글
(Project2-User Programs) 원자적 연산(Atomic Operation) (0) | 2023.12.15 |
---|---|
(Project2-User Programs) 캐시(Cache) (0) | 2023.12.15 |
(Project2-User Programs) 시스템 콜(System Call) (0) | 2023.12.15 |
(Project2-User Programs) 유저 스택(User Stack) (0) | 2023.12.15 |
(Project2-User Programs) 레지스터와 메모리(Register vs Memory) (0) | 2023.12.15 |