Provided by: manpages-pl-dev_20051117-1_all bug

NAZWA

       lseek - zmiana pozycji w pliku dla odczytu/zapisu

SKŁADNIA

       #include <sys/types.h>
       #include <unistd.h>

       off_t lseek(int fildes, off_t offset, int whence);

OPIS

       Funkcja  lseek  zmienia  przesunięcie  dla  deskryptora pliku fildes na
       wartość podaną w  argumencie  offset,  zgodnie  z  dyrektywą  whence  w
       następujący sposób:

       SEEK_SET
              Przesunięcie jest ustawiane na offset bajtów.

       SEEK_CUR
              Przesunięcie  jest  ustawiane  na  aktualną  pozycję plus offset
              bajtów.

       SEEK_END
              Przesunięcie jest ustawiane na rozmiar pliku plus offset bajtów.

       Funkcja lseek umożliwia ustawienie przesunięcia w pliku poza istniejący
       koniec pliku. Jeśli później w tym miejscu zostaną zapisane jakieś dane,
       to  kolejne odczyty danych z luki zwrócą bajty zerowe (aż do czasu, gdy
       dane zostaną rzeczywiście w tej luce zapisane).

WARTOŚĆ ZWRACANA

       Po pomyślnym zakończeniu lseek zwraca ustawione przesunięcie, liczone w
       bajtach   od  początku  pliku.   W  przeciwnym  wypadku  zwracane  jest
       (off_t)-1 oraz ustawiane jest errno w sposób wskazujący rodzaj błędu.

BŁĘDY

       EBADF  fildes nie jest otwartym deskryptorem pliku.

       ESPIPE fildes jest związany z potokiem, gniazdem, lub FIFO.

       EINVAL whence jest nieprawidłową wartością.

ZGODNE Z

       SVr4, POSIX, BSD 4.3

OGRANICZENIA

       urządzenie musi wspierać tę operację.

       Ograniczenia specyficzne dla Linuksa, to: użycie  lseek  na  urządzeniu
       terminalowym  zwraca  ESPIPE.  Inne  systemy zwracają liczbę zapisanych
       znaków, używając SEEK_SET do ustawiania licznika. Niektóre  urządzenia,
       np.   /dev/null  nie  powodują  wystąpienia  błędu ESPIPE, ale zwracają
       wskaźnik o nieokreślonej wartości.

UWAGI

       Podczas konwersji starego  kodu,  należy  podstawiać  zamiast  wartości
       whence następujące makra:

         stare   nowe
       0       SEEK_SET
       1       SEEK_CUR

       2       SEEK_END
       L_SET   SEEK_SET
       L_INCR  SEEK_CUR
       L_XTND  SEEK_END

       SVR1-3 zwracają long zamiast off_t, BSD zwraca int.

       Należy zauważyć, że deskryptory plików utworzone przez dup(2) i fork(2)
       współdzielą  wskaźnik  bieżącej  pozycji  w  pliku,  więc   wykonywanie
       operacji typu "seek" na takich plikach może prowadzić do wyścigu.

ZOBACZ TAKŻE

       dup(2), fork(2), open(2), fseek(3)