Sdílet prostřednictvím


fseek, _fseeki64

Přesune ukazatel souboru do zadaného umístění.

Syntaxe

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

Parametry

stream
Ukazatel na FILE strukturu.

offset
Početch origin

origin
Počáteční pozice.

Vrácená hodnota

V případě úspěchu fseek a _fseeki64 vrátí hodnotu 0. V opačném případě vrátí nenulovou hodnotu. Na zařízeních, která nemohou hledat, je vrácená hodnota nedefinovaná. Pokud stream je ukazatel null nebo pokud origin není jednou z povolených hodnot popsaných níže, fseek _fseeki64 a vyvoláte neplatnou obslužnou rutinu parametru, jak je popsáno v ověření parametru. Pokud je spuštění povoleno pokračovat, tyto funkce jsou nastavené errno na EINVAL hodnotu -1 a vrátí hodnotu -1.

Poznámky

_fseeki64 Funkce fseek přesunou ukazatel souboru (pokud existuje) přidružený stream k novému umístění, ze kterého jsou offset bajty .origin Další operace ve streamu probíhá v novém umístění. U datového proudu otevřeného pro aktualizaci může být další operace čtení nebo zápisu. origin Argument musí být jednou z následujících konstant definovaných vSTDIO.H:

počáteční hodnota Význam
SEEK_CUR Aktuální pozice ukazatele souboru
SEEK_END Konec souboru.
SEEK_SET Začátek souboru.

Ukazatel můžete použít fseek a _fseeki64 přemístit kamkoli do souboru. Ukazatel lze také umístit za konec souboru. fseek a _fseeki64 vymaže ukazatel ukončení souboru a neguje účinek všech předchozích ungetc volání streamproti .

Při otevření souboru pro připojení dat je aktuální pozice souboru určena poslední vstupně-výstupní operací, nikoli umístěním dalšího zápisu. Pokud u souboru otevřeného pro připojení ještě nedošlo k žádné vstupně-výstupní operaci, pozice souboru je začátek souboru.

U datových proudů otevřených v textovém režimu fseek a _fseeki64 jejich použití je omezené, protože překlady návratového řádku na začátek řádku můžou způsobit fseek a _fseeki64 způsobit neočekávané výsledky. Jedinými fseek _fseeki64 operacemi, které jsou zaručené pro práci na datových proudech otevřených v textovém režimu, jsou:

  • Hledání s posunem 0 vzhledem k libovolné hodnotě původu.

  • Hledá se od začátku souboru s hodnotou posunu vrácenou z volání ftell při použití fseek nebo _ftelli64 při použití _fseeki64.

V textovém režimu se také kombinace kláves CTRL+Z interpretuje jako znak konce souboru při zadávání. V souborech otevřených pro čtení a zápis fopen a všechny související rutiny kontrolují ctrl+Z na konci souboru a pokud je to možné, odeberte ho. Odebere se, protože použití kombinace fseek a ftell nebo _fseeki64 a _ftelli64, k přesunutí v souboru, který končí klávesou CTRL+Z, může způsobit fseek nebo _fseeki64 se chovat nesprávně blízko konce souboru.

Když CRT otevře soubor, který začíná značkou pořadí bajtů (BOM), umístí se ukazatel souboru za kusovníkem. (To znamená, že je umístěn na začátku skutečného obsahu souboru). Pokud potřebujete fseek na začátek souboru, použijte ftell k získání počáteční pozice a pak fseek k této pozici místo pozice 0.

Tato funkce během provádění uzamkne další vlákna a je proto bezpečná pro přístup z více vláken. Informace o nezamykání verze naleznete v tématu _fseek_nolock, _fseeki64_nolock.

Ve výchozím nastavení je globální stav této funkce vymezen na aplikaci. Chcete-li toto chování změnit, přečtěte si téma Globální stav v CRT.

Požadavky

Function Požadovaný hlavičkový soubor
fseek <stdio.h>
_fseeki64 <stdio.h>

Další informace o kompatibilitě najdete v tématu Kompatibilita.

Příklad

// 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'.

Viz také

Vstupně-výstupní operace streamu
fopen, _wfopen
ftell, _ftelli64
_lseek, _lseeki64
rewind