24-1 파일의 open과 close

- 파일을 open한다는 것은 파일과 데이터를 주고 받을 수 있는 스트림을 생성한다는 의미이다.

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

- 두번째 인자인 mode는 open하는 파일의 특징 및 용도를 결정한다.

 * 파일 접근 모드
- r : 읽기 가능
- w : 쓰기 가능, 파일이 존재하면 지워버리고 새로 쓴다.
- a : 쓰기 가능, 파일이 존재하면 그 뒤에 추가해서 쓴다.
- r+ : 읽고 쓰기 가능, 파일이 존재하면 그 위에 덮어 쓴다.
- w+ : 읽고 쓰기 가능, 파일이 존재하면 지워버리고 새로 쓴다.
- a+ : 읽고 쓰기 가능, 파일이 존재하면 그 뒤에 추가해서 쓴다.

 * 데이터 입출력 모드
- t : 텍스트 모드
- b : 2진 모드

- Carriage Return : 특수문자 \r로 표현되며, 커서의 위치를 줄 맨 앞으로 이동시킨다.
- Line Feed : 특수문자 \n으로 표현되며, 커서를 한 줄 아래로 이동시킨다.

- C의 소스코드에서의 \n은 텍스트 파일상에서 \r\n과 같은 의미이다. 텍스트 모드에서는 이 변환이 일어나지만 2진 모드에서는 일어나지 않는다.

- fopen함수의 리턴값은 파일 포인터이다.


int fclose(FILE * stream);
- 파일을 닫는다. 정상적으로 동작하면 0을 리턴한다.



24-2 파일 입출력 함수

- 문자,문자열 입출력 함수를 파일 입출력에 사용한다. 사용하는 스트림을 파일 포인터로 쓸 뿐이다.

int fprintf(FILE* stream, const char* format, ....)
int fscanf(FILE* stream, const char* format, ...)
-형식 지정 입출력 함수를 사용할 수 있다.

- 파일 포인터 내에는 파일 위치 지시자가 존재하여 어디까지 읽었는지/썼는지 알 수 있다.


24-3 파일의 끝

- 파일의 끝에서 fgetc, fscanf는 -1을, fgets는 0을 리턴한다.

- 함수 fgetc의 리턴 값을 char형에 저장할 경우, 숫자 -1과 EOF를 구별할 수 없게 된다. 따라서 int형에 저장해야한다.

int feof(FILE *stream);
- 파일의 끝에 도달한 경우 0이 아닌 값을 리턴한다.


24-4 Random Access 파일 입출력

- 파일 위치 지시자를 임의의 위치로 이동시킬 수 있다.

int fseek(FILE *stream, long offset, int wherefrom);
- 성공했을 경우 0을 리턴한다.
- wherefrom의 값은 0/1/2를 가지고, 각각 맨 앞/현재/맨 뒤를 의미한다.


+ Recent posts