fseek, _fseeki64fseek, _fseeki64

파일 포인터를 지정된 위치로 이동합니다.Moves the file pointer to a specified location.

구문Syntax

int fseek(
   FILE *stream,
   long offset,
   int origin
);
int _fseeki64(
   FILE *stream,
   __int64 offset,
   int origin
);

매개 변수Parameters

스트림stream
FILE 구조체에 대한 포인터입니다.Pointer to FILE structure.

offsetoffset
origin부터의 바이트 수입니다.Number of bytes from origin.

원본origin
초기 위치입니다.Initial position.

Return ValueReturn Value

성공 하면 fseek_fseeki64 가 0을 반환 합니다.If successful, fseek and _fseeki64 returns 0. 그렇지 않으면 0이 아닌 값을 반환합니다.Otherwise, it returns a nonzero value. 검색을 수행할 수 없는 디바이스에서는 반환 값이 정의되지 않습니다.On devices incapable of seeking, the return value is undefined. Stream 이 null 포인터 이거나 원본이 아래에서 설명 하는 허용 되는 값 중 하나가 아닌 경우 Fseek_fseeki64매개 변수 유효성 검사에 설명 된 대로 잘못 된 매개 변수 처리기를 호출 합니다.If stream is a null pointer, or if origin is not one of allowed values described below, fseek and _fseeki64 invoke the invalid parameter handler, as described in Parameter Validation. 계속 해 서 실행 하도록 허용한 경우 이러한 함수는 errnoEINVAL 로 설정 하 고-1을 반환 합니다.If execution is allowed to continue, these functions set errno to EINVAL and return -1.

설명Remarks

Fseek_fseeki64 함수는 스트림과 연결 된 파일 포인터 (있는 경우)를 원점에서 오프셋 된 바이트의 새 위치로 이동 합니다.The fseek and _fseeki64 functions moves the file pointer (if any) associated with stream to a new location that is offset bytes from origin. 스트림에 대한 다음 작업은 새 위치에서 수행됩니다.The next operation on the stream takes place at the new location. 업데이트를 위해 열린 스트림에 대한 다음 작업은 읽기 또는 쓰기일 수 있습니다.On a stream open for update, the next operation can be either a read or a write. 인수 원본은 stdio.h에 정의 된 다음 상수 중 하나 여야 합니다. 넣기The argument origin must be one of the following constants, defined in STDIO.H:

원점 값origin value 의미Meaning
SEEK_CURSEEK_CUR 파일 포인터의 현재 위치Current position of file pointer.
SEEK_ENDSEEK_END 파일 끝End of file.
SEEK_SETSEEK_SET 파일 시작Beginning of file.

Fseek_fseeki64 를 사용 하 여 파일에서 포인터의 위치를 변경할 수 있습니다.You can use fseek and _fseeki64 to reposition the pointer anywhere in a file. 포인터는 파일 끝을 지나서 배치될 수도 있습니다.The pointer can also be positioned beyond the end of the file. fseek_fseeki64 는 파일의 끝 표시기를 지우고 스트림에대 한 이전 ungetc 호출의 영향을 부정 합니다.fseek and _fseeki64 clears the end-of-file indicator and negates the effect of any prior ungetc calls against stream.

데이터를 추가하기 위해 파일이 열리면 현재 파일 위치는 다음 쓰기가 수행되는 위치가 아니라 마지막 I/O 작업에 의해 결정됩니다.When a file is opened for appending data, the current file position is determined by the last I/O operation, not by where the next write would occur. 추가를 위해 열린 파일에서 I/O 작업이 아직 수행되지 않은 경우 파일 위치는 파일의 시작입니다.If no I/O operation has yet occurred on a file opened for appending, the file position is the start of the file.

