목차
c언어에서의 고수준 파일 입출력
1 파일 입출력의 개요
2 고수준 화일 입출력
2.1 fopen() 함수
2.2 fclose() 함수
2.3 fgetc() 함수
2.4 fputc() 함수
2.5 fscanf() 함수
2.6 fprintf() 함수
2.7 fgets() 함수
2.8 fprts() 함수
2.9 fread(), fwrite() 함수
2.10 fseek() 함수
2.11 ftell() 함수
3 저수준 화일 입출력
3.1 open() 함수
3.2 close() 함수
3.3 crest() 함수
3.4 write() 함수
3.5 read() 함수
3.6 lseek() 함수
1 파일 입출력의 개요
2 고수준 화일 입출력
2.1 fopen() 함수
2.2 fclose() 함수
2.3 fgetc() 함수
2.4 fputc() 함수
2.5 fscanf() 함수
2.6 fprintf() 함수
2.7 fgets() 함수
2.8 fprts() 함수
2.9 fread(), fwrite() 함수
2.10 fseek() 함수
2.11 ftell() 함수
3 저수준 화일 입출력
3.1 open() 함수
3.2 close() 함수
3.3 crest() 함수
3.4 write() 함수
3.5 read() 함수
3.6 lseek() 함수
본문내용
"rb");
if (fp == NULL)
{
printf("file not found\n");
exit(1);
}
fseek(fp, 30L, SEEK_SET);
c = fgetc(fp);
printf("11-5.c의 30번째 문자는 :
fclose(fp);
}
2.11 ftell() 함수
파일의 읽기/쓰기를 하고 있는 현재 위치를 아려주는 함수이다.
[ 형 식 ]
long ftell(fp);
FILE *fp; <---- 파일 포인터
ftell()함수는 파일 포인터에 대한 하일의 현재 위치를 함수값으로 리턴한다.
[ 예제 11-6.C ]
#include
#include
main()
{
FILE *fp;
fp = fopen("11-6.c","rb");
if (fp == NULL)
{
printf("file not found\n");
exit(1);
}
fseek(fp, 0L, SEEK_SET);
printf("11-6.c의 파일의 크기는 :
fclose(fp);
}
3 저수준 화일 입출력
3.1 open() 함수
파일을 개방(open)하는 함수이다.
[ 형 식 ]
int open(filename, mode[, access]);
char *filename; <----파일명
int mode; <---개방 모드
int access; <---- 개방 허가 모드
파일 개방 모드는 아래의 표와 같다.
모드종류
기능
O_APPEND
쓰기(write) 연산에 사용되며, 파일 포인터를 파일의 끝으로 위치 시킨다.
O_CREAT
새로운 파일을 생성하고 개방한다.
O_EXCL
지정된 파일이 이미 존재하면 오류값을 리턴한다.
O_RDONLY
읽기만을 위해 파일을 개방한다.
O_RDWR
읽고 쓰기 위해서 파일을 개방한다.
O_TRUNC
현존하는 파일을 길이 0으로 절삭하고 개방한다. 기존의 파일 내용이 모두 파괴 된다.
O_WRONLY
쓰기만을 위해 모드로 파일을 개방한다.
O_BINARY
이진 파일 모드로 파일을 개방한다.
O_TEXT
텍스트 파일 모드로 파일을 개방한다.
3.2 close() 함수
개방(open)되어 있는 파일을 파일 연산이 끝나면 반드시 페쇄(close) 해야 하는데 여기에 사용되는 함수가 close()이다.
close()함수를 실행하면 운영 체제의 내부 버퍼 안에 있는 정보가 파일에 기록된다. 만일 close()함수가 실패하면 지금까지 작업한 데이터의 손실이 발생할 수 있다.
[ 형 식 ]
int close(fhandle);
int fhandle; <---- 파일 핸들러
[ 보기 ]
# include
# include
main()
{
int fhandle;
fhandle = open("test.txt", O_RDNLY):
·······
fclose(fhandle0;
}
3.3 creat() 함수
새로운 파일 생성과 동시에 쓰기 연산을 하기 위해 사용하는 함수이다.
[ 형 식 ]
int creat(filename, access);
char *filename; <---- 화일명
int access; <---- 접근 허가 모드
변수 access는 접근 방식과 파일이 이진 파일인지 텍스트 파일인지를 구별하기 위해서 사용한다. 특히 unix 시스템에는 파일보호 (protection)과 관련이 있다.
DOS의 허용 모드는 다음과 같다.
모드종류
기능
S_IWRITE
쓰 기 허 용
S_IREAD
읽 기 허 용
S_IREAD|S_IWRITE
읽기/스기 허용
[ 보기 ]
# include
# include
main()
{
int fhandle;
fhandle = creat("test.txt", S_IREAD|S_IWRITE):
·······
fclose(fhandle);
}
3.4 write() 함수
쓰기 모드로 파일을 개방한 후에 버퍼에 있는 데이터를 디스크에 기록하는 함수이다.
기록에 실패할 경우 함수에 -1을 리턴한다.
[ 형 식 ]
int write(fhandle, buffer, size);
int *fhandle; <---- 파일 핸들러
char *buffer; <---- 디스크에 기록할 데이터가 들어있는 버퍼
int size; <---- 기록할 바이트 수
3.5 read() 함수
읽기 모드로 파일을 개방한 후 디스크에 들어있는 데이터를 지정된 버퍼로 읽어 오는 함수이다.
[ 형 식 ]
int read(fhandle, buffer, size);
int *fhandle; <---- 파일 핸들러
char *buffer; <---- 디스크에서 읽어올 데이터 버퍼
int size; <---- 읽어올 바이트 수
[ 보기 ]
# include
# include
main()
{
int in_fhandle, out_fhandle, count;
char buffer[100];
in_fhandle = open("11-7.c", O_RDNLY):
if(in_fhandle == -1)
{
printf9"file not found\n");
exit(1);
}
out_fhandle = open("11-7.bad", S_IREAD|S_WRITE);
while((count=read(in_fhandle, buffer, 100))>0)
write(out_fhandle, buffer, count);
close(in_fhandle);
close(out_fhandle);
}
3.6 lseek() 함수
파일의 읽기/쓰기를 우이해 현재의 파일 포인터를 이동하는 함수이다.
이동 방법은 origin에서 지정하는 모드로부터 시작하여 offset의 바이트 수만큼 이동한다.
[ 형 식 ]
long lseek(fhandle, offset, origin);
int *fhandle; <---- 파일 핸들러
char *offset; <---- 이동 바이트 수 (양수/음수)
int origin; <---- 시작 위치
origin의 이동 위치 모드
모 드
숫 자
기 능
SEEK_SET
0
파일의 처음부터
SEEK_CUR
1
파일의 현재 위치부터
SEEK_END
2
파일의 끝에서 부터
if (fp == NULL)
{
printf("file not found\n");
exit(1);
}
fseek(fp, 30L, SEEK_SET);
c = fgetc(fp);
printf("11-5.c의 30번째 문자는 :
fclose(fp);
}
2.11 ftell() 함수
파일의 읽기/쓰기를 하고 있는 현재 위치를 아려주는 함수이다.
[ 형 식 ]
long ftell(fp);
FILE *fp; <---- 파일 포인터
ftell()함수는 파일 포인터에 대한 하일의 현재 위치를 함수값으로 리턴한다.
[ 예제 11-6.C ]
#include
#include
main()
{
FILE *fp;
fp = fopen("11-6.c","rb");
if (fp == NULL)
{
printf("file not found\n");
exit(1);
}
fseek(fp, 0L, SEEK_SET);
printf("11-6.c의 파일의 크기는 :
fclose(fp);
}
3 저수준 화일 입출력
3.1 open() 함수
파일을 개방(open)하는 함수이다.
[ 형 식 ]
int open(filename, mode[, access]);
char *filename; <----파일명
int mode; <---개방 모드
int access; <---- 개방 허가 모드
파일 개방 모드는 아래의 표와 같다.
모드종류
기능
O_APPEND
쓰기(write) 연산에 사용되며, 파일 포인터를 파일의 끝으로 위치 시킨다.
O_CREAT
새로운 파일을 생성하고 개방한다.
O_EXCL
지정된 파일이 이미 존재하면 오류값을 리턴한다.
O_RDONLY
읽기만을 위해 파일을 개방한다.
O_RDWR
읽고 쓰기 위해서 파일을 개방한다.
O_TRUNC
현존하는 파일을 길이 0으로 절삭하고 개방한다. 기존의 파일 내용이 모두 파괴 된다.
O_WRONLY
쓰기만을 위해 모드로 파일을 개방한다.
O_BINARY
이진 파일 모드로 파일을 개방한다.
O_TEXT
텍스트 파일 모드로 파일을 개방한다.
3.2 close() 함수
개방(open)되어 있는 파일을 파일 연산이 끝나면 반드시 페쇄(close) 해야 하는데 여기에 사용되는 함수가 close()이다.
close()함수를 실행하면 운영 체제의 내부 버퍼 안에 있는 정보가 파일에 기록된다. 만일 close()함수가 실패하면 지금까지 작업한 데이터의 손실이 발생할 수 있다.
[ 형 식 ]
int close(fhandle);
int fhandle; <---- 파일 핸들러
[ 보기 ]
# include
# include
main()
{
int fhandle;
fhandle = open("test.txt", O_RDNLY):
·······
fclose(fhandle0;
}
3.3 creat() 함수
새로운 파일 생성과 동시에 쓰기 연산을 하기 위해 사용하는 함수이다.
[ 형 식 ]
int creat(filename, access);
char *filename; <---- 화일명
int access; <---- 접근 허가 모드
변수 access는 접근 방식과 파일이 이진 파일인지 텍스트 파일인지를 구별하기 위해서 사용한다. 특히 unix 시스템에는 파일보호 (protection)과 관련이 있다.
DOS의 허용 모드는 다음과 같다.
모드종류
기능
S_IWRITE
쓰 기 허 용
S_IREAD
읽 기 허 용
S_IREAD|S_IWRITE
읽기/스기 허용
[ 보기 ]
# include
# include
main()
{
int fhandle;
fhandle = creat("test.txt", S_IREAD|S_IWRITE):
·······
fclose(fhandle);
}
3.4 write() 함수
쓰기 모드로 파일을 개방한 후에 버퍼에 있는 데이터를 디스크에 기록하는 함수이다.
기록에 실패할 경우 함수에 -1을 리턴한다.
[ 형 식 ]
int write(fhandle, buffer, size);
int *fhandle; <---- 파일 핸들러
char *buffer; <---- 디스크에 기록할 데이터가 들어있는 버퍼
int size; <---- 기록할 바이트 수
3.5 read() 함수
읽기 모드로 파일을 개방한 후 디스크에 들어있는 데이터를 지정된 버퍼로 읽어 오는 함수이다.
[ 형 식 ]
int read(fhandle, buffer, size);
int *fhandle; <---- 파일 핸들러
char *buffer; <---- 디스크에서 읽어올 데이터 버퍼
int size; <---- 읽어올 바이트 수
[ 보기 ]
# include
# include
main()
{
int in_fhandle, out_fhandle, count;
char buffer[100];
in_fhandle = open("11-7.c", O_RDNLY):
if(in_fhandle == -1)
{
printf9"file not found\n");
exit(1);
}
out_fhandle = open("11-7.bad", S_IREAD|S_WRITE);
while((count=read(in_fhandle, buffer, 100))>0)
write(out_fhandle, buffer, count);
close(in_fhandle);
close(out_fhandle);
}
3.6 lseek() 함수
파일의 읽기/쓰기를 우이해 현재의 파일 포인터를 이동하는 함수이다.
이동 방법은 origin에서 지정하는 모드로부터 시작하여 offset의 바이트 수만큼 이동한다.
[ 형 식 ]
long lseek(fhandle, offset, origin);
int *fhandle; <---- 파일 핸들러
char *offset; <---- 이동 바이트 수 (양수/음수)
int origin; <---- 시작 위치
origin의 이동 위치 모드
모 드
숫 자
기 능
SEEK_SET
0
파일의 처음부터
SEEK_CUR
1
파일의 현재 위치부터
SEEK_END
2
파일의 끝에서 부터