컴퓨터/C
C언어 프로그래밍에서 파일을 사용하기 위해서 파일 스트림을 생성하고 파일 구조체로 된 포인터 변수에 대입을 해서 사용합니다. 이 파일 포인터는 파일의 위치를 제어하는 역할을 하게 됩니다.
대부분의 편집기에서 문서를 작성하면 위치를 알기 위해서 커서가 존재합니다. 이 파일 포인터는 커서와 같은 역할을 해서 파일 내부에서 원하는 위치부터 데이터를 불러올 수 있게 됩니다.
C언어에서 fopen 함수를 이용해서 파일 스트림을 생성합니다. 이때 스트림 모드가 크게 r , w , a 읽기 , 쓰기, 이어 쓰기 3가지 모드가 있다고 했는데요 그렇다면 스트림을 생성해서 파일 포인터에 대입하게 되면 파일에서 커서 역할을 하게 되는 파일 포인터의 위치는 어디에 있는지 알아보도록 하겠습니다.
읽기 모드의 경우 이미 만들어진 파일을 읽기위해서 가장 처음 위치에 파일의 포인터가 위치하게 됩니다.
쓰기 모드 또한 이미 만들어진 파일 , 또는 새로운 파일의 가장 처음 위치에 파일의 포인터가 위치합니다.
이어 쓰기 모드 같은 경우 파일 포인터는 파일의 가장 마지막에 위치하게 됩니다.
텍스트 편집기라고 가정하면 아래와 같은 곳에 커서가 위치하는 것과 마찬가지입니다.
파일 스트림을 통해 파일을 제어하여 사용하기 위해서는 파일 포인터의 위치는 아주 중요합니다. 그리고 자연스럽게 파일의 입출력 함수들을 통해 파일의 포인터를 움직이고 이동하고 있습니다. 하지만 원하지 않는 위치로 파일의 포인터가 이동한 경우 파일 포인터의 위치를 옮기고 싶을 때는 어떻게 해야 될까요. C언어에서는 파일 포인터의 위치를 제어하기 위해 함수를 제공해 줍니다.
파일 포인터의 위치를 가장 처음으로 돌릴 때 사용하는 함수입니다.
함수의 원형은 아래와 같습니다.
#include <stdio.h>
void rewind(FILE* stream);
해당 함수를 사용하면 파일 포인터는 해당 연결된 파일 스트림의 가장 첫 번째 위치로 갑니다.
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main()
{
FILE* file = fopen("Test.txt", "rt"); // 읽기 모드 파일 스트림 생성 및 파일 포인터 대입
// 다양한 소스코드로 사용 후 파일 포인터의 위치를 처음으로 가고 싶을 때
rewind(file);
fclose(file);
return 0;
}
사실 파일 스트림 안에서 파일 포인터의 위치를 제어하기 위해 가장 많이 사용하는 함수입니다.
함수의 원형은 다음과 같습니다.
#include <stdio.h>
int fseek(FILE* stream, long int offset, int origin);
세번째 인자의 경우 C언어에서 기준점을 제공하기 위한 3가지 메크로 상수(키워드)를 제공해 줍니다.
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main()
{
FILE* file = fopen("Test.txt", "rt"); // 읽기 모드 파일 스트림 생성 및 파일 포인터 대입
//fseek 함수를 통한 위치 제어 해보기
//처음으로 부터 2번째로 파일 포인터 이동
// 1번
fseek(file, 2, SEEK_SET);
printf("%c\n", fgetc(file));
//처음으로 이동
// 2번
fseek(file, 0, SEEK_SET);
printf("%c\n", fgetc(file));
//현 위치에서 5칸 뒤로 이동
// 3번
fseek(file, 5, SEEK_CUR);
printf("%c\n", fgetc(file));
// 4번
printf("%c\n", fgetc(file));
//파일 종료
fclose(file);
return 0;
}
파일 포인터의 동작을 도식화하면 아래와 같습니다.
C 언어 - 상수의 종류 - 리터럴과 심볼릭 상수 (0) | 2021.07.29 |
---|---|
C 언어 - 실습 - 학생관리 프로그램 Ver4.1(파일로 저장하기) (0) | 2021.07.28 |
C 언어 - 가변인자 (가변매개변수) - variable argument (0) | 2021.07.26 |
C 언어 - 파일 다루기3 - 파일 출력(파일의 데이터 읽기) (0) | 2021.07.25 |
C 언어 - 파일다루기 4 - 파일 입력 (파일에 데이터 넣기) (0) | 2021.07.22 |
91년생 공학엔지니어의 개발일지
TODAY :
YESTER DAY :
TOTAL :
Commnet