목차
1. 유닉스 파일이란?
유닉스를 구성하고, 유닉스에서 사용하는 모든 데이터들은 파일로 구성된다. 즉 파일은 데이터를 읽을 수 있는 자원 또는 데이터를 쓸 수 있는 모든 대상으로, 우리가 흔히 떠올리는 파일 뿐 아니라 모든 물리적인 구동 장치를 가리킨다. 입력 자원인 키보드도 파일이고, 출력 대상인 모니터나 프린터도 파일이라고 할 수 있다.
유닉스에서는 파일의 효율적인 관리와 접근을 위해 inode(index node) 구조를 사용한다. 아이노드는 파일 시스템에서 가장 기본이 되는 단위가 되며, 각각의 파일은 모두 고유한 inode 번호를 가지고 있다.
2. 파일 디스크립터
- 프로세스(실행중인 프로그램)가 파일을 다룰 때 사용 하는 개념이다. 특정 파일에 접근하기 위한 추상적인 키를 말한다고 한다.
- 커널이 한 프로세스가 접근하는 파일들을 식별하기 위해 사용한다.
(1) 표준 입력, 표준 출력, 표준 오류
- 관례상 모든 쉘은 프로그램이 새로 실행될 때마다 세 개의 파일 디스크립터를 연다. 바로 표준 입력(standard input), 표준 출력(standard output), 표준 오류(standard error)이다.
- 관례상 쉘은 표준 입력의 파일 디스크립터는
0
, 표준 출력의 파일 디스크립터는 1
, 표준 오류의 파일 디스크립터는 2
로 표현한다. 이러한 관례는 쉘과 여러 응용 프로그램들에 쓰이지만 UNIX
커널의 한 특징은 아니다.
- 0, 1, 2라는 값들이 POSIX.1에 의해 표준화되긴 했지만, 가독성을 위해서는
<unistd.h>
헤더 파일에 정의되어 있는기호 상수 STDIN_FILENO
, STDOUT_FILENO
, STDERR_FILENO
를 사용하는 것이 바람직하다.
- 파일디스크립터의 범위는 본질적으로는 무한대이다. 하지만 시스템의 가용 메모리 용량, 정수 형식의 크기, 그리고 시스템 관리자가 설정한 정적(hard), 동적(soft) 한계들에 제한을 받는다. (FreeBSD 8.0, Linux 3.2.0, Mac OS X 10.6.8, Solaris 10 등)
(2) 프로세스간 파일 공유