blob: 41a5dff32aa6e98d513f9b586cf6b877e5dc26e1 [file]
<html lang="en">
<head>
<title>mktemp - Untitled</title>
<meta http-equiv="Content-Type" content="text/html">
<meta name="description" content="Untitled">
<meta name="generator" content="makeinfo 4.13">
<link title="Top" rel="start" href="index.html#Top">
<link rel="up" href="Stdio.html#Stdio" title="Stdio">
<link rel="prev" href="getwchar.html#getwchar" title="getwchar">
<link rel="next" href="open_005fmemstream.html#open_005fmemstream" title="open_memstream">
<link href="http://www.gnu.org/software/texinfo/" rel="generator-home" title="Texinfo Homepage">
<meta http-equiv="Content-Style-Type" content="text/css">
<style type="text/css"><!--
pre.display { font-family:inherit }
pre.format { font-family:inherit }
pre.smalldisplay { font-family:inherit; font-size:smaller }
pre.smallformat { font-family:inherit; font-size:smaller }
pre.smallexample { font-size:smaller }
pre.smalllisp { font-size:smaller }
span.sc { font-variant:small-caps }
span.roman { font-family:serif; font-weight:normal; }
span.sansserif { font-family:sans-serif; font-weight:normal; }
--></style>
</head>
<body>
<div class="node">
<a name="mktemp"></a>
<p>
Next:&nbsp;<a rel="next" accesskey="n" href="open_005fmemstream.html#open_005fmemstream">open_memstream</a>,
Previous:&nbsp;<a rel="previous" accesskey="p" href="getwchar.html#getwchar">getwchar</a>,
Up:&nbsp;<a rel="up" accesskey="u" href="Stdio.html#Stdio">Stdio</a>
<hr>
</div>
<h3 class="section">4.41 <code>mktemp</code>, <code>mkstemp</code>, <code>mkostemp</code>, <code>mkstemps</code>,</h3>
<p><a name="index-mktemp-230"></a><a name="index-mkdtemp-231"></a><a name="index-mkstemp-232"></a><a name="index-mkstemps-233"></a><a name="index-mkostemp-234"></a><a name="index-mkostemps-235"></a><a name="index-g_t_005fmktemp_005fr-236"></a><a name="index-g_t_005fmkdtemp_005fr-237"></a><a name="index-g_t_005fmkstemp_005fr-238"></a><a name="index-g_t_005fmkstemps_005fr-239"></a><a name="index-g_t_005fmkostemp_005fr-240"></a><a name="index-g_t_005fmkostemps_005fr-241"></a><strong>Synopsis</strong>
<pre class="example"> #include &lt;stdlib.h&gt;
char *mktemp(char *<var>path</var>);
char *mkdtemp(char *<var>path</var>);
int mkstemp(char *<var>path</var>);
int mkstemps(char *<var>path</var>, int <var>suffixlen</var>);
int mkostemp(char *<var>path</var>, int <var>flags</var>);
int mkostemps(char *<var>path</var>, int <var>suffixlen</var>, int <var>flags</var>);
char *_mktemp_r(struct _reent *<var>reent</var>, char *<var>path</var>);
char *_mkdtemp_r(struct _reent *<var>reent</var>, char *<var>path</var>);
int *_mkstemp_r(struct _reent *<var>reent</var>, char *<var>path</var>);
int *_mkstemps_r(struct _reent *<var>reent</var>, char *<var>path</var>, int <var>len</var>);
int *_mkostemp_r(struct _reent *<var>reent</var>, char *<var>path</var>,
int <var>flags</var>);
int *_mkostemps_r(struct _reent *<var>reent</var>, char *<var>path</var>, int <var>len</var>,
int <var>flags</var>);
</pre>
<p><strong>Description</strong><br>
<code>mktemp</code>, <code>mkstemp</code>, and <code>mkstemps</code> attempt to generate a file name
that is not yet in use for any existing file. <code>mkstemp</code> and <code>mkstemps</code>
create the file and open it for reading and writing; <code>mktemp</code> simply
generates the file name (making <code>mktemp</code> a security risk). <code>mkostemp</code>
and <code>mkostemps</code> allow the addition of other <code>open</code> flags, such
as <code>O_CLOEXEC</code>, <code>O_APPEND</code>, or <code>O_SYNC</code>. On platforms with a
separate text mode, <code>mkstemp</code> forces <code>O_BINARY</code>, while <code>mkostemp</code>
allows the choice between <code>O_BINARY</code>, <code>O_TEXT</code>, or 0 for default.
<code>mkdtemp</code> attempts to create a directory instead of a file, with a
permissions mask of 0700.
<p>You supply a simple pattern for the generated file name, as the string
at <var>path</var>. The pattern should be a valid filename (including path
information if you wish) ending with at least six `<code>X</code>'
characters. The generated filename will match the leading part of the
name you supply, with the trailing `<code>X</code>' characters replaced by some
combination of digits and letters. With <code>mkstemps</code>, the `<code>X</code>'
characters end <var>suffixlen</var> bytes before the end of the string.
<p>The alternate functions <code>_mktemp_r</code>, <code>_mkdtemp_r</code>, <code>_mkstemp_r</code>,
<code>_mkostemp_r</code>, <code>_mkostemps_r</code>, and <code>_mkstemps_r</code> are reentrant
versions. The extra argument <var>reent</var> is a pointer to a reentrancy
structure.
<p><br>
<strong>Returns</strong><br>
<code>mktemp</code> returns the pointer <var>path</var> to the modified string
representing an unused filename, unless it could not generate one, or
the pattern you provided is not suitable for a filename; in that case,
it returns <code>NULL</code>. Be aware that there is an inherent race between
generating the name and attempting to create a file by that name;
you are advised to use <code>O_EXCL|O_CREAT</code>.
<p><code>mkdtemp</code> returns the pointer <var>path</var> to the modified string if the
directory was created, otherwise it returns <code>NULL</code>.
<p><code>mkstemp</code>, <code>mkstemps</code>, <code>mkostemp</code>, and <code>mkostemps</code> return a file
descriptor to the newly created file, unless it could not generate an
unused filename, or the pattern you provided is not suitable for a
filename; in that case, it returns <code>-1</code>.
<p><br>
<strong>Portability</strong><br>
ANSI C does not require either <code>mktemp</code> or <code>mkstemp</code>; the System
V Interface Definition requires <code>mktemp</code> as of Issue 2. POSIX 2001
requires <code>mkstemp</code>, and POSIX 2008 requires <code>mkdtemp</code> while
deprecating <code>mktemp</code>. <code>mkstemps</code>, <code>mkostemp</code>, and <code>mkostemps</code>
are not standardized.
<p>Supporting OS subroutines required: <code>getpid</code>, <code>mkdir</code>, <code>open</code>, <code>stat</code>.
<p><br>
</body></html>