open 계열
우리가 흔히 사용하는 open 계열의 함수를 사용하면 바로 /proc/pid/fd 밑에 있는 링크파일의 이름을 int 형으로 변환시켜서 되돌려주며, 이값을 이용해서 우리는 여러가지 입출력 작업을 할수 있게 되는것이다.
모든 입출력을 파일로 일관되게 처리할수 있으며, 프로그래밍 인터페이스와 /proc 파일의 인터페이스가 서로 동일하게 연결되어서 사용된다.
매우 효율적이고 편리한 입출력환경을 제공해준다는걸 느낄수 있을것이다.

이처럼 open 계열을 사용하면 각각의 입출력 파일을 직접 엑세스 할수 있으므로, 저수준의 작업, 예를들면 select, polling, 파일잠금, 레코드잠금, 파일속성변경등의 파일을 다루기 위한 세세한 일들을 할수 있는 장점을 얻게 된다.
반면 단점을 가지는데, 저수준으로 파일을 다루다 보니 간단한 일을 할기에는 너무 잔손이 많이 간다라는 점이다.
간단한 행입력을 받는 프로그램을 만든다고 생각해보자, open 을 사용하게 되면 개행문자 검사를 위해서 입력받은 문자를 바이트단위로 비교를 해주는 수고스러움을 감수해야 하며, 별도로 버퍼 관리를 해주어야 할것이다.

fopen 계열
이러한 문제를 해결하기 위해서(반드시 위의 문제때문에 나온것 만은 아니지만), f계열 의 좀더 고수준의 함수들을 제공한다.
f 계열함수들은 파일을 "FILE" 객체를 이용 해서 다루게 된다. FILE 객체는 fopen 함수를 이용해서 파일열기에 성공했을때 돌려주게 되는데,
/usr/include/stdio.h 를 열어보면 다음과 같이 선언되어 있다.
/* The opaque type of streams.  This is the definition used elsewhere.  */
typedef struct _IO_FILE FILE;
struct _IO_FILE 는 liblo.h 에 선언되어 있는데, 멤버변수가 꽤 많으니 직접 살펴 보기바란다. _IO_FILE 구조체를 보면 파일지시자와 함께, 파일 입출력을 위한 많은 버퍼를 별도로 관리하고 있음을 알수 있는데 fopen 계열함수를 이용하면, 이러한 구조체의 제어를 알아서 해준다.
결론적으로 파일을 객체로 다루게 됨으로 잔손질을 덜수 있게 된다.

'It's my study ^^ 과연' 카테고리의 다른 글

Big endian vs Little endian  (0) 2007.12.21
파일객체와 파일지시자 비교  (0) 2007.12.21
hard link와 symbolic link  (0) 2007.12.18
FAT 파일 시스템(File System)  (0) 2007.12.17
TCP 헤더 구조  (0) 2007.12.15

+ Recent posts