본문 바로가기
Development/System Programming

File Programming 기본

by KingCat 2015. 6. 23.

File은 곧 Stream 이라고 할 수 있다.

Stream이란 내부적으로 Pointer를 가지고 순차적인 조작을 하는 개념적인 시스템이다.


File을 조작할 경우 파일을 생성/열기 -> 조작 -> 닫기 순차적으로 이루어진다.


생성/열기시에 열기는 읽기 전용/쓰기 전용/공통으로 열기로 나누어지고, File의 형태는 TEXT/Binary로 나누어진다.

또한 자원을 혼자 독점할 것인지, 다른 곳에서 사용 가능한 공용으로 사용할 것인지를 설정하고, 보안 특성을 설정한다.

이 후, 파일 조작의 핸들을 얻어내고 이것으로 이후 조작을 한다.


File 조작시 API는 ANSI 표준과 WIN32 Native로 나뉜다.


ANSI 표준은 C언어 표준함수로 어떤 OS에서도 대부분의 기능을 제공해주나, 해당 OS의 특수한 기능은 사용하지 못한다. (fopen, fprintf, fscanf, fgetc, fread, fwrite, fseek, fclose)


WIN32 Native는 Windows  전용함수로써 Windows 에서만 쓸 수 있으며, 특유의 다양한 Windows File 처리 기능을 사용할 수 있다. (CreateFile, ReadFile, WriteFile, SetFilePointer, CloseHandle)


<fopen 함수>

FILE* fopen( const char *filename, const char *mode )


매개변수로 설정한 파일의 핸들을 리턴한다.

mode는 파일의 속성을 설정하는 매개변수는 다음과 같다.


w (쓰기 : 파일 존재하지 않으면 생성, 존재하면 지우고 새로 열기)

r (읽기 : 파일을 읽기위해 연다. 존재하지 않으면 Error)

a (붙이기 : 파일의 포인터를 기존 파일 제일 끝부분에서 시작한다.)

+ (갱신 : 기존 파일을 수정하거나 값 추가를 위해 연다)

t (텍스트형 : 파일을 TEXT로 간주하고 연다.)

b (바이너리형 : 파일을 Binary로 간주하고 연다.)


fseek 함수를 사용하여 File Pointer를 조작할 수 있다.

int fseek(FILE* stream, long offset, int origin);


stream : File Handle

offset : 움직일 거리

origin : 기준점 (SEEK_SET : 파일의 제일 처음, SEEK_CUR : Handle의 현재 위치, SEEK_END : 파일의 끝)


규정상 기본적으로 열린 File들은 Handle을 전달할 필요없이 사용할 수 있다.

stdin : 표준입력장치 (키보드)

stdout : 표준출력 (화면)

prn : 프린터


fprintf(stdout, "Test\n"); // Test를 화면에 출력.