table of contents
LSEEK(2) | Podręcznik programisty Linuksa | LSEEK(2) |
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¶
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¶
2001-09-24 | Linux |