Operatia lseek repozitioneaza cursorul de fisier, astfel incat o operatie read/write va lucra incepand cu aceasta noua pozitie. Sintaxa de apel este
#include <sys/types.h> #include <unistd.h> off_t lseek (int fildes, off_t offset, int whence);
fildes este descriptorul de fisier pentru care vom repozitiona cursorul;
offset este offset-ul repozitionarii (poate fi pozitiv sau negativ);
whence este o directiva care specifica de unde se incepe repozitionarea; poate avea valorile:
Exemplu de utilizare:
#include <stdio.h> #include <stdlib.h> #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include <unistd.h> ... int fd; char buf[5]; /* * deschidem fisierul in modul APPEND (cursorul e la sfarsitul * fisierului) */ fd = open ("myfile.txt", O_RDWR | O_APPEND); if (fd < 0) { perror ("open"); exit (EXIT_FAILURE); } /* ne pozitionam inaintea ultimilor 4 octeti din fisier */ if (lseek (fd, -4, SEEK_CUR) < 0) { perror ("open"); exit (EXIT_FAILURE); } /* citim ultimii 4 octeti din fisier */ if (read (fd, buf, 4) < 0) { perror ("read"); exit (EXIT_FAILURE); } ...
O bucata de cod cu aceeasi functionalitate ca cea de mai sus este prezentata in continuare:
#include <stdio.h> #include <stdlib.h> #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include <unistd.h> ... int fd; /* * fisierul este deschis pentru citire/scriere; cursorul este * pozitionat la inceputul fisierului */ fd = open ("myfile.txt", O_RDWR); if (fd < 0) { perror ("open"); exit (EXIT_FAILURE); } /* ne pozitionam inainte ultimilor 4 octeti din fisier */ if (lseek (fd, -4, SEEK_END) < 0) { perror ("lseek"); exit (EXIT_FAILURE); } /* citim ultimii octeti din fisier */ if (read (fd, buf, 4) < 0) { perror ("read"); exit (EXIT_FAILURE); } ...