포털:고등학교/정보·통신 계열 전문 교과(2015)/프로그래밍/파일 입출력
컴퓨터의 기억장치
편집컴퓨터 기억 장치로는 주기억장치와 보조기억 장치로 나뉜다. 주기억장치는 속도가 빠르지만 전원이 꺼지면 내용이 사라지며 용량이 크지않다. 반면에 보조기억장치는 용량이 크다.
컴퓨터파일
편집파일은 보조 기록 장치에 저장된다. 컴퓨터 운영체제가 파일을 제어하는 방식은 복잡하다.모든 파일은 비트들의 집합체이며 맨마지막에는 끝을 알리는 지사자가 있다. 또한 파일은 대부분 내용이 많으므로 전체 내용을 변수로 할당할 수는 없고 파일의 처음위치를 포인터로 저장하는 방식으로 파일을 찾는다.
파일의 종류
편집파일에 종류로는 크로 사람의 눈으로 확인할 수 있는 텍스트파일과 확인할 수 없는 이진파일로 나뉜다. 텍스트파일은 아키드코드로 표현되며 모든컴퓨터에서 사용 할 수 있는 표준화된 체계로 저장된다. 이진파일은 컴퓨터는 이파일을 이용하여 읽고,쓰고,특정 작업을 수행한다. 이진데이터가 파일안에 직접기록되어 있어 파일을 윈도 메모장등으로 읽으면 숫자나 이상한 기호가 보인다. 대표적으로 동영상 파일,mp3 파일등이 있다.
파일열기
편집파일은 'FILE' 구조체를 이용하여 접근하고 포인터를 사용한다. FILE 구조체를 가리키는 포인터를 차일포인터(File Pointer)라고 한다.
파일열기의 예 |
---|
FILE *fp;
fp = fopen("test.txt", "w"); |
파일을 열기위한 모드는 세가지 종류가 있다. 읽기‘r',쓰기’w'.추가‘a’모드이다.
모드 | 설명 |
---|---|
r | •생성되어 있는 파일을 읽을 때 사용하는 모드이다.
•파일이 존재하지 않으면 오류 발생한다. |
w | •쓰기 모드이며, 파일이 없으면 파일을 만든다.
•파일이 이미 있으면 그 내용은 지워진다. |
a | •기존 파일에 내용을 추가한다.
•파일이 없으면 새로운 파일을 만든다. |
파일입출력
편집텍스트 파일을 읽고 쓰기위해 다양한 라이브러리 함수들이 존재한다. 문자단위로 읽기 위한 fgetc( )함수,문자열 단위로 읽기 위한 fgets( )함수,그리고 특정형식을 지정하여 읽기위한 fscanf( )함수 등 다양한 라이브러리 함수가 있다. fgetc( ),fputc( ),fgets( ), fputs( ) 함수는 파일에 텍스트를 쓸 때에는 문자또는 문자열로만 자료를 쓰고 읽는다.이는 정수형 갑을 읽거나 실수형값을 그대로 쓰는 것을 할 수 없다는 의미이다. 이때 문자열 이외에 다양한 갑을 읽고 쓰기위해서 사용하는 함수는 fscanf()와fprintf( )함수이다.
종류 | 입력함수 | 출력함수 |
---|---|---|
문자 | int fgetc(FILE *fp) | int fputc(int c,FILE *fp) |
문자열 | char *fgets(FILE *fp) | int fputs(const char *s,FILE *fp) |
서식(형식)입출력 | int fscanf(FILE *fp, ...) | int fprint(FILE *fp...) |
fgetc( ) 함수와 fputc( ) 함수를 이용하면 하나의 문자를 파일에서 읽고 쓸 수 있다.
int fgetc(FILE *fp)
int fputc(int c, FILE *fp)
형식 지정 파일 입출력
편집fgetc( ),fputc( ),fgets( ), fputs( ) 함수는 파일에 텍스트를 쓸 때에는 문자또는 문자열로만 자료를 쓰고 읽는다.이는 정수형 갑을 읽거나 실수형값을 그대로 쓰는 것을 할 수 없다는 의미이다. 이때 문자열 이외에 다양한 갑을 읽고 쓰기위해서 사용하는 함수는 fscanf()와fprintf( )함수이다.
#include <stdio.h> int main(void) { FILE *fp; fp = fopen("stringsample.txt", "w"); if( fp = = NULL ) { printf("파일 열기 실패\n"); return 1; } fputs("I love programming \n", fp); fclose(fp); return 0; }
이진파일 읽고 쓰기
편집동영상 파일,사진 파일등이 이진파일인데,이들을 읽고 쓰기 위해서는 fread()함수와 fwrite()함수를 사용한다. 이들 함수는 이진파일에서 데이터를 비트 단위로 읽는 것이 아니라 블록단위로 읽는다.
이진 파일 읽기 fread (buffer, sizeof(int), SIZE, fp);
이진 파일 쓰기 fwrite (buffer, sizeof(int), SIZE, fp);