스트림(stream) : 입력과 출력 데이터 바이트들의 흐름 (stdio.h)
※ 표준 입출력 스트림
stdin : 표준 입력 스트림(키보드)
stdout : 표준 출력 스트림(모니터 화면)
stderr : 표준 에러 스트림(모니터 화면)
파일
키보드를 통해 순간순간 입력받아 쓰는 게 아니라 보존/저장된 데이터를 사용하기 위해 파일이 필요하다.
텍스트 파일: 사람이 읽을 수 있음
이진 파일(이미지, 실행파일): 사람이 읽을 수 없음
파일 처리
파일 열기 -> 파일 읽기, 처리, 쓰기, 저장 -> 파일 닫기
파일 포인터 선언
파일을 카리킬 포인터 변수 선언
FILE *fp; // 하나의 스트림으로 파일을 저장
FILE *fp1, *fp2;
파일 열기 : fopen (return 타입: FILE)
FILE *fopen(const char *filename, const char *mode)
파일 열기 성공 시 FILE 구조체 변수의 주소값, 실패 시 NULL 포인터 반환
FILE *fp1, *fp2; // 입력스트림, 출력 스트림
fp1 = fopen("hello.text","rt"); // fp1은 입력 파일 포인터
if (fp1 == NULL){
printf("파일 오픈 에러... !!!\n");
return 1; // 비정상 종료, 정상적으로 종료, 0을 반환
} // 이 코드는 꼭 쓸 필요는 없지만, 잘 못 열릴 경우도 있으므로 쓰는 것이 나음
f2p = fopen("output.txt", "wt") // "output.txt" 없어도 됨, 없으면 새로 만들어짐
if (fp2 == NULL){
printf("파일 출력 에러... !!!\n");
return 1; // 비정상 종료, 정상적으로 종료, 0을 반환
}
파일 읽기, 쓰기
입력 파일 포인터에 stdin쓰면 키보드에서 입력받음
출력 파일 포인터에 stdout쓰면 화면에서 출력
1. 문자 단위 파일 입출력
ch = fgetc(fp1); // stdio.h
ch = getc(fp1); // stdio.h
fputc(ch, fp2);
putc(ch, fp2);
-파일의 끝까지 읽어서 쓰기
// fp1, fp2를 open
ch = getc(fp1)
while(!feof(fp1)){
putc(ch,fp2);
ch = getc(fp1);
}
while ( (ch!=getc(fp1)) != EOF )
putc(ch, fp2);
2. 문자열 단위 파일 입출력
입력
fgets(str, size, fp); // \0을 포함해서 size크기만큼 엔터가 나올 때까지 str에 넣음 단, 엔터까지 str에 넣음
출력
fputs(str, fp2); // str이 가리키는 곳에서 \0이 가리키는 곳까지
char buf[30];
fgets(buf, sizeof(buf), fp1);
fputs(buf, fp2); // buf에 있는 내용을 fp2에 출력하겠습니다.
fgets(buf, sizeof(buf), fp1);
데이터 타입을 지정한 입출력 (출력하는 형식을 지정할 수 있음)
입력
fscanf(fp, ...);
-> fscanf(fp1, "%d", &num);
출력
fprintf(fp, ....);
-> fprintf(fp1, "%d", num);
fscanf(fp1, "%d", &score);
while (!feof(fp1)) {
fprintf(fp1, "%d\n", score + 9);
fscanf(fp1, "%d", &score);
}
파일 닫기
fclose
int fclose(FILE *stream); // 닫기도 리턴타입이 있음
파일 임의 접근
fseek
파일 위치를 임의적으로 접근 할 떄 사용
파일 처음 이동
fseek(fp1,
'-' 카테고리의 다른 글
7일간 진행했던 교내 해커톤 후기 (0) | 2022.03.05 |
---|---|
document 객체 (0) | 2021.12.12 |
c언어 구조체 고급 (0) | 2021.11.22 |
구조체 (0) | 2021.11.16 |
자바스크립트 - 연산자, 조건문 (0) | 2021.11.12 |
댓글