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