_lseek
, _lseeki64
Przenosi wskaźnik pliku do określonej lokalizacji.
Składnia
long _lseek(
int fd,
long offset,
int origin
);
__int64 _lseeki64(
int fd,
__int64 offset,
int origin
);
Parametry
fd
Deskryptor plików odwołujący się do otwartego pliku.
offset
Liczba bajtów z origin
.
origin
Pozycja początkowa.
Wartość zwracana
_lseek
Zwraca przesunięcie w bajtach nowego położenia od początku pliku. _lseeki64
Zwraca przesunięcie w 64-bitowej liczbą całkowitą. Funkcja zwraca wartość -1L, aby wskazać błąd. Jeśli przekazano nieprawidłowy parametr, taki jak nieprawidłowy deskryptor pliku, lub wartość parametru origin
jest nieprawidłowa lub pozycja określona offset
przez jest przed rozpoczęciem pliku, wywoływana jest nieprawidłowa procedura obsługi parametrów, zgodnie z opisem w temacie Walidacja parametrów. Jeśli wykonywanie jest dozwolone do kontynuowania, te funkcje są ustawione errno
na EBADF
i zwracają -1L. Na urządzeniach, które nie mogą szukać (takich jak terminale i drukarki), wartość zwracana jest niezdefiniowana.
Aby uzyskać więcej informacji na temat tych i innych kodów błędów, zobacz errno
, _doserrno
, _sys_errlist
i _sys_nerr
.
Uwagi
Funkcja _lseek
przenosi wskaźnik pliku skojarzony z fd
nową lokalizacją, która jest offset
bajtami z origin
klasy . Następna operacja w pliku odbywa się w nowej lokalizacji. Argument origin
musi być jedną z następujących stałych, które są zdefiniowane w stdio.h.
origin wartość |
opis |
---|---|
SEEK_SET |
Początek pliku. |
SEEK_CUR |
Bieżące położenie wskaźnika pliku. |
SEEK_END |
Koniec pliku. |
Możesz użyć _lseek
polecenia , aby zmienić położenie wskaźnika w dowolnym miejscu w pliku lub poza końcem pliku.
Domyślnie stan globalny tej funkcji jest zakresem aplikacji. Aby zmienić to zachowanie, zobacz Stan globalny w CRT.
Wymagania
Procedura | Wymagany nagłówek |
---|---|
_lseek |
<io.h> |
_lseeki64 |
<io.h> |
Aby uzyskać więcej informacji o zgodności, zobacz Zgodność.
Biblioteki
Wszystkie wersje bibliotek czasu wykonywania języka C.
Przykład
// crt_lseek.c
/* This program first opens a file named lseek.txt.
* It then uses _lseek to find the beginning of the file,
* to find the current position in the file, and to find
* the end of the file.
*/
#include <io.h>
#include <fcntl.h>
#include <stdlib.h>
#include <stdio.h>
#include <share.h>
int main( void )
{
int fh;
long pos; /* Position of file pointer */
char buffer[10];
_sopen_s( &fh, "crt_lseek.c_input", _O_RDONLY, _SH_DENYNO, 0 );
/* Seek the beginning of the file: */
pos = _lseek( fh, 0L, SEEK_SET );
if( pos == -1L )
perror( "_lseek to beginning failed" );
else
printf( "Position for beginning of file seek = %ld\n", pos );
/* Move file pointer a little */
_read( fh, buffer, 10 );
/* Find current position: */
pos = _lseek( fh, 0L, SEEK_CUR );
if( pos == -1L )
perror( "_lseek to current position failed" );
else
printf( "Position for current position seek = %ld\n", pos );
/* Set the end of the file: */
pos = _lseek( fh, 0L, SEEK_END );
if( pos == -1L )
perror( "_lseek to end failed" );
else
printf( "Position for end of file seek = %ld\n", pos );
_close( fh );
}
Dane wejściowe: crt_lseek.c_input
Line one.
Line two.
Line three.
Line four.
Line five.
Wynik
Position for beginning of file seek = 0
Position for current position seek = 10
Position for end of file seek = 57