파일 입출력 -2

언어/C 2016. 3. 13. 23:53

파일의 개방 모드 (웬만하면 r,w,a 중에서 선택)

모드 

 스트림의 성격

일이 없을 경우 

 r

 읽기 가능

Error 

 w

 쓰기 가능

생성 

 a

 파일 끝에 덧붙여 쓰기 가능

 r+

 읽기/쓰기 가능

Error 

 w+

 읽기/쓰기 가능

생성 

 a+

 읽기/덧붙여 쓰기 가능

생성

1. 모드의 +는 읽기, 쓰기가 모두 가능한 스트림의 형성을 의미

2. 모드의 a는 쓰기(덧붙이기)가 가능한 스트림 형성


윈도우(\r\n), UNIX(\n), Mac(\r) 계열마다 파일 내 개행이 다르므로 형태 변환을 시켜줘야 한다.

형태 변환은 파일을 텍스트 모드(fopen사용시)로 개방하면 자동으로 됨.

C프로그램에서 \n을 파일에 저장하면 윈도우에서는 \r\n으로 변환되어 저장됨.


텍스트 모드의 파일 개방을 위해서는 fopen 함수의 두 번째 인자로 다음 중 하나 전달

rt, wt, at, r+t(rt+), w+t(wt+), a+t(at+)

바이너리 데이터를 저장하고 있는 파일의 경우 형태의 변환이 일어나면 안되므로 바이너리 모드로 파일 개방.

rb, wb, ab, r+b(rb+), w+b(wb+), a+b(ab+)

개방 모드에 아무것도 붙이지 않으면 디폴트 값은 텍스트 모드


feof함수 : 파일의 끝 확인할 때 사용

1
2
3
#include <stdio.h>
 
int feof(FILE * stream);


파일의 끝에 도달한 경우 0이 아닌 값 반환

한 파일에서 다른 파일로 복사를 할 때 완전하게 파일 끝까지 복사가 다 됐는지 확인할 때 사용

fgetc나 fgets함수가 EOF를 반환했다고 해서 무조건 파일의 끝에 도달했다고 판단할 수 없다. 오류가 발생하는 경우에도 EOF가 반환


바이너리 데이터의 입출력 fread, fwrite

1
2
3
#include <stdio.h>
 
size_t fread(void * buffer, size_t size, size_t count, FILE * stream);


 성공시 전달인자 count, 실패 또는 파일의 끝 도달 시 count보다 작은 값 반환


1
2
3
#include <stdio.h>
 
size_t fwrite(void * buffer, size_t size, size_t count, FILE * stream);


성공시 전달인자 count, 실패 시 count보다 작은 값 반환

만약 fwrite((void*)but, sizeof(int), 12, fp) 이렇게 함수가 정의돼 있다면 한 번 호출할 때마다 12만큼씩 데이터를 써라..라는 뜻.. 최소 12만큼 쓰는게 아니라 그냥 무조건 12만큼 써라 라는 뜻


서식에 따른 데이터 입출력 : fprintf, fscanf

printf와 scanf 함수와 비슷, 입출력 대상이 콘솔이 아닌 파일

ex) char name[10]="홍길동";

char sex='M';

int age = 24;

fprintf(fp, "%s %c %d", name, sex, age); fp는 파일 구조체 포인터


fscanf : 첫 번째 인자로 전달된 포인터가 지칭하는 파일로부터 데이터를 읽어들임   

ex) char name[10];

char sex ;

int age;

fscanf(fp, "%s %c %d", name, &sex, &age);

'언어 > C' 카테고리의 다른 글

메모리 관리와 메모리의 동적 할당  (0) 2016.03.20
파일 입출력 -3  (0) 2016.03.18
파일 입출력 -1  (0) 2016.03.10
구조체 기초 (열거형 enum)  (0) 2016.03.10
구조체 기초 (union, struct의 차이)  (0) 2016.03.07
Posted by 知彼知己百戰不殆
,