파일 디스크립터는 운영 체제가 파일을 효율적으로 관리하기 위해 사용하는 추상화된 핸들이다. 이는 열린 파일, 소켓, 파이프 등을 포함한 어떠한 입력/출력 리소스에 대한 참조를 숫자로 표현한 것이다. 운영 체제는 이 숫자를 사용하여 해당 리소스에 접근하고, 읽기, 쓰기, 닫기 등의 작업을 수행한다. 일반적으로 UNIX와 같은 시스템에서는 0
은 표준 입력, 1
은 표준 출력, 2
는 표준 에러를 나타낸다.
파일 시스템은 데이터를 저장하고, 검색하는 방식을 정의하는 운영 체제의 구성 요소이다. 이는 디스크 또는 다른 저장 매체에 파일과 디렉토리를 조직하는 방법을 제공하며, 파일에 대한 접근 및 관리 방법을 결정한다. 파일 시스템은 메타데이터를 사용하여 파일의 위치, 접근 권한, 생성 및 수정 시간과 같은 정보를 관리한다.
아이노드는 UNIX 계열 파일 시스템에서 파일의 메타데이터를 저장하는 데이터 구조이다. 각 파일은 고유한 아이노드 번호를 가지고 있으며, 이 번호를 통해 파일 시스템은 해당 파일의 속성을 찾을 수 있다. 아이노드에는 파일의 크기, 소유권, 접근 권한, 파일이 저장된 블록 위치 정보, 생성 및 수정 시간 등이 포함된다.
open()
Python에서 open()
함수는 파일을 열 때 사용되며, 파일 디스크립터를 반환한다. 이 함수는 파일 경로와 모드(읽기, 쓰기, 추가 등)를 인자로 받는다. 예를 들어, f = open('path/to/file', 'r')
는 파일을 읽기 모드로 열고, 해당 파일의 내용을 읽기 위한 파일 객체 f
를 반환한다. Python의 파일 객체는 내부적으로 버퍼링을 수행하여, 디스크 접근 횟수를 줄이고 입/출력 작업의 효율성을 높인다.
BufferedReader
와 BufferedWriter
Java에서 BufferedReader
와 BufferedWriter
는 텍스트 파일을 읽고 쓰기 위한 클래스이다. 이들은 파일 I/O를 버퍼링하여 더 빠르고 효율적으로 처리할 수 있도록 한다. 예를 들어, BufferedReader
는 파일에서 텍스트를 한 번에 한 줄씩 읽을 수 있도록 돕는다. 파일을 열기 위해 Java에서는 FileReader
같은 클래스를 사용하여 파일 디스크립터를 얻은 다음, 이를 BufferedReader
의 생성자에 전달하여 사용한다.
BufferedReader reader = new BufferedReader(new FileReader("path/to/file"));
String line;
while ((line = reader.readLine()) != null) {
System.out.println(line);
}
reader.close();