xref: /freebsd/lib/libc/stdio/tmpnam.3 (revision 9e5787d2284e187abb5b654d924394a65772e004)
1.\" Copyright (c) 1988, 1991, 1993
2.\"	The Regents of the University of California.  All rights reserved.
3.\"
4.\" This code is derived from software contributed to Berkeley by
5.\" the American National Standards Committee X3, on Information
6.\" Processing Systems.
7.\"
8.\" Redistribution and use in source and binary forms, with or without
9.\" modification, are permitted provided that the following conditions
10.\" are met:
11.\" 1. Redistributions of source code must retain the above copyright
12.\"    notice, this list of conditions and the following disclaimer.
13.\" 2. Redistributions in binary form must reproduce the above copyright
14.\"    notice, this list of conditions and the following disclaimer in the
15.\"    documentation and/or other materials provided with the distribution.
16.\" 3. Neither the name of the University nor the names of its contributors
17.\"    may be used to endorse or promote products derived from this software
18.\"    without specific prior written permission.
19.\"
20.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
21.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
22.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
23.\" ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
24.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
25.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
26.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
27.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
28.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
29.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
30.\" SUCH DAMAGE.
31.\"
32.\"     @(#)tmpnam.3	8.2 (Berkeley) 11/17/93
33.\" $FreeBSD$
34.\"
35.Dd August 7, 2020
36.Dt TMPFILE 3
37.Os
38.Sh NAME
39.Nm tempnam ,
40.Nm tmpfile ,
41.Nm tmpnam
42.Nd temporary file routines
43.Sh LIBRARY
44.Lb libc
45.Sh SYNOPSIS
46.In stdio.h
47.Ft FILE *
48.Fn tmpfile void
49.Ft char *
50.Fn tmpnam "char *str"
51.Ft char *
52.Fn tempnam "const char *tmpdir" "const char *prefix"
53.Sh DESCRIPTION
54The
55.Fn tmpfile
56function
57returns a pointer to a stream associated with a file descriptor returned
58by the routine
59.Xr mkstemp 3 .
60The created file is unlinked before
61.Fn tmpfile
62returns, causing the file to be automatically deleted when the last
63reference to it is closed.
64The file is opened with the access value
65.Ql w+ .
66The file is created in the directory determined by the environment variable
67.Ev TMPDIR
68if set.
69The default location if
70.Ev TMPDIR
71is not set is
72.Pa /tmp .
73.Pp
74The
75.Fn tmpnam
76function
77returns a pointer to a file name, in the
78.Dv P_tmpdir
79directory, which
80did not reference an existing file at some indeterminate point in the
81past.
82.Dv P_tmpdir
83is defined in the include file
84.In stdio.h .
85If the argument
86.Fa str
87is
88.Pf non- Dv NULL ,
89the file name is copied to the buffer it references.
90Otherwise, the file name is copied to a static buffer.
91In either case,
92.Fn tmpnam
93returns a pointer to the file name.
94.Pp
95The buffer referenced by
96.Fa str
97is expected to be at least
98.Dv L_tmpnam
99bytes in length.
100.Dv L_tmpnam
101is defined in the include file
102.In stdio.h .
103.Pp
104The
105.Fn tempnam
106function
107is similar to
108.Fn tmpnam ,
109but provides the ability to specify the directory which will
110contain the temporary file and the file name prefix.
111.Pp
112The environment variable
113.Ev TMPDIR
114(if set), the argument
115.Fa tmpdir
116(if
117.Pf non- Dv NULL ) ,
118the directory
119.Dv P_tmpdir ,
120and the directory
121.Pa /tmp
122are tried, in the listed order, as directories in which to store the
123temporary file.
124.Pp
125The argument
126.Fa prefix ,
127if
128.Pf non- Dv NULL ,
129is used to specify a file name prefix, which will be the
130first part of the created file name.
131The
132.Fn tempnam
133function
134allocates memory in which to store the file name; the returned pointer
135may be used as a subsequent argument to
136.Xr free 3 .
137.Sh RETURN VALUES
138The
139.Fn tmpfile
140function
141returns a pointer to an open file stream on success, and a
142.Dv NULL
143pointer
144on error.
145.Pp
146The
147.Fn tmpnam
148and
149.Fn tempfile
150functions
151return a pointer to a file name on success, and a
152.Dv NULL
153pointer
154on error.
155.Sh ENVIRONMENT
156.Bl -tag -width Ds
157.It Ev TMPDIR
158.Pf [ Fn tempnam
159and
160.Fn tmpfile
161only]
162If set,
163the directory in which the temporary file is stored.
164.Ev TMPDIR
165is ignored for processes
166for which
167.Xr issetugid 2
168is true.
169.El
170.Sh COMPATIBILITY
171These interfaces are provided from System V and
172.Tn ANSI
173compatibility only.
174.Pp
175Most historic implementations of these functions provide
176only a limited number of possible temporary file names
177(usually 26)
178before file names will start being recycled.
179System V implementations of these functions
180(and of
181.Xr mktemp 3 )
182use the
183.Xr access 2
184system call to determine whether or not the temporary file
185may be created.
186This has obvious ramifications for setuid or setgid programs,
187complicating the portable use of these interfaces in such programs.
188.Pp
189The
190.Fn tmpfile
191interface should not be used in software expected to be used on other systems
192if there is any possibility that the user does not wish the temporary file to
193be publicly readable and writable.
194.Sh ERRORS
195The
196.Fn tmpfile
197function
198may fail and set the global variable
199.Va errno
200for any of the errors specified for the library functions
201.Xr fdopen 3
202or
203.Xr mkstemp 3 .
204.Pp
205The
206.Fn tmpnam
207function
208may fail and set
209.Va errno
210for any of the errors specified for the library function
211.Xr mktemp 3 .
212.Pp
213The
214.Fn tempnam
215function
216may fail and set
217.Va errno
218for any of the errors specified for the library functions
219.Xr malloc 3
220or
221.Xr mktemp 3 .
222.Sh SEE ALSO
223.Xr mkstemp 3 ,
224.Xr mktemp 3
225.Sh STANDARDS
226The
227.Fn tmpfile
228and
229.Fn tmpnam
230functions
231conform to
232.St -isoC .
233.Sh SECURITY CONSIDERATIONS
234The
235.Fn tmpnam
236and
237.Fn tempnam
238functions are susceptible to a race condition
239occurring between the selection of the file name
240and the creation of the file,
241which allows malicious users
242to potentially overwrite arbitrary files in the system,
243depending on the level of privilege of the running program.
244Additionally, there is no means by which
245file permissions may be specified.
246It is strongly suggested that
247.Xr mkstemp 3
248be used in place of these functions.
249