이번 포스팅에서는 파일 디스크립터와 이것이 사용된 open()에 대해서 알아볼 것이다.
목차
개요
알고리즘 공부에서 항상 숏코딩을 보게 되면 입력받는 input() 대신에 길이가 짧은 open(0)으로 대체하여 받는 코딩들과 리눅스나 운영체제를 공부하다 보면 fildes 라는 항목에 0, 1이나 2를 집어넣는 경우도 자주 보이는데 이 숫자가 무슨 상태를 말하는것 같은데 잘은 이해가 되지 않아서 포스팅을 하게되었다.
개념
파일 서술자 라고도 불리는 파일 디스크립터는 기술문서에 영어로 함축해서 fildes 로도 적혀있다. 위키에 개념으로는
컴퓨터 프로그래밍 분야에서 파일 서술자 file descriptor (FD, less frequently fildes) 는 운영체제에서
특정한 파일에 접근하기 위한 추상적인 키이다. 이 용어는 일반적으로 POSIX 운영체제에 쓰인다.
라고 나와있다.
시스템이 파일이나 소켓 등을 할당하여 주면 이를 다시 파일 디스크립터에 정수형으로 할당 해놓고 나중에 파일이나 소켓 등에 시스템 콜을 이용하여 액세스를 할 당시에 파일이나 소켓의 이름이 아니라 이것이 저장되어있는 파일 디스크립터의 정수를 이용하여 파일을 지칭해내는 일종의 shortcut이라고 생각하면 좋다.
구조
쉽게 말해서 Fildes table 은 커널에 의하여 관리가 이루어 지는데 0부터 2까지는
무조건 0번부터 2번까지는 이미 기능이 할당 되어있고 (가장 주요한 기능들이라서 픽스 되어있는것 같다)
유닉스 계열의 대부분 OS는 파일 외부장치 소켓 등을 전부 fd 로 보고있다. 쉽게 설명하자면 이 모두 파일이 오픈 되어있다고 판단되는것이다. 그리고 이러한 fildes 는 운영체제에의 커널에 의해서 관리되고 있다.
따라서 파일을 오픈하거나 소켓을 생성하여 주면 비어있는 fd 중 가장 작은 값부터 할당을 해가면서 열고 닫고를 반복한다.
open()
파이썬의 기술문서에 보면
open에 대해서 이렇게 설명이 되어있다.
open의 파이썬 기술문서에 따르면 open의 매개변수인 file은 파일이 가진 path의 이름일 수도 있지만 int 형식의 Fildes 일수도 있다 라는것이 나와있다. 고로 알고리즘에서 자주 쓰이던 input 대신 사용하는 open(0)의 의미는
sys.stdin이라는 뜻이 된다.
따라서 [*open(0)] 이라고 쓰는건 sys.stdin 으로 모든 line을 가져오는것과 같은 뜻이 된다.
'CS > Linux' 카테고리의 다른 글
File/Directory permission 권한 설정 (0) | 2022.09.02 |
---|