lseek.2 6.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244
  1. .\" Copyright (c) 1980, 1991, 1993
  2. .\" The Regents of the University of California. All rights reserved.
  3. .\"
  4. .\" Redistribution and use in source and binary forms, with or without
  5. .\" modification, are permitted provided that the following conditions
  6. .\" are met:
  7. .\" 1. Redistributions of source code must retain the above copyright
  8. .\" notice, this list of conditions and the following disclaimer.
  9. .\" 2. Redistributions in binary form must reproduce the above copyright
  10. .\" notice, this list of conditions and the following disclaimer in the
  11. .\" documentation and/or other materials provided with the distribution.
  12. .\" 3. Neither the name of the University nor the names of its contributors
  13. .\" may be used to endorse or promote products derived from this software
  14. .\" without specific prior written permission.
  15. .\"
  16. .\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
  17. .\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  18. .\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  19. .\" ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
  20. .\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  21. .\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
  22. .\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
  23. .\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
  24. .\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
  25. .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  26. .\" SUCH DAMAGE.
  27. .\"
  28. .Dd July 13, 2020
  29. .Dt LSEEK 2
  30. .Os
  31. .Sh NAME
  32. .Nm lseek
  33. .Nd reposition read/write file offset
  34. .Sh LIBRARY
  35. .Lb libc
  36. .Sh SYNOPSIS
  37. .In unistd.h
  38. .Ft off_t
  39. .Fn lseek "int fildes" "off_t offset" "int whence"
  40. .Sh DESCRIPTION
  41. The
  42. .Fn lseek
  43. system call repositions the offset of the file descriptor
  44. .Fa fildes
  45. to the
  46. argument
  47. .Fa offset
  48. according to the directive
  49. .Fa whence .
  50. The argument
  51. .Fa fildes
  52. must be an open
  53. file descriptor.
  54. The
  55. .Fn lseek
  56. system call
  57. repositions the file position pointer associated with the file
  58. descriptor
  59. .Fa fildes
  60. as follows:
  61. .Bl -item -offset indent
  62. .It
  63. If
  64. .Fa whence
  65. is
  66. .Dv SEEK_SET ,
  67. the offset is set to
  68. .Fa offset
  69. bytes.
  70. .It
  71. If
  72. .Fa whence
  73. is
  74. .Dv SEEK_CUR ,
  75. the offset is set to its current location plus
  76. .Fa offset
  77. bytes.
  78. .It
  79. If
  80. .Fa whence
  81. is
  82. .Dv SEEK_END ,
  83. the offset is set to the size of the
  84. file plus
  85. .Fa offset
  86. bytes.
  87. .It
  88. If
  89. .Fa whence
  90. is
  91. .Dv SEEK_HOLE ,
  92. the offset is set to the start of the next hole greater than or equal
  93. to the supplied
  94. .Fa offset .
  95. The definition of a hole is provided below.
  96. .It
  97. If
  98. .Fa whence
  99. is
  100. .Dv SEEK_DATA ,
  101. the offset is set to the start of the next non-hole file region greater
  102. than or equal to the supplied
  103. .Fa offset .
  104. .El
  105. .Pp
  106. The
  107. .Fn lseek
  108. system call allows the file offset to be set beyond the end
  109. of the existing end-of-file of the file.
  110. If data is later written
  111. at this point, subsequent reads of the data in the gap return
  112. bytes of zeros (until data is actually written into the gap).
  113. However, the
  114. .Fn lseek
  115. system call does not, by itself, extend the size of a file.
  116. .Pp
  117. A
  118. .Qq hole
  119. is defined as a contiguous range of bytes in a file, all having the value of
  120. zero, but not all zeros in a file are guaranteed to be represented as holes
  121. returned with
  122. .Dv SEEK_HOLE .
  123. File systems are allowed to expose ranges of zeros with
  124. .Dv SEEK_HOLE ,
  125. but not required to.
  126. Applications can use
  127. .Dv SEEK_HOLE
  128. to optimise their behavior for ranges of zeros, but must not depend on it to
  129. find all such ranges in a file.
  130. Each file is presented as having a zero-size virtual hole at the very
  131. end of the file.
  132. The existence of a hole at the end of every data region allows for easy
  133. programming and also provides compatibility to the original implementation
  134. in Solaris.
  135. It also causes the current file size (i.e., end-of-file offset) to be returned
  136. to indicate that there are no more holes past the supplied
  137. .Fa offset .
  138. Applications should use
  139. .Fn fpathconf _PC_MIN_HOLE_SIZE
  140. or
  141. .Fn pathconf _PC_MIN_HOLE_SIZE
  142. to determine if a file system supports
  143. .Dv SEEK_HOLE .
  144. See
  145. .Xr pathconf 2 .
  146. .Pp
  147. For file systems that do not supply information about holes, the file will be
  148. represented as one entire data region.
  149. .Sh RETURN VALUES
  150. Upon successful completion,
  151. .Fn lseek
  152. returns the resulting offset location as measured in bytes from the
  153. beginning of the file.
  154. Otherwise,
  155. a value of -1 is returned and
  156. .Va errno
  157. is set to indicate
  158. the error.
  159. .Sh ERRORS
  160. The
  161. .Fn lseek
  162. system call
  163. will fail and the file position pointer will remain unchanged if:
  164. .Bl -tag -width Er
  165. .It Bq Er EBADF
  166. The
  167. .Fa fildes
  168. argument
  169. is not an open file descriptor.
  170. .It Bq Er EINVAL
  171. The
  172. .Fa whence
  173. argument
  174. is not a proper value
  175. or the resulting file offset would
  176. be negative for a non-character special file.
  177. .It Bq Er ENXIO
  178. For
  179. .Dv SEEK_DATA ,
  180. there are no more data regions past the supplied offset.
  181. Due to existence of the hole at the end of the file, for
  182. .Dv SEEK_HOLE
  183. this error is only returned when the
  184. .Fa offset
  185. already points to the end-of-file position.
  186. .It Bq Er EOVERFLOW
  187. The resulting file offset would be a value which cannot be represented
  188. correctly in an object of type
  189. .Fa off_t .
  190. .It Bq Er ESPIPE
  191. The
  192. .Fa fildes
  193. argument
  194. is associated with a pipe, socket, or FIFO.
  195. .El
  196. .Sh SEE ALSO
  197. .Xr dup 2 ,
  198. .Xr open 2 ,
  199. .Xr pathconf 2
  200. .Sh STANDARDS
  201. The
  202. .Fn lseek
  203. system call is expected to conform to
  204. .St -p1003.1-2008 .
  205. .Pp
  206. The
  207. .Dv SEEK_HOLE
  208. and
  209. .Dv SEEK_DATA
  210. directives, along with the
  211. .Er ENXIO
  212. error, are extensions to that specification.
  213. .Sh HISTORY
  214. The
  215. .Fn lseek
  216. function appeared in
  217. .At v7 .
  218. .Sh BUGS
  219. If the
  220. .Fn lseek
  221. system call is operating on a device which is incapable of seeking,
  222. it will request the seek operation and return successfully,
  223. even though no seek was performed.
  224. Because the
  225. .Ar offset
  226. argument will be stored unconditionally in the file descriptor of that device,
  227. there is no way to confirm if the seek operation succeeded or not
  228. (e.g. using the
  229. .Fn ftell
  230. function).
  231. Device types which are known to be incapable of seeking include
  232. tape drives.
  233. .Pp
  234. The
  235. .Fn lseek
  236. system call will not detect whether media are present in changeable
  237. media devices such as DVD or Blu-ray devices.
  238. A requested seek operation will therefore return sucessfully when no
  239. medium is present.
  240. .Pp
  241. This document's use of
  242. .Fa whence
  243. is incorrect English, but is maintained for historical reasons.