스트림(Stream)
- 프로그램과 파일 사이에 데이터가 이동할 수 있는 다리
- 1바이트(byte) 단위로 저장
- 파일이 필요한 이유: 하드디스크에 파일 형태로 저장해야 전원 꺼져도 데이터가 보존
파일
- C에서의 파일은 일려의 연속된 바이트
- 파일열기->파일 읽기와 쓰기->파일 닫기
fopen 함수
스트림 형성할때 호출하는 함수
#include <stdio.h>
FILE * fopen(const char * filename, const char * mode)
FILE<-구조체 변수
파일모드
"r" : 읽기모드
"w" : 쓰기모드, 이미 존재하면 기존 내용이 지워짐
"a" : 추가모드, update모드
"r+" : 읽기모드, 쓰기 모드로 전환 가능
"w+" : 쓰기모드, 읽기모드로 전환 가능
"a+: : 추가모드, 읽기모드로 전환 가능
"t" : 텍스트 파일 모드(문자열)
"b" : 이진 파일 모드
기본적인 파일모드
"r", "w", "a"
FILE 구조체
파일을 가리키는 참조자의 역할
fputc 사용
int main(void)
{
FILE * fp=fopen("data.txt", "wt");
if(fp==NULL)
{
puts("파일 오픈 실패!");
return -1;
}
fputc('A', fp);
fputc('B', fp);
fputc('C', fp);
fclose(fp);
return 0;
}
->파일에 ABC 쓰여있을 것!
fclose 해야하는 이유
스트림 형성 위해 시스템 자원을 할당
안닫아주면 자원 손실
메모리버퍼(여분의 메모리 확보)를 이용함
버퍼링 방식에 따라 뒤늦게 파일에 저장됨
문자 A,B가 버퍼에 존재하는 상태에서 전원이 꺼지면 저장이 안됨
fclose를 해야 버퍼를 파일에 저장시키고 버퍼가 비게된다.
fflush함수
스트림을 종료하지 않고 버퍼를 비우는 함수
문자의 입출력: fgetc, fputc
파일의 끝을 확인하는 방법: feof
정상적으로 끝에 도달해서 EOF에 반환된것이면 feof함수는 0이 아닌 값을 반환
오류가 발생했을 때 feof 함수는 0반환
문자열의 입력: fgets
ex) fgets(buf ,100, fp); // fp는 FILE 구조체 포인터
문자열의 출력: fputs
ex) fputs(but,fp);
서식에 따른 데이터 출력: fprintf
하나의 파일에 출력할 데이터가 텍스트 데이터와 바이너리 데이터 둘로 이뤄져 있는 ㄱㅇ우에 사용되는 함수
출력의 대상이 콘솔이 아닌 파일
ex) fprintf(fp, "%s %c %d", name, &sex, &age);
서식에 따른 데이터 입력: fscanf
텍스트 파일과 이진 파일의 차이점
텍스트파일 : 모든 데이터가 아스키코드로 변환되어 저장->표준화 되어있음,호환성 보장, 매핑 필요함, 이해하기 쉬움
이진 파일 : 컴퓨터에서 데이터를 표현하는 방식 그대로 저장->독립성 보장X, 좀 더 빠름
이진파일쓰기 : fwrite()함수
fwrite(buffer, sizeof(int), SIZE, fp);
이진파일 읽기: fread()
'Computer Science > C&C++' 카테고리의 다른 글
[C언어] malloc 동적할당을 이용한 배열 출력, 역으로 출력(포인터, 이중포인터)_더쉬운방법 (0) | 2021.06.13 |
---|---|
[C언어] 헤더파일 디자인과 활용 (0) | 2021.06.02 |
[C언어] malloc 동적할당을 이용한 배열 출력, 역으로 출력(포인터, 이중포인터) (0) | 2021.05.31 |
[C언어] 구조체 (Structure) (0) | 2021.05.26 |
[C언어] 문자 역으로 출력, strncat/strlen활용 (0) | 2021.05.26 |