【기 능】 파일을 open한다.
【소 속】 stdio.h
#include <stdio.h>
【서 식】
FILE *fopen(const char *filename, const char *mode);
【설 명】
파일명(filename) 으로 지정된 파일을 지정 모드(mode)로 오픈한다.
【인 수】
const char *filename : 오픈하는 파일명
const char *mode : 오픈 모드
【모 드】
파일 종류 | 동작 | 파일이 존재할 때 | 파일이 존재하지 않을 때 | |
"r" | 텍스트 | 읽기 전용 | 정상 | 에러(NULL 포인터) |
"w" | 텍스트 | 쓰기 전용 | 초기화(내용 삭제) | 신규작성 |
"a" | 텍스트 | 추가 쓰기 전용 | 내용 보존(마지막에 추가) | 신규작성 |
"r+" | 텍스트 | 읽기쓰기 | 정상 | 에러(NULL 포인터) |
"w+" | 텍스트 | 쓰기 읽기 | 초기화(내용 삭제) | 신규작성 |
"a+" | 텍스트 | 추가 쓰기, 읽기 | 내용 보존(마지막에 추가) | 신규작성 |
"rb" | 바이너리 | 읽기 전용 | 정상 | 에러(NULL 포인터) |
"wb" | 바이너리 | 쓰기 전용 | 초기화(내용 삭제) | 신규작성 |
☆ 텍스트 모드
쓰기 : 줄바꾸기 문자'\n'(0x0a) ⇒ '\r' / '\n'(0x0d / 0x0a)로 변환
읽기 : '\r' / '\n'(0x0d / 0x0a) ⇒ 줄바꾸기 문자'\n'(0x0a) 로 변환
0x1a : EOF(파일 마지막)로 인식
☆ 바이너리 모드
읽기/쓰기 : 줄바꾸기 문자의 변환없음
0x1a : EOF(파일 마지막)로 인식하지 않음
【리턴 값】
성공 : 파일 포인터
실패 : NULL 포인터
【사용 예】
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
FILE *fp;
char readbuf[100];
int iRetn = 0;
/* 읽기 모드로 파일을 오픈한다 */
if( (fp = fopen("test_data.txt", "a+") ) == NULL ) {
printf("파일 오픈 에러\n");
exit(EXIT_FAILURE);
}
else{
printf("파일 오픈 성공\n");
}
/* 오픈한 파일에 한 줄의 문자열을 출력한다 */
iRetn = fputs("file open with mode a\n", fp);
if(iRetn == EOF){
printf("파일 쓰기 실패\n");
}
/* 오픈한 파일의 내용을 읽어서 문자열을 출력한다 */
while(iRetn != EOF){
iRetn = fgets(readbuf, sizeof(strBuff), fp);
if(iRetn == EOF){
printf("파일 읽기 실패\n");
}
else{
printf("읽은 문자열 = %s\n", readbuf);
}
}
/* 오픈한 파일을 닫는다(close) */
iRetn = fclose(fp);
if(iRetn != 0){
printf("파일 클로즈 에러\n");
}
else{
printf("파일 클로즈 성공\n");
}
return 0;
}
【결 과】
파일 오픈 성공
파일 쓰기 성공
파일 클로즈 성공
【파일 내용】
ABCDE12345
file open with mode a