본문 바로가기
C

파일 접근 모드

by 상레알 2009. 3. 31.
모드 의미 
 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