[Beds] C Programming Question

David Pashley david at davidpashley.com
Thu Feb 16 17:58:35 GMT 2006


On Feb 16, 2006 at 17:12, Stephen Elliott praised the llamas by saying:
> Hi,
> 
> Please could someone tell me what the following line does.
> 
> seekp = lseek(fd, 0, SEEK_CUR);
> 
> My belief is it won't move the file pointer as the offset is set to 0.
> Although it does seem to.
> 
> I have attached the program this code was taken from if it's any help.
> 
Reformatting lseek(2), please wait...
LSEEK(2)               Linux Programmer’s Manual              LSEEK(2)



NAME
       lseek - reposition read/write file offset

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

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

DESCRIPTION
       The  lseek function repositions the offset of the file descrip‐
       tor fildes to the argument offset according  to  the  directive
       whence as follows:

       SEEK_SET
              The offset is set to offset bytes.

       SEEK_CUR
              The  offset  is  set to its current location plus offset
              bytes.

       SEEK_END
              The offset is set to the size of the  file  plus  offset
              bytes.

       The  lseek function allows the file offset to be set beyond the
       end of the existing end-of-file of the file (but this does  not
       change the size of the file).  If data is later written at this
       point, subsequent reads of the data in the gap return bytes  of
       zeros (until data is actually written into the gap).

RETURN VALUE
       Upon  successful completion, lseek returns the resulting offset
       location as measured in bytes from the beginning of  the  file.
       Otherwise, a value of (off_t)-1 is returned and errno is set to
       indicate the error.

ERRORS
       EBADF  fildes is not an open file descriptor.

       EINVAL whence is not one of SEEK_SET,  SEEK_CUR,  SEEK_END,  or
              the resulting file offset would be negative.

       EOVERFLOW
              The  resulting  file  offset cannot be represented in an
              off_t.

       ESPIPE fildes is associated with a pipe, socket, or FIFO.

CONFORMING TO
       SVr4, POSIX, BSD 4.3

RESTRICTIONS
       Some devices are incapable of seeking and POSIX does not  spec‐
       ify which devices must support it.

       Linux  specific  restrictions:  using  lseek  on  a  tty device
       returns ESPIPE.

NOTES
       This document’s use of whence is incorrect English,  but  main‐
       tained for historical reasons.

       When converting old code, substitute values for whence with the
       following macros:


        old       new
       0        SEEK_SET
       1        SEEK_CUR
       2        SEEK_END
       L_SET    SEEK_SET
       L_INCR   SEEK_CUR
       L_XTND   SEEK_END

       SVR1-3 returns long instead of off_t, BSD returns int.

       Note that file descriptors created by dup(2) or  fork(2)  share
       the current file position pointer, so seeking on such files may
       be subject to race conditions.

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



Linux                         2001-09-24                      LSEEK(2)

-- 
David Pashley
david at davidpashley.com
Nihil curo de ista tua stulta superstitione.



More information about the Beds mailing list