파일 입출력
1. 파일 입출력 절차
- 어떤 파일에 입출력 할지에 대한 명시 필요
- 필요한 자료형 및 변수는 <stdio.h>에 선언
(1) FILE 포인터 선언: FILE *fp
(2) 파일 열기: fopen()
(3) 사용: fscanf(), fprintf()
(4) 파일 닫기: fclose()
1) 파일 포인터 선언
- FILE은 파일 입출력 시 필요한 정보를 담은 구조체
- 파일 입출력 시 각 파일마다 하나의 FILE 포인터를 연결하여 사용
- 선언 형식: FILE *fp;
<표준 스트림>
- 표준 입출력 장치도 논리적으로 파일로 간주하여 처리
- stdin: 표준 입력 스트림
- stdout: 표준 출력 스트림
- stderr: 표준 오류 출력 스트림
2) 파일 열기
- fopen() 함수
- 해당 파일에 대한 연결 요청을 위미
- 해당 파일을 사용할 수 있도록 파일 표인터를 반환
- fopen() 함수 호출 시, 이 함수의 반환 값을 반드시 검사하여 파일이 정상적으로 열렸는지 확인해야 함
<fopen() 함수>
- 함수 원형: FILE *fopen(char *filename, char *filemode)
- 함수 인자: filename(연결할 파일 이름), filemode(파일 접근 방식에 따른 모드)
- 반환값: 파일열기 성공 >> FILE 포인터 반환 / 파일열기 실패 >> NULL 반환
<함수 인자 filename>
- 해당 파일의 위치와 이름 명시
- 위치는 상대경로 또는 절대경로 표현
- 절대경로: 드라이브 명부터 해당 파일이 있는 위치까지의 전체 경로
- 상대경로: 현재 작업 폴더를 기준으로 해당 파일이 있는 위치까지의 경로
<함수 인자 filemode>
(1) 'r'
- 읽기 전용
- 파일을 열 수 없는 경우 >> NULL 반환
(2) 'w'
- 쓰기 전용
- 파일이 없는 경우 >> 새로 빈 파일을 생성
- 같은 이름의 파일이 존재하는 경우 >> 해당 파일의 내용 삭제하고 새로 파일 생성
(3) 'a'
- 추가 전용
- 파일이 없는 경우 >> 새로 빈 파일을 생성
- 같은 이름의 파일이 존재하는 경우 >> 기존 파일의 마지막 부분에 내용을 추가
3) 파일 입출력 함수
- 문자 단위 입출력: fgetc(), fputc()
- 문자열 단위 입출력: fgets(), fputs()
- 지정 형식 입출력: fscanf(), fprintf()
- 블록 입출력: fread(), fwrite()
4) 파일 닫기
- fclose() 함수
- 현재 열린 파일과 FILE 포인터와의 연결 해제
<fclose() 함수>
- 함수 원형: int fclose(FILE *fp)
- 함수 인자: 파일 포인터 변수명 fp
- 반환 값: 파일 닫기에 성공 >> 0 반환 / 파일 닫기에 실패 >> EOF 반환
2. 텍스트 파일 입출력
1) 지정형식 파일 입력 함수: fscanf()
- 데이터를 지정한 형식으로 데이터를 읽어오는 함수
- 여러 형태의 자료들(정수, 문자, 문자열 등) 을 한번에 입력 가능
- 함수의 첫번째 인자로 파일 포인터가 사용된다는 것을 제외하고는 scanf() 함수와 사용법 동일
- 첫번째 인자를 stdin으로 지정하면, 표준 입력으로 부터 입력
- 첫번째 인자를 FILE 포인터로 지정하면, 해당 파일로부터 데이터 입력받음
<fscanf() 함수>
- 함수 원형: int fscanf(FILE *fp, char *format, ...);
- 함수 인자: fp(파일 포인터 변수명), format(형식 제어 문자열), ...(입력하고자 하는 변수 리스트)
- 반환 값: 성공 >> 입력한 변수의 개수를 반환 // 실패 >> EOF 반환
2) 지정형식 파일 출력 함수: fprintf()
- 지정한 형식에 맞추어 파일로 출력
- 함수의 첫번째 인자로 파일 포인터가 사용된다는 것을 제외하고는 printf() 함수와 사용법 동일
- 첫번째 인자를 stdout으로 지정하면, 표준 입력으로 부터 출력
- 첫번째 인자를 FILE 포인터로 지정하면, 해당 파일로부터 데이터 출력
<fprintf() 함수>
- 함수 원형: int fprintf(FILE *fp, char *format, ...);
- 함수 인자: fp(파일 포인터 변수명), format(형식 제어 문자열), ...(출력하고자 하는 변수 리스트)
- 반환 값: 성공 >> 출력한 데이터의 바이트 수 // 실패 >> 음수 반환
3) 문자 단위 파일 입출력 함수: fgetc(), fputc()
- 문자 한개를 파일로부터 읽고 쓰기 위한 함수
<fgetc() 함수>
- 함수 원형: int fgetc(FILE *fp);
- 함수 인자: 파일 포인터 변수명 fp
- 반환 값: 성공 >> 읽은 문자 반환 // 실패 >> EOF 반환
<fputc() 함수>
- 함수 원형: int fputc(int ch, FILE *fp);
- 함수 인자: ch(출력하고자 하는 문자 상수 또는 변수), fp(파일 포인터 변수명)
- 반환 값: 성공 >> 출력하는 문자 ch 반환 // 실패 >> EOF 반환
4) 문자열 단위의 파일 입력 함수: fgets()
- 파일에 쓰여진 문자열을 읽는데 사용하는 함수
- 파일 fp로부터 문자를 읽어서 s가 가리키는 곳에 저장
- n-1개의 문자를 읽거나, 개행문자를 만나거나, 파일에 끝에 도달하면 종료
- 문자열 마지막에 널 문자 추가
- 공백이나 탭 문자를 만나도 계속 읽음
- 개행문자도 문자열에 저장
<fgets() 함수>
- 함수 원형: char *fgets(char *s, int n, FILE *fp);
- 함수 인자: s(파일로부터 읽은 문자열을 저장할 포인터),
n(저장할 문자의 최대개수, 널문자 포함), fp(파일 포인터 변수명)
- 반환 값: 성공 >> 문자열 s 반환 // 파일의 끝에 도달 or 실패 >> NULL 반환
5) 문자열 단위의 파일 출력 함수: fputs()
- 파일에 문자열을 출력하는 함수
- 문자열의 끝을 나타내는 널 문자는 파일에 쓰지 않으며, 그 뒤에 개행문자도 자동으로 들어가지 않음
<fputs() 함수>
- 함수 원형: int fputs(char *str, FILE *fp);
- 함수 인자: str(출력하고자 하는 문자열), fp(파일 포인터 변수명)
- 반환 값: 성공 >> 출력한 바이트 수 반환 // 실패 or 오류발생 >> EOF 반환
6) 파일의 끝 확인하기: feof()
- 파일의 끝까지 데이터를 모두 읽어들인 상태인지를 확인
- EOF(End Of File): 파일의 끝을 표현하기 위해 정의해놓은 상수 -1
- EOF도 파일의 내용으로 간주되므로 주의
<feof() 함수>
- 함수 원형: int feof(FILE *fp);
- 함수 인자: 파일 포인터 변수명 fp
- 반환 값: 파일의 끝이면 >> 0이 아닌 값 반환 // 파일의 끝이 아니면 >> 0을 반환
'프로그래밍 언어 개념정리 > C언어 개념 정리' 카테고리의 다른 글
C언어 개념 정리: 연산자/함수/자료형 심화 (0) | 2024.11.21 |
---|---|
C언어 개념 정리: 동적 할당 (0) | 2024.11.18 |
C언어 개념 정리: 구조체 (0) | 2024.11.15 |
C언어 개념 정리: 문자열 (1) | 2024.11.13 |
C언어 개념 정리: 포인터 (0) | 2024.11.12 |