1. 파일 입출력 다루기
ㅇ 파일 입출력 구분
- 저수준 파일처리 (Low Level File Handling) : 파일 기술자 (File Descriptor)
- 고수준 파일처리 (High Level File Handling) : 파일 포인터 (File Pointer)
ㅇ 파일 입출력 참조 : 파일 기술자 (File Descriptor) 또는 파일 핸들 (File Handle)
- 화일 입출력(I/O) 동작을 위한,
- 저수준의(Low-level) 인터페이스를 제공하는,
- 화일 참조용 번호(숫자)를 말함
* (명칭 유의)
. 주로, 유닉스에서는 `파일 기술자`, 윈도우즈에서는 `파일 핸들` 이라고 함
2. 파일 기술자 특징
ㅇ 모든 열린 파일들은, 파일기술자 번호에 의해 참조됨
ㅇ 특히, Unix/Linux에서, 모든 파일I/O 시스템호출은,
- 반드시, 파일기술자를 통해, 열려있는 파일을 참조함
. 파일 관리용 시스템호출 : create(), open(), read(), write(), close(), ioctl() 등
. 열려있는 파일 종류 : (파이프,FIFO,소켓,터미널,장치 파일,일반 파일 등)
. 파일 기술자 값 범위 : 작은 크기의 정수로써, 0 ~ 255 (1024)
. 번호 생성 주체 : 커널에 의해 만들어지는 값(번호)
- 응용 프로그램이 파일에 접근할 때, 바로 이 파일 기술자를 직접 사용함 ☞ 파일 포인터 참조
- 한편, 명령어,프로그램의 입력,출력을 표준 입출력으로 추상화시켜, ☞ 아래 3.항 참조
. 실제, 입출력이 어디에 연결되는지 신경쓰지 않고,
. 또한, 필요시 자유롭게 지정도 가능
3. 표준 파일 기술자 (Unix/Linux)
ㅇ 표준 파일 기술자로써 사용되는 주요 정수
- 0 (표준 입력, stdin, STDIN_FILENO)
- 1 (표준 출력, stdout, STDOUT_FILENO)
- 2 (표준 에러, stderr, STDERR_FILENO) 등
* C 언어에서, unistd.h 헤더 파일에 정의되어 있음
. STDIN_FILENO,STDOUT_FILENO,STDERR_FILENO : POSIX 표준 상의 명칭
ㅇ 셸에서의 파일기술자 처리 : (자동으로 항상 열려짐)
- 모든 유닉스/리눅스 셸들은,
- 위 3개의 파일기술자를 항상 열어놓고,
. 프로그램이 시작될 때 해당 프로그램에 연결시켜줌
- 예를들면,
. 프로그램이 시작 (프로세스 생성) 때, 쉘이 위 3개를 대신 열어주며,
. 프로그램 (프로세스)은 쉘이 만들어둔 3개 화일기술자의 복사본을 물려받음
- 즉, 쉘은 항상 위 3개를 언제나 열어놓은 상태로 동작함
ㅇ 위 3개의 파일기술자 이외에는,
- 별도로, (파일,소켓 등)에 대해, 파일 열기에 의한 생성 과정을 거친 뒤에야,
- 비로소, 파일기술자 번호가 할당됨