C

파일 입출력

오군_ 2023. 5. 23. 14:44
반응형
파일 입출력

데이터 입출력을 위해서는 스트림이 형성되어야 한다.

 

아래의 코드처럼 FILE* fopen(파일의 경로 / 스트림의 종류(읽기용 쓰기용 / 바이너리 텍스트파일)mode)사용됩니다.

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

 

fopen 함수는 스트림의 생성 요청

fclose 함수는 스트림의 소멸 요청

fopen함수를 사용하면 fclose사용을 꼭 해야한다.

그렇지 않으면 메모리 누수 현상이 일어난다.

 

 

파일의 개방 모드

아래는 스트림의 모드이다.

모드(mode) 스트림의 성격 파일이 없을때
r 읽기 가능 에러
w 쓰기 가능 생성
a 파일의 끝에 덧붙여 쓰기 가능 생성
r+ 읽기 / 쓰기 가능 에러
w+ 읽기 / 쓰기 가능 생성
a+ 읽기 / 덧붙여 쓰기 가능 생성

아래와 같이 조합하여 스트림의 형태를 결정할 수 있다.

FILE* file1 = fopen("text.txt", "wt");	// 텍스트 쓰기 모드 스트림생성
FILE* file2 = fopen("text.txt", "rt");	// 텍스트 읽기 모드 스트림생성
FILE* file3 = fopen("text.txt", "wb");	// 바이너리 쓰기 모드 스트림생성
FILE* file3 = fopen("text.txt", "rb");	// 바이너리 읽기 모드 스트림생성

 

 

 

파일 입출력 함수들

아래의 함수들은 FILE구조체의 포인터를 인자로 전달하여 파일을

대상으로 입출력을 할 수 있는 함수들이다.

int fputc(int c, FILE* stream);			// 문자 출력
int fgetc(FILE* stream);			// 문자 입력
int fputs(const char* s, FILE* stream);		// 문자열 출력
char* fgets(char* s, int n, FILE* stream);	// 문자열 입력

 

 

feof : 파일의 끝을 확인하는 함수

파일의 끝에 도달한 경우 0이 아닌 값 반환

파일 입력함수는 오류가 발생하는 경우에도 EOF를 반환한다.

따라서 feof는 EOF의 반환원일을 확인하기 위한 함수이다.

 

0이 아니면 파일의 끝에 도달한 것이고, 그 외에 경우는 오류가 발생한 경우이다.

int feof(FILE* stream);

 

 

 

fread : 바이너리 데이터 읽기

바이너리 데이터를 파일에서 읽을 때 사용되는 함수

성공 시 전달인자 count, 실패 또는 파일의 끝 도달 시 count보다 작은 값 반환

size_t fread(void* buffer, size_t size, size_t count, FILE* stream);

 

 

fwrite : 바이너리 데이터 쓰기

바이너리 데이터를 파일에 쓸 때 사용되는 함수

성공 시 전달인자 count, 실패 시 count보다 작은 값 반환

size_t fwrite(const void* buffer, size_t size, size_t count, FILE* stream);

 

fprintf

파일에 데이터를 쓰는 용도의 함수입니다.

함수원형은 아래의 코드와 같다.

성공적으로 데이터를 쓴 경우 문자 수를 반환하며, 실패한 경우

음수 값을 반환합니다.

int fprintf(FILE* stream, const char* format, ...);

 

 

fscanf

파일에서 데이터를 읽어오는 용도의 함수입니다.

함수원형은 아래의 코드와 같다.

성공적으로 데이터를 읽은 경우 문자 수를 반환하며, 실패한 경우

EOF(End-Of-File)를 반환합니다.

int fscanf(FILE* stream, const char* format, ...);

 

 

 

Text / Binary 의 잡합체인 구조체 변수 입출력

fprintf()함수 와 fscanf()함수를 사용하여 구조체 변수를

파일에 쓰거나 파일에서 읽어올 수 있다.

 

아래의 스트림 모드로 구조체 변수를 Text / Binary형태로 입출력 할 수 있다.

  • wt : 텍스트 쓰기
  • rt : 텍스트 읽기
  • wb : 바이너리 쓰기
  • rb : 바이너리 읽기

 

 

파일 위치 지시자

파일 위치 지시자는 파일 내에서 현재 위치를 나타내는 값입니다.

파일 위치 지시자는 파일 입출력 함수 fseek(), ftell()와 함께 사용됩니다.

 

 

 

fseek : 파일 위치 지시자 이동

파일 위치 지시자의 참조 위치를 변경시킨다.

성공적으로 파일 위치 지시자를 이동시키면 0을 반환하고,

실패하면 EOF(End-Of-File)를 반환합니다.

  • SEEK_SET : 파일의 처음 위치
  • SEEK_END : 파일의 마지막 위치
  • SEEK_CUR : 파일의 현재 위치
int fseek(FILE* stream, long offset, int whereFrom);	// 파일 위치 지시자의 참조 위치를 변경

 

 

ftell : 현재 파일 위치 지시자의 위치

현재 파일 위치자의 위치 정보를 반환해준다.

파일 위치 지시자의 현재 위치를 나타내는 값으로,

long타입으로 반환됩니다. 실패하면 -1을 반환합니다.

long ftell(FILE* stream);	// 파일 위치 지시자의 취지 정보 반환

 

반응형

 

반응형