std:: fseek
|
헤더 파일에 정의됨
<cstdio>
|
||
|
int
fseek
(
std::
FILE
*
stream,
long
offset,
int
origin
)
;
|
||
파일 스트림 stream 의 파일 위치 표시자를 설정합니다.
만약 stream 이 바이너리 모드로 열려 있다면, 새로운 위치는 origin 이 SEEK_SET 인 경우 파일 시작부터 정확히 offset 바이트, origin 이 SEEK_CUR 인 경우 현재 파일 위치부터, origin 이 SEEK_END 인 경우 파일 끝부터 측정됩니다. 바이너리 스트림은 특히 추가적인 널 바이트가 출력되는 경우 SEEK_END 를 지원할 필요가 없습니다.
만약 stream 이 텍스트 모드로 열려 있다면, offset 에 대해 지원되는 유일한 값들은 0(이는 어떤 origin 과도 함께 작동함)과 동일한 파일과 연관된 스트림에서 이전에 호출된 std::ftell 이 반환한 값(이는 origin 이 SEEK_SET 인 경우에만 작동함)입니다.
만약 stream 이 와이드 지향(wide-oriented)이라면, 텍스트 스트림과 바이너리 스트림의 제한 사항이 모두 적용됩니다 ( std::ftell 의 결과는 SEEK_SET 과 제로 오프셋(offset)으로 허용되며, SEEK_SET 과 SEEK_CUR 에서는 허용되지만 SEEK_END 에서는 허용되지 않습니다 ).
파일 위치 표시자를 변경하는 것 외에도,
fseek
는
std::ungetc
의 효과를 취소하고, 해당되는 경우 파일 끝(end-of-file) 상태를 지웁니다.
읽기 또는 쓰기 오류가 발생하면, 스트림의 오류 표시자( std::ferror )가 설정되고 파일 위치는 영향을 받지 않습니다.
목차 |
매개변수
| stream | - | 수정할 파일 스트림 |
| offset | - | origin을 기준으로 위치를 이동할 문자 수 |
| origin | - | offset 이 추가되는 위치. 다음 값 중 하나를 가질 수 있음: SEEK_SET , SEEK_CUR , SEEK_END |
반환값
0 성공 시, 그렇지 않으면 0이 아닌 값.
참고 사항
넓은 스트림에서 끝이 아닌 위치로 탐색한 후, 다음 출력 함수 호출은 파일의 나머지 부분을 정의되지 않은 상태로 만들 수 있습니다. 예를 들어, 다른 길이의 멀티바이트 시퀀스를 출력함으로써 발생할 수 있습니다.
POSIX는 파일의 기존 끝을 넘어서는 탐색을 허용합니다. 이 탐색 이후 출력이 수행되면, 갭에서의 모든 읽기 작업은 제로 바이트를 반환합니다. 파일 시스템에서 지원되는 경우, 이는 sparse file 을 생성합니다.
POSIX는 또한
fseek
가 먼저 미기록된 데이터가 있을 경우
fflush
를 수행하도록 요구합니다(단, shift state가 복원되는지는 구현에 따라 정의됩니다). 표준 C++ 파일 스트림은 플러싱과 언시프팅 모두를 보장합니다:
std::basic_filebuf::seekoff
.
POSIX는
fseek
함수가 오류 발생 시
-
1
을 반환하고,
errno
를 해당 오류 코드로 설정해야 한다고 명시합니다.
Windows에서는,
_fseeki64
함수를 사용하여 2GiB보다 큰 파일을 처리할 수 있습니다.
예제
#include <cassert> #include <cstdio> #include <cstdint> #include <fstream> #include <vector> int main() { std::ofstream("dummy.nfo") << "8 bytes\n"; // 파일 생성 std::FILE* fp = std::fopen("dummy.nfo", "rb"); assert(fp); std::fseek(fp, 0, SEEK_END); // 끝으로 이동 const std::size_t filesize = std::ftell(fp); std::vector<std::uint8_t> buffer(filesize); std::fseek(fp, 0, SEEK_SET); // 시작으로 이동 std::fread(buffer.data(), sizeof(std::uint8_t), buffer.size(), fp); std::fclose(fp); std::printf("I've read %zi bytes\n", filesize); }
가능한 출력:
I've read 8 bytes
참고 항목
|
파일 위치 표시자를 파일의 특정 위치로 이동
(함수) |
|
|
파일 위치 표시자를 얻음
(함수) |
|
|
현재 파일 위치 표시자를 반환
(함수) |
|
|
파일 위치 표시자를 파일의 시작으로 이동
(함수) |
|
|
C documentation
for
fseek
|
|