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í stream
proti .
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