1. 스트림(stream)
프로그램상에서 모니터와 키보드를 대상으로 데이터를 입출력 하기 위해 다리 역할을 하는 매개체
- stdin : 표준 입력 스트림, 키보드 대상으로 입력
- stdout : 표준 출력 스트림, 모니터 대상으로 출력
- stderr : 표준 에러 스트림, 모니터 대상으로 출력
콘슬 입출력을 위한 '입력 스트림'과 '출력 스트림'은
프로그램의 실행과 종료에 따라 자동적으로 생성,소멸되는 스트림이다.
2. 파일스트림 형성 (fopen)
FILE* fopen(const char* filename, const char* mode);
FILE* : 파일 정보가 담기는 FILE 구조체(파일)를 가리키는 포인터이다.
fopen 함수의 첫번째 인자는 스트림을 형성할 파일의 이름, 두번째 인자는 형성한 스트림의 종류 정보를 넣는다.
예)
FILE* fp = fopen("data.txt", "wt");
파일의 생성위치는 기본적으로 프로젝트 디렉토리이다.
다른 곳의 파일을 읽거나 생성하고 싶으면 경로를 쓰면 된다.
파일과 스트림이 형성되었을 때 '파일이 개방(오픈)되었다'라고 표현한다
3. 파일스트림 소멸 (fclose)
int fclose(FILE* stream); // 성공 시 0, 실패시 EOF 반환
파일을 닫는다'라고 표현
스트림을 소멸하는 첫번째 이유는
메모리 할당을 해제하여 자원손실을 막기 위함이고,
두번째 이유는 출력버퍼를 소멸하기 위함이다.
파일을 닫으면 출력버퍼에 저장되어 있던 데이터가 파일로 이동하면서 출력버퍼가 비워진다
파일이 저장되기 직전 컴퓨터의 전원이 꺼져도 데이터의 소멸을 막을 수 있다.
스트림을 종료하지 않고 버퍼만 비우고 싶을 떄 출력버퍼를 비우는 함수로는 fflush()가 있다.
fflush(FILE* stream);
4. 파일의 개방 모드
바이너리 파일이란 텍스트파일 외에 컴이 인식할 수 있는 파일을 말한다. (영상, 음원 등)
웬만하면 한 가지만 하는 모드들을 사용하자. +가 붙은 것들은 두 가지 작업이 가능하나, 변경할 때마다 메모리 버퍼를 비워줘야 하는 불편함이 있다.