모드 | 의미 |
r | 파일을 읽기 위해서 개방한다. 오로지 읽는 것만 가능하다. |
w | - 데이터를 쓰기위해 개방한다. 오로지 쓰는것만 가능하다. - 만약에 fopen 함수호출시 지정해 준 파일이 존재하지 않으면, 새로운 파일을 생성해서 데이터를 쓰게 한다 - 지정해 준 파일이 존재하면, 그 파일의 데이터를 지워 버리고 데이터를 쓰게 한다. |
a | - w 모드와 달리, 지정해 준 파일이 존재하면 데이터를 지우지 않고 파일의 끝에서부터 데이터를 추가한다. - 나머지 특징은 w 모드와 같다. |
r+ | - 파일을 읽고 쓰기 위해 개방한다. - 파일이 존재하지 않는 경우, 새로운 파일을 생성한다. - 파일이 존재하는 경우 파일의 데이터를 지우지는 않지만 원래 존재하는 파일의 데이터를 덮어 쓰게 된다. |
w+ | - r+ 모드와 달리, 지정해 준 파일이 존재하면 몯느 데이터를 지워버리고 데이터를 기록한다. - 나머지 특징은 r+와 같다. |
a+ | - r+ 모드와 달리, 지정해준 파일이 존재하면 파일의 끝에서 부터 데이터를 추가한다(나머지 특징은 r+와 같다). |
파일로부터 데이터를 입.출력하렴녀 제일 먼저 파일을 열어야 한다. 파일을 개방한다는 의미는 파일과 데이터를 주고 받을 수 있는 스트림을 생성한다는 뜻이다. 즉 다음에 소개되는 fopen 함수는 파일을 여는 함수라고도 표현을하고, 스트림을 생성하는 함수라고도 표현을 한다.
fopen 함수
#include<stdio.h>
FILE* fopen(const char * fielname,const char * mode)
성공시 해당 파일의 파일포인터,실패시 NULL 포인터 리턴
FILE* f = fopen("C:\\work\\test.dat","rt");
파일 종결
#include<stdio.h>
int fclose(FILE* stream)
종료가 오류없이 제대로 이뤄지면 0을 리턴
파일끝 확인
#include<stdio.h>
int feof(FILE* stream)
파일의끝에 도달한 경우 0이 아닌 값을 리턴
구조체 배열 한번에 저장
fwrite(구조체 배열 이름, sizeof(구조체 이름), 원소 갯수, 파일포인터);
구조체 배열 원소 하나씩 저장
fwrite(&구조체 배열 이름[n], sizeof(구조체 이름), 1, 파일포인터);
구조체 배열 한번에 읽기
fread(구조체 배열 이름, sizeof(구조체 이름), 원소 갯수, 파일포인터);f
구조체 배열 원소 하나씩 읽기
fread(&구조체 배열 이름[n], sizeof(구조체 이름), 1, 파일포인터);
Random Access 파일 입 º 출력
파일이 개방되면 파일 위치 지정자는 파일의 맨 앞부분을 가리킨다.
즉, 파일을 닫았다가 열면 맨 앞부분을 가리킨다.
파일 위치 지시자를 임의읭 위치로 이동 키시는 방법
#include <stdio.h>
int fseek(FILE * stream, long offset, int wherefrom)
성공시 0을 실패시 0이 아닌값을 리턴한다.
--위 함수를 이용하면 파일 위치 지시자를 원하는 위치에 놓을 수 있다.
"stream이 가리키는 파일의 파일 위치 지시자를 시작위치 wherefrom에서 부터 offset만큼 이동한다"
즉 stream은 파일 위치 지시자를 이동시킬 파일을 가리키며, offset은 이동할 거리를 의미하낟. 0보다 큰 수가 인자로 전달되면 파일의 뒤로 이동하고, 0보다 작은 수를 인자로 파일의 앞쪽으로 이동한다. 마지막으로 wherefrom은 이동할 기준을 지정한다.
만약에 wherefrom 이
파일 위치 지시자를 offset 만큼 이동하기 전에
SEEK_SET(0) 이라면
파일의 맨 앞으로 이동한다.
SEEK_CUR(1) 이라면
이동하지 않는다.
SEEK_END(2) 이라면
파일의 끝으로 이동한다.
fseek 함수의 세번째 인자로 SEEK_SET(SEEK_END)을 전달하면, 현재의 파일 위치 지시자의 위치에 상관없이 파일의 맨 앞(뒤)를 기준으로, fseek 함수의 두 번째 인자의 크기 만큼 이동한다.
또한 SEEK_CUR을 인자로 전달하면, SEEK_SET이나 SEEK_END와 달리 현재의 위치를 기준으로 이동하게 된다.
SEEK_END 입력시 이동하는 파일의 끝이란, 입력한 데이터의 끝을 의미하는 것이 아니라 입력한 데이터의 끝 그 다음을 의미하는 것이다. 실제로 파일에 입력한 데이터의 마지막에는 파일의 끝을 의미하는 EOF(end-of-file)가 삽입되어 잇다고 한다.
'C' 카테고리의 다른 글
파일 입출력 (0) | 2010.11.23 |
---|---|
재지정( redirection) 이란 (0) | 2010.11.23 |
포인터 개념 (0) | 2010.06.11 |
공백포함 문자 입력 (0) | 2009.05.07 |
구조체 포인터... (0) | 2009.04.07 |
라이브러리 (0) | 2009.02.24 |
C 라이브러리 제작? 사용 (0) | 2009.02.24 |
연산자 우선순위 (0) | 2009.02.16 |
조건부 컴파일 #if #elif #else #endif (0) | 2009.02.11 |
type redefinition 오류 해결법 (0) | 2009.02.11 |