본문 바로가기
언어/C

[C] 파일 입출력

by merona99 2018. 12. 7.
반응형

파일 입출력


fopen 함수

호출 -> FILE 구조체 변수가 생성

생성된 FILE 구조체 변수에 파일에 대한 정보가 담김

FILE 구조체의 포인터 -> 파일을 가리키는 '지시자'의 역할


fclose 함수

파일을 닫는 함수


출력버퍼를 비운다는 것 : 출력버퍼에 저장된 데이터를 목적지로 전송

입력버퍼를 비운다는 것 : 입력버퍼에 저장된 데이터를 소멸


fflush 함수 = 출력버퍼를 비우는 함수 (파일 스트림에도 그대로 적용)


모드 

스트림의 성격 

파일이 없을경우 

읽기 가능 

에러 

쓰기 가능 

생성 

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

댓글