Udostępnij za pośrednictwem


_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_errlisti _sys_nerr.

Uwagi

Funkcja _lseek przenosi wskaźnik pliku skojarzony z fd nową lokalizacją, która jest offset bajtami z originklasy . 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

Zobacz też

We/Wy niskiego poziomu
fseek, _fseeki64
_tell, _telli64