티스토리 뷰
※ 본 포스팅은 개인공부 후 자료를 남기기 위한 목적임으로 내용 상에 오류가 있을 수 있음을 밝힙니다.
○ fseek :
fseek 함수는 fopen으로 호출된 파일에서의 현재 위치를 이동시킬 수 있는 함수다.
인자로는 3개가 들어간다.
첫 번째로는 파일포인터,
두 번째로는 이동할 거리,
세 번째는 어떻게 이동할지 방식이 들어간다.
여기서 어떻게 이동할지를 정하는 방식에는 3가지가 있는데
1. SEEK_SET(0) : 파일의 처음 위치를 기준으로 이동한다.
2. SEEK_CUR(1) : 현재 파일의 위치를 기준으로 이동한다.
3. SEEK_END(2) : 파일의 마지막 위치를 기준으로 이동한다.
우선 임의의 텍스트 파일이 다음과 같이 있다.
그리고 다음과 같이 소스파일을 작성해서 값이 어떻게 출력되는지 확인해보면.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | #include "stdio.h" void main() { char tmp[10]; FILE *fp=fopen("test.txt", "r"); fgets(tmp, 3, fp); //fp 스트림에서 NULL포함 3byte를 긁어와 tmp에 저장 printf("%s ", tmp); fseek(fp, 4, 0); //파일의 처음 위치에서 4byte 떨어진 위치로 이동 fgets(tmp, 3, fp); printf("%s ", tmp); fseek(fp, 2, 1); //현재 위치에서 2byte 떨어진 위치로 이동 fgets(tmp, 3, fp); printf("%s ", tmp); fseek(fp, -2, 2); //파일의 끝에서 -2byte 떨어진 위치로 이동 fgets(tmp, 3, fp); printf("%s ", tmp); } |
와 같다.
우선 fseek(fp, 4, 0)에서는 처음 위치에서 4 떨어진 위치이므로 0,1,2,3을 건너뛰고
4와 5가 출력되었고, 이제 현재 위치가 6이 되었으므로 fseek(fp, 2, 1)에서 현재 위치 +2가 되어
6, 7을 건너뛰고 8과 9가 출력되었다. 마지막으로 fseek(fp, -2, 2)는 끝 위치에서 -2 이므로
파일의 끝(eof)에서 두칸 당겨 져와 2개의 문자를 출력했으므로 ef가 출력되었다.
○ ftell :
ftell 함수는 심플하게 파일을 읽거나 쓰면서 이동하는 현재 위치의 위치 값을 반환한다.
인자로는 파일 포인터 하나가 들어가면 방금 fseek 함수 예제 에서 사용한 test.txt를 그대로
사용하여 다음 소스코드와 실행결과를 보면
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | #include "stdio.h" void main() { char tmp[20]; FILE *fp=fopen("test.txt", "r"); printf("fscanf전 위치 : %d\n", ftell(fp)); //아직 파일 포인터를 사용한 작업이 없으므로 현재위치는 0 fgets(tmp, 4+1, fp); //fgets를 통해 NULL 1바이트를 포함한 4글자를 가져온다. printf("fgets로 4개를 가져온 후 위치 : %d\n", ftell(fp)); fscanf(fp, "%s", tmp); //나머지 문자들을 fscanf를 통해 모두 긁어온다. printf("fscanf %%s후 위치 : %d\n", ftell(fp)); } |
처음에는 파일 포인터를 사용한 작업이 없었으므로 당연히 첫 ftell의 값은 0이다.
다음으로 fgets를 통해 4글자를 긁어오는 작업을 한 후 ftell를 사용한 값을 보면 4다.
마지막으로 모든 문자열을 긁어오는 작업을 한 후에 ftell을 사용하면 16이다.
(전체 문자열의 길이는 16)
'개인공부 > C and C++' 카테고리의 다른 글
[Qt 4.8] 01. Hello World 프로그램 (1) | 2014.11.15 |
---|---|
[Qt 4.8] 00. Linux 설치 환경 Setting하기 (0) | 2014.11.15 |
[C 언어] rand(), srand()를 사용한 난수 발생 예제 (2) | 2014.09.18 |
구조체 파일 위치 지시자 (0) | 2014.01.17 |
struct member alignment(구조체 멤버 정렬)에 대해 (0) | 2014.01.16 |
realloc, calloc 함수 및 예제 (1) | 2014.01.16 |
strlen, strcmp, strcat, strcpy, strrev, strtok, atoi, itoa 설명 및 함수로 구현 (0) | 2014.01.16 |