xref: /freebsd/lib/libsys/truncate.2 (revision 8269e7673cf033aba67dab8264fe719920c70f87)
1*8269e767SBrooks Davis.\" Copyright (c) 1983, 1991, 1993
2*8269e767SBrooks Davis.\"	The Regents of the University of California.  All rights reserved.
3*8269e767SBrooks Davis.\"
4*8269e767SBrooks Davis.\" Redistribution and use in source and binary forms, with or without
5*8269e767SBrooks Davis.\" modification, are permitted provided that the following conditions
6*8269e767SBrooks Davis.\" are met:
7*8269e767SBrooks Davis.\" 1. Redistributions of source code must retain the above copyright
8*8269e767SBrooks Davis.\"    notice, this list of conditions and the following disclaimer.
9*8269e767SBrooks Davis.\" 2. Redistributions in binary form must reproduce the above copyright
10*8269e767SBrooks Davis.\"    notice, this list of conditions and the following disclaimer in the
11*8269e767SBrooks Davis.\"    documentation and/or other materials provided with the distribution.
12*8269e767SBrooks Davis.\" 3. Neither the name of the University nor the names of its contributors
13*8269e767SBrooks Davis.\"    may be used to endorse or promote products derived from this software
14*8269e767SBrooks Davis.\"    without specific prior written permission.
15*8269e767SBrooks Davis.\"
16*8269e767SBrooks Davis.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
17*8269e767SBrooks Davis.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
18*8269e767SBrooks Davis.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
19*8269e767SBrooks Davis.\" ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
20*8269e767SBrooks Davis.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
21*8269e767SBrooks Davis.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
22*8269e767SBrooks Davis.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
23*8269e767SBrooks Davis.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
24*8269e767SBrooks Davis.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
25*8269e767SBrooks Davis.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
26*8269e767SBrooks Davis.\" SUCH DAMAGE.
27*8269e767SBrooks Davis.\"
28*8269e767SBrooks Davis.Dd March 30, 2020
29*8269e767SBrooks Davis.Dt TRUNCATE 2
30*8269e767SBrooks Davis.Os
31*8269e767SBrooks Davis.Sh NAME
32*8269e767SBrooks Davis.Nm truncate ,
33*8269e767SBrooks Davis.Nm ftruncate
34*8269e767SBrooks Davis.Nd truncate or extend a file to a specified length
35*8269e767SBrooks Davis.Sh LIBRARY
36*8269e767SBrooks Davis.Lb libc
37*8269e767SBrooks Davis.Sh SYNOPSIS
38*8269e767SBrooks Davis.In unistd.h
39*8269e767SBrooks Davis.Ft int
40*8269e767SBrooks Davis.Fn truncate "const char *path" "off_t length"
41*8269e767SBrooks Davis.Ft int
42*8269e767SBrooks Davis.Fn ftruncate "int fd" "off_t length"
43*8269e767SBrooks Davis.Sh DESCRIPTION
44*8269e767SBrooks DavisThe
45*8269e767SBrooks Davis.Fn truncate
46*8269e767SBrooks Davissystem call
47*8269e767SBrooks Daviscauses the file named by
48*8269e767SBrooks Davis.Fa path
49*8269e767SBrooks Davisor referenced by
50*8269e767SBrooks Davis.Fa fd
51*8269e767SBrooks Davisto be truncated or extended to
52*8269e767SBrooks Davis.Fa length
53*8269e767SBrooks Davisbytes in size.
54*8269e767SBrooks DavisIf the file
55*8269e767SBrooks Daviswas larger than this size, the extra data
56*8269e767SBrooks Davisis lost.
57*8269e767SBrooks DavisIf the file was smaller than this size,
58*8269e767SBrooks Davisit will be extended as if by writing bytes
59*8269e767SBrooks Daviswith the value zero.
60*8269e767SBrooks Davis.Pp
61*8269e767SBrooks DavisThe
62*8269e767SBrooks Davis.Fn ftruncate
63*8269e767SBrooks Davissystem call causes the file or shared memory object backing the file descriptor
64*8269e767SBrooks Davis.Fa fd
65*8269e767SBrooks Davisto be truncated or extended to
66*8269e767SBrooks Davis.Fa length
67*8269e767SBrooks Davisbytes in size.
68*8269e767SBrooks DavisThe file descriptor must be a valid file descriptor open for writing.
69*8269e767SBrooks DavisThe file position pointer associated with the file descriptor
70*8269e767SBrooks Davis.Fa fd
71*8269e767SBrooks Daviswill not be modified.
72*8269e767SBrooks Davis.Sh RETURN VALUES
73*8269e767SBrooks Davis.Rv -std
74*8269e767SBrooks DavisIf the file to be modified is not a directory or
75*8269e767SBrooks Davisa regular file, the
76*8269e767SBrooks Davis.Fn truncate
77*8269e767SBrooks Daviscall has no effect and returns the value 0.
78*8269e767SBrooks Davis.Sh ERRORS
79*8269e767SBrooks DavisThe
80*8269e767SBrooks Davis.Fn truncate
81*8269e767SBrooks Davissystem call
82*8269e767SBrooks Davissucceeds unless:
83*8269e767SBrooks Davis.Bl -tag -width Er
84*8269e767SBrooks Davis.It Bq Er ENOTDIR
85*8269e767SBrooks DavisA component of the path prefix is not a directory.
86*8269e767SBrooks Davis.It Bq Er ENAMETOOLONG
87*8269e767SBrooks DavisA component of a pathname exceeded 255 characters,
88*8269e767SBrooks Davisor an entire path name exceeded 1023 characters.
89*8269e767SBrooks Davis.It Bq Er ENOENT
90*8269e767SBrooks DavisThe named file does not exist.
91*8269e767SBrooks Davis.It Bq Er EACCES
92*8269e767SBrooks DavisSearch permission is denied for a component of the path prefix.
93*8269e767SBrooks Davis.It Bq Er EACCES
94*8269e767SBrooks DavisThe named file is not writable by the user.
95*8269e767SBrooks Davis.It Bq Er ELOOP
96*8269e767SBrooks DavisToo many symbolic links were encountered in translating the pathname.
97*8269e767SBrooks Davis.It Bq Er EPERM
98*8269e767SBrooks DavisThe named file has its immutable or append-only flag set, see the
99*8269e767SBrooks Davis.Xr chflags 2
100*8269e767SBrooks Davismanual page for more information.
101*8269e767SBrooks Davis.It Bq Er EISDIR
102*8269e767SBrooks DavisThe named file is a directory.
103*8269e767SBrooks Davis.It Bq Er EROFS
104*8269e767SBrooks DavisThe named file resides on a read-only file system.
105*8269e767SBrooks Davis.It Bq Er ETXTBSY
106*8269e767SBrooks DavisThe file is a pure procedure (shared text) file that is being executed.
107*8269e767SBrooks Davis.It Bq Er EFBIG
108*8269e767SBrooks DavisThe
109*8269e767SBrooks Davis.Fa length
110*8269e767SBrooks Davisargument was greater than the maximum file size.
111*8269e767SBrooks Davis.It Bq Er EINVAL
112*8269e767SBrooks DavisThe
113*8269e767SBrooks Davis.Fa length
114*8269e767SBrooks Davisargument was less than 0.
115*8269e767SBrooks Davis.It Bq Er EIO
116*8269e767SBrooks DavisAn I/O error occurred updating the inode.
117*8269e767SBrooks Davis.It Bq Er EINTEGRITY
118*8269e767SBrooks DavisCorrupted data was detected while reading from the file system.
119*8269e767SBrooks Davis.It Bq Er EFAULT
120*8269e767SBrooks DavisThe
121*8269e767SBrooks Davis.Fa path
122*8269e767SBrooks Davisargument
123*8269e767SBrooks Davispoints outside the process's allocated address space.
124*8269e767SBrooks Davis.El
125*8269e767SBrooks Davis.Pp
126*8269e767SBrooks DavisThe
127*8269e767SBrooks Davis.Fn ftruncate
128*8269e767SBrooks Davissystem call
129*8269e767SBrooks Davissucceeds unless:
130*8269e767SBrooks Davis.Bl -tag -width Er
131*8269e767SBrooks Davis.It Bq Er EBADF
132*8269e767SBrooks DavisThe
133*8269e767SBrooks Davis.Fa fd
134*8269e767SBrooks Davisargument
135*8269e767SBrooks Davisis not a valid descriptor.
136*8269e767SBrooks Davis.It Bq Er EINVAL
137*8269e767SBrooks DavisThe
138*8269e767SBrooks Davis.Fa fd
139*8269e767SBrooks Davisargument
140*8269e767SBrooks Davisreferences a file descriptor that is not a regular file or shared memory object.
141*8269e767SBrooks Davis.It Bq Er EINVAL
142*8269e767SBrooks DavisThe
143*8269e767SBrooks Davis.Fa fd
144*8269e767SBrooks Davisdescriptor
145*8269e767SBrooks Davisis not open for writing.
146*8269e767SBrooks Davis.El
147*8269e767SBrooks Davis.Sh SEE ALSO
148*8269e767SBrooks Davis.Xr chflags 2 ,
149*8269e767SBrooks Davis.Xr open 2 ,
150*8269e767SBrooks Davis.Xr shm_open 2
151*8269e767SBrooks Davis.Sh HISTORY
152*8269e767SBrooks DavisThe
153*8269e767SBrooks Davis.Fn truncate
154*8269e767SBrooks Davisand
155*8269e767SBrooks Davis.Fn ftruncate
156*8269e767SBrooks Davissystem calls appeared in
157*8269e767SBrooks Davis.Bx 4.2 .
158*8269e767SBrooks Davis.Sh BUGS
159*8269e767SBrooks DavisThese calls should be generalized to allow ranges
160*8269e767SBrooks Davisof bytes in a file to be discarded.
161*8269e767SBrooks Davis.Pp
162*8269e767SBrooks DavisHistorically, the use of
163*8269e767SBrooks Davis.Fn truncate
164*8269e767SBrooks Davisor
165*8269e767SBrooks Davis.Fn ftruncate
166*8269e767SBrooks Davisto extend a file was not portable, but this behavior became required in
167*8269e767SBrooks Davis.St -p1003.1-2008 .
168