02_ 파일 입출력

Programming/C 2015. 5. 4. 02:44

* 텍스트 모드로 열어서 한문자씩 써 넣기

- fopen 함수의 두번째 인자를 "w"로 설정하면 텍스트 모로 파일을 저장한다.

 

* 텍스트 모드로 열어서 한 문자씩 읽어들이기

- fopen함수의 두번째 인자를 "r"로 설정하면 텍스트 모드로 파일을 읽어온다.

 

* 이진 모드로 열어서 한 문자씩 써 넣기

- 두번째 인자를 "wb"로 설정하면 이진 모드로 파일을 저장한다.

 

* 이진 모드로 열어서 한 문자씩 읽어들이기

- 두번째 인자를 "rb"로 설정하면 이진 모드로 파일을 읽어온다.

 

 

 

 

FILE구조체는 fopen( ) 이 지정한 파일을 읽어와서 각종 정보를 수록한다.

fopen( )이 실행되면 지정 파일을 읽어와서 메모리 상에 FILE형 구조체에 파일을 처리하는데 필요한 각종 정보를 채우고, FILE 구조체의 시작 주소를 반환한다.

 

파일 열기

- 파일을 사용하려면 fopen 함수를 이용해서 FILE 포인터의 주소를 할당해야 한다.

 

함수원형 : FILE *fopen( char *fname, char *mode );

반환값 : 파일 열기가 성공하면 FILE 포인터를 반환, 실패하면 NULL 값 반환

기능 : fname에 해당하는 파일을 mode에 따라 읽어온다.

 

 

 모드

처리내용 

파일 있을 경우 

파일 없을 경우 

"r" 

읽기(read) 

 정상처리

NULL 값 반환 

"w"

 쓰기(wirte)

이전 내용 덮어씀 

새 파일 생성 

"a" 

추가(append)  

이전 내용 뒤에 추가 

새 파일 생성 

"r+"

 읽고 씀(갱신)

정상처리 

NULL 값 반환 

"w+"

 읽고 씀(갱신)

이전 내용을 버림 

새 파일 생성 

"a+" 

추가를 위해 읽고 씀 

이전 내용 뒤에 추가 

새 파일 생성 

 

r+, w+, a+ 모드로 파일을 열면 해당 파일에 대해 읽고 쓰기가 동시에 가능해진다.

 

 

모드 

처리 내용 

"rb", "wb", "ab" 

Binary 파일 읽기, 쓰기, 추가 

"r+b" 혹은 "rb+" 

Binary파일 읽고 씀(갱신) 

"w+b" 혹은 "wb+" 

Binary 파일 읽고 씀(갱신) 

"a+b" 혹은 "ab+" 

Binary 파일에 추가를 위해 읽고 씀 

 

이진 모드는 텍스트 모드 문자뒤에 b를 추가한다.

 

파일 닫기

- 파일 사용이 끝나면 반드시 fclose( )를 이용해서 FILE포인터를 해제해 주어야한다.

 

함수원형 : int fclose( FILE *fp );

반환값 : 파일 닫기 성공하면 0을 반환, 실패하면 EOF 반환

기능 : fp가 가르키는 파일을 닫는다.

 

파일 핸들과 파일 버퍼

 

파일 핸들

- 파일 개방하면 내부적으로 파일에 0 이후 정수 값이 부여된다.

  각종 입출력함수들은 이 번호를 이용해서 여러 파일에 대한 입출력을 수행한다.

  이 정수를 파일 핸들(FILE HANDLE)이라고 한다.

  파일 핸들중에 0,1,2는 표준 입출력 파일에 할당되며, 나머지는 사용자가 파일을 열어 사용할 수

  있음...

 

파일 버퍼

- 파일에 입출력되는 자료를 임시적으로 보관하는 메모리를 가리킨다.

  파일 출력은 버퍼에 먼저 출력이 되며, 버퍼가 꽉 차게되면 비로소 실제 파일에 데이터가 출력이

  된다.    마찬가지로 입력할때도 버퍼가 꽉차면 읽어들인다.

- 파일 버퍼의 장점은 음.. 버퍼가 크면 디스크에 입출력하는 횟수가 줄어들게 된다는 것이다.

 

fflush( )함수는 원하는 시점에 버퍼에 있는 내용을 모두 다 비울 수 있다.

 

 

파일 입출력 함수

 

- fgetc( )

함수 원형 : int fgetc(FILE *fp);

반환 값 : 성공하면 읽어온 문자를 반환하고, 실패하거나 파일의 끝이면 EOF 반환한다.

기능 : 파일 fp로부터 한 문자 입력

 

- fputc( )

함수 원형 : int fputc(int ch, FILE *fp);

반환 값 : 성공하면 출력문자 ch를 반환하고, 에러가 발생하면 EOF 반환한다.

 

- fgets( )

함수 원형 : char fgets(char *str, int num, FILE *fp);

반환 값 : 성공하면 str을 반환하고, 실패하면 NULL을 반환

기능 : 파일 fp로부터 최대 num 바이트 만큼 문자열을 읽어서 str에 저장한다.

 

- fputs( )

함수 원형 : int fputs(const char *str, FILE *fp);

반환 값 : 성공하면 음수가 아닌 값이 반환되고, 실패하면 EOF가 반환된다.

기능 : 파일 fp에 문자열 str을 출력한다.

 

- fscanf( )

함수 원형 : int fscanf( FILE *fp, const char *format );

반환 값 : 성공하면 전송 바이트 수를 반환하고, 실패하면 EOF 반환

기능 : 파일 fp로부터 format 양식으로 입력받는다.

 

- fprintf( )

함수 원형 : int fprintf(FILE *fp, const char *format );

반환 값 : 성공하면 전송바이트 수 , 실패하면 음수 반환

기능 : 파일 fp에 format 양식으로 출력

 

- fread( )

함수 원형 : size_t fread(void *buffer, size_t size, size_t num, FILE *fp );

반환 값 : 읽어들인 객체 수 반환, 만약 0을 반환하면 읽은 것이 없거나 파일의 끝,or Error

기능 : 파일 fp에서 num개의 객체( 각 객체는 size바이트 크기)를 buffer가 가리키는 버퍼로

         읽어 들인다.

 

- fwirte( )

함수 원형 : size_t fwrite(void *buffer, size_t size, size_t num, FILE *fp);

반환 값 : 쓰인 객체의 수를 반환, 만약 에러 발생하면 num보다 작은 값이 반환

기능 : buffer가 가리키는 버퍼에서 num개의 객체(각 객체는 size  바이트 크기)를

         fp파일에 출력한다.

 

 

 

 

'Programming > C' 카테고리의 다른 글

포인터(기초)  (0) 2015.06.03
memset()  (0) 2015.05.16
01_파일 입출력  (0) 2015.05.04
01_기본 자료형  (0) 2015.05.02
memset , memcpy, memmove  (0) 2015.05.01
admin