일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- Flutter
- git
- dart 언어
- Python
- c# 윈폼
- 깃
- 포인터
- C++
- C언어 포인터
- github
- jupyter
- 구조체
- c# winform
- 도커
- c# 추상 클래스
- gitlab
- vim
- Data Structure
- Houdini
- c#
- Unity
- HTML
- c언어
- C# delegate
- 유니티
- Algorithm
- jupyter lab
- 플러터
- 다트 언어
- docker
Archives
- Today
- Total
nomad-programmer
[Programming/C] fseek, ftell 함수 본문
파일 내부의 작업 위치 탐색 및 확인: fseek, ftell 함수
fseek 함수
파일에 저장된 데이터를 꼭 순차적으로 읽을 필요는 없다. 필요에 따라 fseek함수를 사용하여 원하는 위치로 건너뛰거나, 읽은 위치로 돌아가서 읽었던 데이터를 다시 읽을 수도 있다.
// fseek 함수 원형
int fseek(FILE* stream, long offset, int origin);
// 함수 사용 형식
fseek(파일 포인터, 이동 거리, 기준 위치);
이 함수는 파일의 데이터를 읽을 기준 위치로 다음과 같은 명령이 존재한다.
* SEEK_SET: 파일의 시작
* SEEK_END: 파일의 끝
* SEEK_CUR: 현재 위치
이것들을 이용하여 지정한 기준 위치로부터 사용자가 지정한 "이동 거리" 만큼 이동한다.
이동 거리는 양수 또는 음수로 지정할 수 있고, 양수를 명시하면 지정한 기준 위치에서 뒤로 이동하며 음수를 명시하면 앞으로 이동한다. 그리고 실제로 이동한 위치는 파일 포인터에 저장된다.
// 파일의 시작 위치로 이동
fseek(fp, 0, SEEK_SET);
// 현재 위치에서 32바이트 만큼 뒤로 이동
fseek(fp, 32, SEEK_CUR);
이렇게 이동한 위치를 값으로 확인하고 싶다면 ftell 함수를 사용하면 된다.
ftell 함수
ftell 함수가 반환하는 값은 시작 위치를 0으로 계산한 값이다. 때문에 파일의 끝으로 이동한 후 ftell 함수를 사용하면 파일의 전체 크기를 알아낼 수 있다.
// 함수 원형
long ftell(FILE* stream);
// 함수 사용 형식
ftell(파일 포인터);
/*
현재 열려 있는 파일 내에서 데이터를 읽거나 저장할 위치
/*
#pragma warning(disable: 4996)
#include <stdio.h>
int main(void) {
int file_size = 0;
// 읽기 모드로 바이너리 파일 오픈
FILE* fp = fopen("tmp.bin", "rb");
// 파일 열기에 성공했다면
if (NULL != fp) {
// 파일의 끝으로 이동
fseek(fp, 0, SEEK_END);
// 현재 파일 위치로 파일의 크기를 구함
file_size = ftell(fp);
printf("파일 크기: %d bytes\n", file_size);
fclose(fp);
}
return 0;
}
// 결과
/*
파일 크기: 24 bytes
*/
'Programming > C' 카테고리의 다른 글
[Programming/C] 콜백 함수 (0) | 2020.06.16 |
---|---|
[Programming/C] 함수 포인터(Function Pointer) (0) | 2020.06.16 |
[Programming/C] 파일 사용 형식 (0) | 2020.06.16 |
[Programming/C] 구조체 멤버 정렬 (Struct Member Alignment) (0) | 2020.06.14 |
[C] typedef (0) | 2020.06.14 |
Comments