xref: /freebsd/lib/libc/stdio/tmpnam.3 (revision b9f654b163bce26de79705e77b872427c9f2afa1)
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 March 18, 2007
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
159only]
160If set,
161the directory in which the temporary file is stored.
162.Ev TMPDIR
163is ignored for processes
164for which
165.Xr issetugid 2
166is true.
167.El
168.Sh COMPATIBILITY
169These interfaces are provided from System V and
170.Tn ANSI
171compatibility only.
172.Pp
173Most historic implementations of these functions provide
174only a limited number of possible temporary file names
175(usually 26)
176before file names will start being recycled.
177System V implementations of these functions
178(and of
179.Xr mktemp 3 )
180use the
181.Xr access 2
182system call to determine whether or not the temporary file
183may be created.
184This has obvious ramifications for setuid or setgid programs,
185complicating the portable use of these interfaces in such programs.
186.Pp
187The
188.Fn tmpfile
189interface should not be used in software expected to be used on other systems
190if there is any possibility that the user does not wish the temporary file to
191be publicly readable and writable.
192.Sh ERRORS
193The
194.Fn tmpfile
195function
196may fail and set the global variable
197.Va errno
198for any of the errors specified for the library functions
199.Xr fdopen 3
200or
201.Xr mkstemp 3 .
202.Pp
203The
204.Fn tmpnam
205function
206may fail and set
207.Va errno
208for any of the errors specified for the library function
209.Xr mktemp 3 .
210.Pp
211The
212.Fn tempnam
213function
214may fail and set
215.Va errno
216for any of the errors specified for the library functions
217.Xr malloc 3
218or
219.Xr mktemp 3 .
220.Sh SEE ALSO
221.Xr mkstemp 3 ,
222.Xr mktemp 3
223.Sh STANDARDS
224The
225.Fn tmpfile
226and
227.Fn tmpnam
228functions
229conform to
230.St -isoC .
231.Sh SECURITY CONSIDERATIONS
232The
233.Fn tmpnam
234and
235.Fn tempnam
236functions are susceptible to a race condition
237occurring between the selection of the file name
238and the creation of the file,
239which allows malicious users
240to potentially overwrite arbitrary files in the system,
241depending on the level of privilege of the running program.
242Additionally, there is no means by which
243file permissions may be specified.
244It is strongly suggested that
245.Xr mkstemp 3
246be used in place of these functions.
247