텍스트 모드에서 열린 스트림의 경우 캐리지 리턴-줄 바꿈 번역으로 인해 fseek_fseeki64 에서 예기치 않은 결과가 생성 될 수 있으므로 fseek_fseeki64 는 제한적으로 사용 됩니다.For streams opened in text mode, fseek and _fseeki64 have limited use, because carriage return-line feed translations can cause fseek and _fseeki64 to produce unexpected results. 텍스트 모드에서 연 스트림에 대해 작동 하도록 보장 되는 fseek_fseeki64 작업은 다음과 같습니다.The only fseek and _fseeki64 operations guaranteed to work on streams opened in text mode are:

  • 원점 값을 기준으로 한 0 오프셋을 사용하여 검색Seeking with an offset of 0 relative to any of the origin values.

  • _Fseeki64를 사용 하는 경우 ftell 또는 _ftelli64 을 사용할 때 ftell 에서 반환 된 오프셋 값을 사용 하 여 파일의 시작 부분에서 검색 합니다.Seeking from the beginning of the file with an offset value returned from a call to ftell when using fseek or _ftelli64 when using _fseeki64.

또한 텍스트 모드에서 Ctrl+Z는 입력 시 파일 끝 문자로 해석됩니다.Also in text mode, CTRL+Z is interpreted as an end-of-file character on input. 읽기/쓰기용으로 열려 있는 파일에서 fopen 및 모든 관련 루틴은 파일 끝에 CTRL + Z가 있는지 확인 하 고 가능 하면 제거 합니다.In files opened for reading/writing, fopen and all related routines check for a CTRL+Z at the end of the file and remove it if possible. 이 작업은 fseekfseek _fseeki64_ftelli64의 조합을 사용 하 여 CTRL + Z로 끝나는 파일 내에서 이동 하면 파일의 끝 부분에서 fseek 또는 _fseeki64 가 제대로 동작 하지 않을 수 있기 때문에 수행 됩니다.This is done because using the combination of fseek and ftell or _fseeki64 and _ftelli64, to move within a file that ends with a CTRL+Z may cause fseek or _fseeki64 to behave improperly near the end of the file.

CRT가 BOM(바이트 순서 표시)으로 시작되는 파일을 열면 파일 포인터는 BOM 뒤(파일 실제 콘텐츠의 시작)에 배치됩니다.When the CRT opens a file that begins with a Byte Order Mark (BOM), the file pointer is positioned after the BOM (that is, at the start of the file's actual content). 파일의 시작 부분을 검색 해야 하는 경우 fseek 을 사용 하 여 위치 0이 아닌 초기 위치와 fseek 를 가져옵니다.If you have to fseek to the beginning of the file, use ftell to get the initial position and fseek to it rather than to position 0.

이 함수는 실행 중에 다른 스레드를 잠그므로 스레드로부터 안전합니다.This function locks out other threads during execution and is therefore thread-safe. 잠기지 않는 버전의 경우 _fseek_nolock, _fseeki64_nolock을 참조하세요.For a non-locking version, see _fseek_nolock, _fseeki64_nolock.

기본적으로이 함수의 전역 상태는 응용 프로그램으로 범위가 지정 됩니다.By default, this function's global state is scoped to the application. 이를 변경 하려면 CRT의 전역 상태를 참조 하세요.To change this, see Global state in the CRT.

요구 사항Requirements

기능Function 필수 헤더Required header
fseekfseek <stdio.h><stdio.h>
_fseeki64_fseeki64 <stdio.h><stdio.h>

호환성에 대한 자세한 내용은 Compatibility을 참조하세요.For additional compatibility information, see Compatibility.

예제Example

// crt_fseek.c
// This program opens the file FSEEK.OUT and
// moves the pointer to the file's beginning.

#include <stdio.h>

int main( void )
{
   FILE *stream;
   char line[81];
   int  result;

   if ( fopen_s( &stream, "fseek.out", "w+" ) != 0 )
   {
      printf( "The file fseek.out was not opened\n" );
      return -1;
   }
   fprintf( stream, "The fseek begins here: "
                    "This is the file 'fseek.out'.\n" );
   result = fseek( stream, 23L, SEEK_SET);
   if( result )
      perror( "Fseek failed" );
   else
   {
      printf( "File pointer is set to middle of first line.\n" );
      fgets( line, 80, stream );
      printf( "%s", line );
    }
   fclose( stream );
}
File pointer is set to middle of first line.
This is the file 'fseek.out'.

참조See also

스트림 I/OStream I/O
fopen, _wfopenfopen, _wfopen
ftell, _ftelli64ftell, _ftelli64
_lseek, _lseeki64_lseek, _lseeki64
되감습니다rewind