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¶
Uwaga! To tłumaczenie może być nieaktualne!
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)
Powyższe tłumaczenie pochodzi z nieistniejącego już Projektu
Tłumaczenia Manuali i
może nie być aktualne. W razie
zauważenia różnic między powyższym opisem a
rzeczywistym zachowaniem opisywanego programu lub funkcji, prosimy o
zapoznanie się z oryginalną (angielską) wersją strony
podręcznika za pomocą polecenia:
- man --locale=C 2 lseek
Prosimy o pomoc w aktualizacji stron man - więcej informacji można
znaleźć pod adresem
http://sourceforge.net/projects/manpages-pl/.