파일 입 출력
#include <stdio.h> FILE* fopen(const char * filename, const char *mode) |
○ filename
개방하고자 하는 파일의 경로명과 파일명을 동시에 지니는 문자열
예) filename = “c:\\work\\test.dat” (c:\\work 는 경로명 test.dat 은 파일명)
*특수문자 역슬래시(\)와 구분하기 위해 (\\) 를 두개 써준다.
○ mode
파일의 특징 및 용도를 결정짓는다.
파일 개방 모드=파일접근모드+데이터 입 출력모드
파일 접근 모드
모드 | 의미 |
r | - 파일의 읽기 위해서 개방한다. 오로지 읽는 것만 가능하다. |
w | - 데이터를 쓰기 위해 개방한다. 쓰는 것만 가능 - 만약에 fopen함수 호출 시 지정해 준 파일이 존재하지 않으면, 새로운 파일을 생성해서 데이터를 쓰게 된다. - 지정해 준 파일이 존재하면, 그 파일의 데이터를 지워버리고 데이터를 쓰게 된다. |
a | - w 모드와 달리, 지정해 준 파일이 존재하면 데이터를 지우지 않고 파일의 끝에서부터 데이터를 추가한다. - 너머지 특징은 w와 같다. |
r+ | - 파일을 읽고 쓰기 위해 개방한다. - 파일이 존재하지 않는 경우, 새로운 파일을 생성한다. - 파일이 존재하는 경우, 파일의 데이터를 지우지 않지만 원래 존재하는 파일의 데이터를 덮어쓰게 된다. |
w+ | - r+ 모드와 달리, 지정해 준 파일이 존재하면 모든 데이터를 지워버리고 데이터를 기록한다. - 나머지 특징은 r+와 같다. |
a+ | - r+ 모드와 달리, 지정해 준 파일이 존재하면 파일의 끝에서부터 데이터를 추가한다. (나머지 특징은 r+와 같다.) |
데이터 입출력 모드
모드 | 의미 |
t | 텍스트 모드 (text mode) |
b | 2진 모드(binary mode) |
◊ CR(Carriage Return)
CR은 특수문자 \r로 표현되며, 커서의 위치를 그 중 맨 앞으로 이동하라는 의미
◊ LF(Line Feed)
LF는 \n로 표현 되며, 커서의 위치를 그 다음 줄로 이동하라는 의미이다.
“ABC \r DEF” -> 출력 | D | E | F | |||||
“ABC \n DEF” -> 출력 | A | B | C | |||||
D | E | F | ||||||
“ABC \r\n DEF” -> 출력 | A | B | C | |||||
D | E | F |
◊ 2진 모드와 텍스트 모드
- 2진 모드: 프로그램상에서 파일로 데이터를 쓰거나 읽어 들이는 경우에 아무런 데이터의 변환도 일으키지 않는 데이터 입출력 모드를 의미한다.
- 텍스트 모드 : 프로그램상에서 파일로 데이터를 쓰거나 읽어 들이는 경우에 데이터 변환이 일어나는 입출력 모드를 의미한다.
(printf와 같은 표준 출력 함수들은 텍스트 모드로 출력하기 때문에 C에서 \n을 입력할 경우\r\n으로 변환되어 출력된다.)
◊FILE 구조체의 포인터 (파일 포인터)
- fopen 함수의 리턴 값은 FILE이라는 구조체 변수의 포인터이다. FILE 구조체 변수는 개방한 파일에 대한 여러 가지 정보를 지니는 변수이다. 개방한 파일이 무엇인지, 파일 내에 존재하는 데이터를 어디까지 읽어 들였는지, 파일의 끝에 도달했는지에 대한 정보들을 FILE구조체 변수는 지닌다.
◊ 파일 입출력 함수
- puts함수는 스트림이 stdout으로 미리 정해져 있지만 fputs함수는 스트림을 지정할 수 있다. 파일 포인터는 스트림을 의미한다.
스트림 기능 | 키보드/모니터 | 선택(키보드/모니터,파일) |
문자 출력 | int putchar(int c) | int fputc(int c, FILE* stream) |
문자 입력 | int getchar(void) | int fgetc(FILE* stream) |
문자열 출력 | int puts(const char* s) | int puts(const char* s, FILE* stream) |
문자열 입력 | char* gets(char* s) | char* fgets(char* s, int n, FILE* stream) |
형식 지정 출력 | int printf(const* format,...) | int fprintf(FILE* stream, const char* format, …) |
형식 지정 입력 | int scanf( Const char* format,…) | int fscanf(FILE* stream, const char* format,..) |
◊ feof 함수
#include <stdio.h> int feof(FILE *stream) |
호출 시 전달되는 파일 포인터가 가리키는 파일이 끝에 도달 할 경우 0이 아닌 값을 리턴한다.
◊ fseek 함수
#incldue <stdio.h> int fseek(FILE *stream, long offset, int wherefrom) |
파일 위치 지시자를 원하는 위치로 이동시키는 함수이다.
Stream이 가리키는 파일의 파일 위치 지시자를 시작위치 wherefrom에서부터 offset 만큼 이동한다.
wherefrom전달인자
whrerfrom | 파일 위치 지시자를 offset 만큼 이동하기 전 |
SEEK_SET(0) | 파일의 맨 앞으로 이동한다. |
SEEK_CUR(1) | 현재 위치 |
SEEK_END(2) | 파일의 맨 끝으로 이동한다. |
'Development > C/C++' 카테고리의 다른 글
[thread 함수와 예제] (0) | 2011.11.22 |
---|---|
[소켓옵션 설정 setsockopt() _winsock] (0) | 2011.11.10 |
[general error c101008a: Failed to save the updated manifest to the file 오류해결법] (0) | 2011.11.03 |
[winsock을 이용한 파일 보내기(C++) 소스] (0) | 2011.11.02 |
[화면 처리 함수(gotoxy, wherex, wherey)] (0) | 2011.11.02 |