xref: /freebsd/lib/libc/stdio/tmpnam.3 (revision 25bb73e063c17cd9048cf60100dbc0ac5177e94a)
158f0484fSRodney W. Grimes.\" Copyright (c) 1988, 1991, 1993
258f0484fSRodney W. Grimes.\"	The Regents of the University of California.  All rights reserved.
358f0484fSRodney W. Grimes.\"
458f0484fSRodney W. Grimes.\" This code is derived from software contributed to Berkeley by
558f0484fSRodney W. Grimes.\" the American National Standards Committee X3, on Information
658f0484fSRodney W. Grimes.\" Processing Systems.
758f0484fSRodney W. Grimes.\"
858f0484fSRodney W. Grimes.\" Redistribution and use in source and binary forms, with or without
958f0484fSRodney W. Grimes.\" modification, are permitted provided that the following conditions
1058f0484fSRodney W. Grimes.\" are met:
1158f0484fSRodney W. Grimes.\" 1. Redistributions of source code must retain the above copyright
1258f0484fSRodney W. Grimes.\"    notice, this list of conditions and the following disclaimer.
1358f0484fSRodney W. Grimes.\" 2. Redistributions in binary form must reproduce the above copyright
1458f0484fSRodney W. Grimes.\"    notice, this list of conditions and the following disclaimer in the
1558f0484fSRodney W. Grimes.\"    documentation and/or other materials provided with the distribution.
1658f0484fSRodney W. Grimes.\" 3. All advertising materials mentioning features or use of this software
1758f0484fSRodney W. Grimes.\"    must display the following acknowledgement:
1858f0484fSRodney W. Grimes.\"	This product includes software developed by the University of
1958f0484fSRodney W. Grimes.\"	California, Berkeley and its contributors.
2058f0484fSRodney W. Grimes.\" 4. Neither the name of the University nor the names of its contributors
2158f0484fSRodney W. Grimes.\"    may be used to endorse or promote products derived from this software
2258f0484fSRodney W. Grimes.\"    without specific prior written permission.
2358f0484fSRodney W. Grimes.\"
2458f0484fSRodney W. Grimes.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
2558f0484fSRodney W. Grimes.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
2658f0484fSRodney W. Grimes.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
2758f0484fSRodney W. Grimes.\" ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
2858f0484fSRodney W. Grimes.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
2958f0484fSRodney W. Grimes.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
3058f0484fSRodney W. Grimes.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
3158f0484fSRodney W. Grimes.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
3258f0484fSRodney W. Grimes.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
3358f0484fSRodney W. Grimes.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
3458f0484fSRodney W. Grimes.\" SUCH DAMAGE.
3558f0484fSRodney W. Grimes.\"
3658f0484fSRodney W. Grimes.\"     @(#)tmpnam.3	8.2 (Berkeley) 11/17/93
377f3dea24SPeter Wemm.\" $FreeBSD$
3858f0484fSRodney W. Grimes.\"
3958f0484fSRodney W. Grimes.Dd November 17, 1993
4058f0484fSRodney W. Grimes.Dt TMPFILE 3
4158f0484fSRodney W. Grimes.Os
4258f0484fSRodney W. Grimes.Sh NAME
4358f0484fSRodney W. Grimes.Nm tempnam ,
4458f0484fSRodney W. Grimes.Nm tmpfile ,
4558f0484fSRodney W. Grimes.Nm tmpnam
4658f0484fSRodney W. Grimes.Nd temporary file routines
4725bb73e0SAlexey Zelkin.Sh LIBRARY
4825bb73e0SAlexey Zelkin.Lb libc
4958f0484fSRodney W. Grimes.Sh SYNOPSIS
5058f0484fSRodney W. Grimes.Fd #include <stdio.h>
5158f0484fSRodney W. Grimes.Ft FILE *
5258f0484fSRodney W. Grimes.Fn tmpfile void
5358f0484fSRodney W. Grimes.Ft char *
5458f0484fSRodney W. Grimes.Fn tmpnam "char *str"
5558f0484fSRodney W. Grimes.Ft char *
5658f0484fSRodney W. Grimes.Fn tempnam "const char *tmpdir" "const char *prefix"
5758f0484fSRodney W. Grimes.Sh DESCRIPTION
5858f0484fSRodney W. GrimesThe
5958f0484fSRodney W. Grimes.Fn tmpfile
6058f0484fSRodney W. Grimesfunction
6158f0484fSRodney W. Grimesreturns a pointer to a stream associated with a file descriptor returned
6258f0484fSRodney W. Grimesby the routine
6358f0484fSRodney W. Grimes.Xr mkstemp 3 .
6458f0484fSRodney W. GrimesThe created file is unlinked before
6558f0484fSRodney W. Grimes.Fn tmpfile
6658f0484fSRodney W. Grimesreturns, causing the file to be automatically deleted when the last
6758f0484fSRodney W. Grimesreference to it is closed.
6858f0484fSRodney W. GrimesThe file is opened with the access value
6958f0484fSRodney W. Grimes.Ql w+ .
7058f0484fSRodney W. Grimes.Pp
7158f0484fSRodney W. GrimesThe
7258f0484fSRodney W. Grimes.Fn tmpnam
7358f0484fSRodney W. Grimesfunction
7458f0484fSRodney W. Grimesreturns a pointer to a file name, in the
7558f0484fSRodney W. Grimes.Dv P_tmpdir
7658f0484fSRodney W. Grimesdirectory, which
7758f0484fSRodney W. Grimesdid not reference an existing file at some indeterminate point in the
7858f0484fSRodney W. Grimespast.
7958f0484fSRodney W. Grimes.Dv P_tmpdir
8058f0484fSRodney W. Grimesis defined in the include file
8158f0484fSRodney W. Grimes.Aq Pa stdio.h .
8258f0484fSRodney W. GrimesIf the argument
833076db19SKris Kennaway.Fa str
8458f0484fSRodney W. Grimesis
8558f0484fSRodney W. Grimes.Pf non- Dv NULL ,
8658f0484fSRodney W. Grimesthe file name is copied to the buffer it references.
8758f0484fSRodney W. GrimesOtherwise, the file name is copied to a static buffer.
8858f0484fSRodney W. GrimesIn either case,
8958f0484fSRodney W. Grimes.Fn tmpnam
9058f0484fSRodney W. Grimesreturns a pointer to the file name.
9158f0484fSRodney W. Grimes.Pp
9258f0484fSRodney W. GrimesThe buffer referenced by
933076db19SKris Kennaway.Fa str
9458f0484fSRodney W. Grimesis expected to be at least
9558f0484fSRodney W. Grimes.Dv L_tmpnam
9658f0484fSRodney W. Grimesbytes in length.
9758f0484fSRodney W. Grimes.Dv L_tmpnam
9858f0484fSRodney W. Grimesis defined in the include file
9958f0484fSRodney W. Grimes.Aq Pa stdio.h .
10058f0484fSRodney W. Grimes.Pp
10158f0484fSRodney W. GrimesThe
10258f0484fSRodney W. Grimes.Fn tempnam
10358f0484fSRodney W. Grimesfunction
10458f0484fSRodney W. Grimesis similar to
10558f0484fSRodney W. Grimes.Fn tmpnam ,
10658f0484fSRodney W. Grimesbut provides the ability to specify the directory which will
10758f0484fSRodney W. Grimescontain the temporary file and the file name prefix.
10858f0484fSRodney W. Grimes.Pp
10958f0484fSRodney W. GrimesThe environment variable
11058f0484fSRodney W. Grimes.Ev TMPDIR
11158f0484fSRodney W. Grimes(if set), the argument
11258f0484fSRodney W. Grimes.Fa tmpdir
11358f0484fSRodney W. Grimes(if
11458f0484fSRodney W. Grimes.Pf non- Dv NULL ) ,
11558f0484fSRodney W. Grimesthe directory
11658f0484fSRodney W. Grimes.Dv P_tmpdir ,
11758f0484fSRodney W. Grimesand the directory
11858f0484fSRodney W. Grimes.Pa /tmp
11958f0484fSRodney W. Grimesare tried, in the listed order, as directories in which to store the
12058f0484fSRodney W. Grimestemporary file.
12158f0484fSRodney W. Grimes.Pp
12258f0484fSRodney W. GrimesThe argument
12358f0484fSRodney W. Grimes.Fa prefix ,
12458f0484fSRodney W. Grimesif
12558f0484fSRodney W. Grimes.Pf non- Dv NULL ,
12658f0484fSRodney W. Grimesis used to specify a file name prefix, which will be the
12758f0484fSRodney W. Grimesfirst part of the created file name.
12858f0484fSRodney W. Grimes.Fn Tempnam
12958f0484fSRodney W. Grimesallocates memory in which to store the file name; the returned pointer
13058f0484fSRodney W. Grimesmay be used as a subsequent argument to
13158f0484fSRodney W. Grimes.Xr free 3 .
13258f0484fSRodney W. Grimes.Sh RETURN VALUES
13358f0484fSRodney W. GrimesThe
13458f0484fSRodney W. Grimes.Fn tmpfile
13558f0484fSRodney W. Grimesfunction
13658f0484fSRodney W. Grimesreturns a pointer to an open file stream on success, and a
13758f0484fSRodney W. Grimes.Dv NULL
13858f0484fSRodney W. Grimespointer
13958f0484fSRodney W. Grimeson error.
14058f0484fSRodney W. Grimes.Pp
14158f0484fSRodney W. GrimesThe
14258f0484fSRodney W. Grimes.Fn tmpnam
14358f0484fSRodney W. Grimesand
14458f0484fSRodney W. Grimes.Fn tempfile
14558f0484fSRodney W. Grimesfunctions
14658f0484fSRodney W. Grimesreturn a pointer to a file name on success, and a
14758f0484fSRodney W. Grimes.Dv NULL
14858f0484fSRodney W. Grimespointer
14958f0484fSRodney W. Grimeson error.
15058f0484fSRodney W. Grimes.Sh ERRORS
15158f0484fSRodney W. GrimesThe
15258f0484fSRodney W. Grimes.Fn tmpfile
15358f0484fSRodney W. Grimesfunction
15458f0484fSRodney W. Grimesmay fail and set the global variable
15558f0484fSRodney W. Grimes.Va errno
15658f0484fSRodney W. Grimesfor any of the errors specified for the library functions
15758f0484fSRodney W. Grimes.Xr fdopen 3
15858f0484fSRodney W. Grimesor
15958f0484fSRodney W. Grimes.Xr mkstemp 3 .
16058f0484fSRodney W. Grimes.Pp
16158f0484fSRodney W. GrimesThe
16258f0484fSRodney W. Grimes.Fn tmpnam
16358f0484fSRodney W. Grimesfunction
16458f0484fSRodney W. Grimesmay fail and set
16558f0484fSRodney W. Grimes.Va errno
16658f0484fSRodney W. Grimesfor any of the errors specified for the library function
16758f0484fSRodney W. Grimes.Xr mktemp 3 .
16858f0484fSRodney W. Grimes.Pp
16958f0484fSRodney W. GrimesThe
17058f0484fSRodney W. Grimes.Fn tempnam
17158f0484fSRodney W. Grimesfunction
17258f0484fSRodney W. Grimesmay fail and set
17358f0484fSRodney W. Grimes.Va errno
17458f0484fSRodney W. Grimesfor any of the errors specified for the library functions
17558f0484fSRodney W. Grimes.Xr malloc 3
17658f0484fSRodney W. Grimesor
17758f0484fSRodney W. Grimes.Xr mktemp 3 .
17858f0484fSRodney W. Grimes.Sh SEE ALSO
17958f0484fSRodney W. Grimes.Xr mkstemp 3 ,
18058f0484fSRodney W. Grimes.Xr mktemp 3
18158f0484fSRodney W. Grimes.Sh STANDARDS
18258f0484fSRodney W. GrimesThe
18358f0484fSRodney W. Grimes.Fn tmpfile
18458f0484fSRodney W. Grimesand
18558f0484fSRodney W. Grimes.Fn tmpnam
18658f0484fSRodney W. Grimesfunctions
18758f0484fSRodney W. Grimesconform to
18858f0484fSRodney W. Grimes.St -ansiC .
18958f0484fSRodney W. Grimes.Sh BUGS
19058f0484fSRodney W. GrimesThese interfaces are provided for System V and
19158f0484fSRodney W. Grimes.Tn ANSI
19258f0484fSRodney W. Grimescompatibility only.
19358f0484fSRodney W. GrimesThe
19458f0484fSRodney W. Grimes.Xr mkstemp 3
19558f0484fSRodney W. Grimesinterface is strongly preferred.
19658f0484fSRodney W. Grimes.Pp
19758f0484fSRodney W. GrimesThere are four important problems with these interfaces (as well as
19858f0484fSRodney W. Grimeswith the historic
19958f0484fSRodney W. Grimes.Xr mktemp 3
20058f0484fSRodney W. Grimesinterface).
20158f0484fSRodney W. GrimesFirst, there is an obvious race between file name selection and file
20258f0484fSRodney W. Grimescreation and deletion.
20358f0484fSRodney W. GrimesSecond, most historic implementations provide only a limited number
20458f0484fSRodney W. Grimesof possible temporary file names (usually 26) before file names will
20558f0484fSRodney W. Grimesstart being recycled.
20658f0484fSRodney W. GrimesThird, the System V implementations of these functions (and of
207064f0074SMike Pritchard.Xr mktemp 3 )
20858f0484fSRodney W. Grimesuse the
20958f0484fSRodney W. Grimes.Xr access 2
21058f0484fSRodney W. Grimesfunction to determine whether or not the temporary file may be created.
21158f0484fSRodney W. GrimesThis has obvious ramifications for setuid or setgid programs, complicating
21258f0484fSRodney W. Grimesthe portable use of these interfaces in such programs.
21358f0484fSRodney W. GrimesFinally, there is no specification of the permissions with which the
21458f0484fSRodney W. Grimestemporary files are created.
21558f0484fSRodney W. Grimes.Pp
21658f0484fSRodney W. GrimesThis implementation does not have these flaws, but portable software
21758f0484fSRodney W. Grimescannot depend on that.
21858f0484fSRodney W. GrimesIn particular, the
21958f0484fSRodney W. Grimes.Fn tmpfile
22058f0484fSRodney W. Grimesinterface should not be used in software expected to be used on other systems
22158f0484fSRodney W. Grimesif there is any possibility that the user does not wish the temporary file to
22258f0484fSRodney W. Grimesbe publicly readable and writable.
223