파일 입출력
fopen 함수
호출 -> FILE 구조체 변수가 생성
생성된 FILE 구조체 변수에 파일에 대한 정보가 담김
FILE 구조체의 포인터 -> 파일을 가리키는 '지시자'의 역할
fclose 함수
파일을 닫는 함수
출력버퍼를 비운다는 것 : 출력버퍼에 저장된 데이터를 목적지로 전송
입력버퍼를 비운다는 것 : 입력버퍼에 저장된 데이터를 소멸
fflush 함수 = 출력버퍼를 비우는 함수 (파일 스트림에도 그대로 적용)
모드 |
스트림의 성격 |
파일이 없을경우 |
r |
읽기 가능 |
에러 |
w |
쓰기 가능 |
생성 |
a |
파일의 끝에 덧붙여 쓰기 가능 |
생성 |
r+ |
읽기/쓰기 가능 |
에러 |
w+ |
일기/쓰기 가능 |
생성 |
a+ |
읽기/덧붙여 쓰기 가능 |
생성 |
텍스트 파일 : 사람이 인식할 수 있는 문자를 담고 있는 파일
rt, wt, at, r+t, w+t, a+t를 사용
운영체제에 따른 변환이 일어남
바이너리 파일 : 컴퓨터가 인식할 수 있는 데이터를 담고 있는 파일
rb, wb, ab, r+b, w+b, a+b를 사용
아무런 변환도 발생x
<텍스트 데이터의 입출력>
int fputc(int c, FILE * stream); |
문자 출력 |
int fgetc(FILE * stream); |
문자 입력 |
int fputs(const char * s, FILE * stream); |
문자열 출력 |
char * fgets(char * s, int n, FILE * stream); |
문자열 입력 |
*fgets 함수를 호출시 읽어 들일 문자열의 끝에는 반드시 \n문자가 존재해야 함
feof 함수
파일의 끝에 도달한 경우 0이 아닌 값 반환
<바이너리 데이터의 입출력>
fread 함수
<정의>
int buf[10];
fread((void*)buf, sizeof(int), 12, fp); //fp=FILE 구조체 포인터
"sizeof(int) 크기의 데이터 12개를 fp로부터 읽어 들여서 배열 buf에 저장하라"
fwrite 함수
<정의>
int buf[7]={1, 2, 3, 4, 5, 6, 7};
fwrite((void*)buf, sizeof(int), 7, fp);
"sizeof(int) 크기의 데이터 7개를 buf로부터 읽어서 fp에 저장하라"
<텍스트 & 바이너리 데이터 입출력>
fprintf 함수
<정의>
fprintf(fp, "%s %c %d", name, sex, age); //fp는 FILE 구조체 포인터
fp가 지칭하는 파일로 출력
fscanf 함수
<정의>
fscanf(fp, "%s %c %d", name, &sex, &age); //name = 배열
fp가 지칭하는 파일을 읽음
fseek 함수
파일 위치 지시자
<정의>
int fseek(FILE * stream, long offset, int wherefrom);
<wherefrom에 전달될 수 있는 상수>
매개변수 wherefrom |
파일 위치 지시자 |
SEEK_SET(0) |
파일 맨 앞에서부터 이동을 시작 |
SEEK_CUR(1) |
현재 위치에서부터 이동을 시작 |
SEEK_END(2) |
파일 맨 끝에서부터 이동을 시작 |
ftell 함수
파일 위치 지시자의 위치를 파악
<정의>
long ftell(FILE * stream);
//보통 변수에 대입하고 원할때 다시 이전 위치로 돌아갈 때 유용한 듯
'언어 > C' 카테고리의 다른 글
[C] 매크로와 선행처리기 (0) | 2019.01.10 |
---|---|
[C] 메모리 관리 & 동적 할당 (0) | 2019.01.09 |
[C] 구조체 (0) | 2018.12.04 |
[C] 문자 & 문자열 관련 함수 (0) | 2018.11.15 |
[C] 도전프밍_3 (&난수) (0) | 2018.11.15 |
댓글