운영체제(OS)/keyword

(Project2-User Programs) 파일 디스크립터(File Descriptor)

스탠딩 2023. 12. 15. 14:45

파일 디스크립터는 간단히 말해 프로세스가 파일이나 다른 입출력 리소스에 접근할 때 사용되는 식별자(식별 번호)이다. 모든 리소스는 고유한 파일 디스크립터로 식별되며, 이를 통해 프로세스는 해당 리소스에 대한 입출력 작업을 수행할 수 있다.

 

출처 : https://www.codequoi.com/en/handling-a-file-by-its-descriptor-in-c/

모든 프로세스는 각각의 파일 디스크립터 테이블을 갖는다. 프로세스마다 같은 파일에 대한 식별 번호(파일 디스크립터)가 다를 수 있지만 표준 입출력 및 에러 파일 디스크립터인 0, 1, 2는 공통이다.

파일 디스크립터의 종류

  1. 표준 파일 디스크립터:
    • 0: 표준 입력 (stdin)
    • 1: 표준 출력 (stdout)
    • 2: 표준 에러 (stderr)
  2. 사용자 정의 파일 디스크립터:
    • 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 함수로 파일 디스크립터를 닫는다.