스트림
입/출력을 표현하는 데이터의 흐름. 바이트 단위로 생각한다.
- 장치가 무엇이건 입/출력은 연속된 바이트의 스트림. (장치 독립성)
- 입력 장치 → 버퍼 → cpu → 버퍼 → 출력 장치
- 이 과정을 통해 속도를 높일 수 있다.
표준 입출력 스트림
- stdin : 표준 입력 스트림
- stdout : 표준 출력 스트림
- stderr : 표준 오류 스트림
입출력 함수의 분류
스트림과 입출력 형식이 지정되었는지에 따라 분류 가능.
표준 스트림
getchar(),putchar(),gets_s(),puts()
일반 스트림
fgets(),fputs(),fprintf(),fscanf()
printf()와 scanf()
c
printf("10.3f", 1.122355);
// 10 : 필드폭. 출력 칸수 지정
// .3 : 소수 자릿수
scanf("%3d", &a)
// 3 : 필드폭을 의미하며 몇 칸씩 읽을지 확인
파일 입출력
파일
- 파일을 활용해 입출력을 할 수 있다.
- 파일 역시 스트림으로 취급. 연속된 바이트로 취급한다.
파일의 종류는 다음과 같다.
- 텍스트 파일 - 사람이 읽을 수 있는 파일
- 이진 파일 - 컴퓨터가 읽을 수 잇는 파일
파일처리
파일을 열어보자.
c
FILE *fp;
fp = fopen("test.txt", "w");
fclose(fp);
remove("sample.txt") // 성공 시 0, 실패 시 -1 반환
함수 fopen은 다음과 같은 매개변수를 가진다.
- 파일 이름 : 위의 “test.txt”
- 파일 모드
- r : 읽기 모드
- w : 쓰기모드. 기존 내용이 지우진다.
- a : 추가모드. 데이터가 끝에 추가 됨
이진 파일은 파일모드에 알파벳 b를 붙여서 연다.
텍스트 파일 읽기/쓰기
쓰기에 사용되는 함수
c
// 텍스트 쓰기
fgetc();
fgets();
// 기타 타입 쓰기
fscanf();
읽기에 사용되는 함수
c
// 텍스트 읽기
fputc();
fputs();
// 기타 타입 읽기
fprintf();
이진 파일 읽기/쓰기
c
fwrite(buffer, sizeof(int), SIZE, fp)
fread(buffer, sizeof(int), SIZE, fp)
/*
buffer : 메모리 블록의 크기
sizeof(int) : 항목의 크기
SIZE : 항목의 갯수
fp : file 포인터
*/
버퍼링
c
// 버퍼를 비워야 하는 경우
fflush(fp);
// 버퍼를 제거해야 하는 경우
setbuf(fp, NULL);
임의 접근
파일의 어느 위치에서든지 읽기/쓰기가 가능하게 만드는 방법
파일 포인터를 이동시켜서 데이터를 읽거나 쓴다.
c
// 위치 표시자 제어함수
fseek(fp, offset, origin)
/*
fp : 파일 포인터
offset : 기준 위치로부터 위치 표시자가 이동하는 거리
origin : 위치 표시자를 이동시키는 기준 위치
SEEK_SET -> 파일의 시작
SEEK_CUR -> 현재 위치
SEEK_END -> 파일의 끝
*/
// 위치 표시자의 현재위치
ftell(fp)
// 파일의 끝을 알아내는 함수
foef()