1<html lang="en"> 2<head> 3<title>mktemp - Untitled</title> 4<meta http-equiv="Content-Type" content="text/html"> 5<meta name="description" content="Untitled"> 6<meta name="generator" content="makeinfo 4.13"> 7<link title="Top" rel="start" href="index.html#Top"> 8<link rel="up" href="Stdio.html#Stdio" title="Stdio"> 9<link rel="prev" href="getwchar.html#getwchar" title="getwchar"> 10<link rel="next" href="open_005fmemstream.html#open_005fmemstream" title="open_memstream"> 11<link href="http://www.gnu.org/software/texinfo/" rel="generator-home" title="Texinfo Homepage"> 12<meta http-equiv="Content-Style-Type" content="text/css"> 13<style type="text/css"><!-- 14 pre.display { font-family:inherit } 15 pre.format { font-family:inherit } 16 pre.smalldisplay { font-family:inherit; font-size:smaller } 17 pre.smallformat { font-family:inherit; font-size:smaller } 18 pre.smallexample { font-size:smaller } 19 pre.smalllisp { font-size:smaller } 20 span.sc { font-variant:small-caps } 21 span.roman { font-family:serif; font-weight:normal; } 22 span.sansserif { font-family:sans-serif; font-weight:normal; } 23--></style> 24<link rel="stylesheet" type="text/css" href="../cs.css"> 25</head> 26<body> 27<div class="node"> 28<a name="mktemp"></a> 29<p> 30Next: <a rel="next" accesskey="n" href="open_005fmemstream.html#open_005fmemstream">open_memstream</a>, 31Previous: <a rel="previous" accesskey="p" href="getwchar.html#getwchar">getwchar</a>, 32Up: <a rel="up" accesskey="u" href="Stdio.html#Stdio">Stdio</a> 33<hr> 34</div> 35 36<h3 class="section">4.41 <code>mktemp</code>, <code>mkstemp</code>, <code>mkostemp</code>, <code>mkstemps</code>,</h3> 37 38<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> 39<pre class="example"> #include <stdlib.h> 40 char *mktemp(char *<var>path</var>); 41 char *mkdtemp(char *<var>path</var>); 42 int mkstemp(char *<var>path</var>); 43 int mkstemps(char *<var>path</var>, int <var>suffixlen</var>); 44 int mkostemp(char *<var>path</var>, int <var>flags</var>); 45 int mkostemps(char *<var>path</var>, int <var>suffixlen</var>, int <var>flags</var>); 46 47 char *_mktemp_r(struct _reent *<var>reent</var>, char *<var>path</var>); 48 char *_mkdtemp_r(struct _reent *<var>reent</var>, char *<var>path</var>); 49 int *_mkstemp_r(struct _reent *<var>reent</var>, char *<var>path</var>); 50 int *_mkstemps_r(struct _reent *<var>reent</var>, char *<var>path</var>, int <var>len</var>); 51 int *_mkostemp_r(struct _reent *<var>reent</var>, char *<var>path</var>, 52 int <var>flags</var>); 53 int *_mkostemps_r(struct _reent *<var>reent</var>, char *<var>path</var>, int <var>len</var>, 54 int <var>flags</var>); 55 56</pre> 57 <p><strong>Description</strong><br> 58<code>mktemp</code>, <code>mkstemp</code>, and <code>mkstemps</code> attempt to generate a file name 59that is not yet in use for any existing file. <code>mkstemp</code> and <code>mkstemps</code> 60create the file and open it for reading and writing; <code>mktemp</code> simply 61generates the file name (making <code>mktemp</code> a security risk). <code>mkostemp</code> 62and <code>mkostemps</code> allow the addition of other <code>open</code> flags, such 63as <code>O_CLOEXEC</code>, <code>O_APPEND</code>, or <code>O_SYNC</code>. On platforms with a 64separate text mode, <code>mkstemp</code> forces <code>O_BINARY</code>, while <code>mkostemp</code> 65allows the choice between <code>O_BINARY</code>, <code>O_TEXT</code>, or 0 for default. 66<code>mkdtemp</code> attempts to create a directory instead of a file, with a 67permissions mask of 0700. 68 69 <p>You supply a simple pattern for the generated file name, as the string 70at <var>path</var>. The pattern should be a valid filename (including path 71information if you wish) ending with at least six `<code>X</code>' 72characters. The generated filename will match the leading part of the 73name you supply, with the trailing `<code>X</code>' characters replaced by some 74combination of digits and letters. With <code>mkstemps</code>, the `<code>X</code>' 75characters end <var>suffixlen</var> bytes before the end of the string. 76 77 <p>The alternate functions <code>_mktemp_r</code>, <code>_mkdtemp_r</code>, <code>_mkstemp_r</code>, 78<code>_mkostemp_r</code>, <code>_mkostemps_r</code>, and <code>_mkstemps_r</code> are reentrant 79versions. The extra argument <var>reent</var> is a pointer to a reentrancy 80structure. 81 82 <p><br> 83<strong>Returns</strong><br> 84<code>mktemp</code> returns the pointer <var>path</var> to the modified string 85representing an unused filename, unless it could not generate one, or 86the pattern you provided is not suitable for a filename; in that case, 87it returns <code>NULL</code>. Be aware that there is an inherent race between 88generating the name and attempting to create a file by that name; 89you are advised to use <code>O_EXCL|O_CREAT</code>. 90 91 <p><code>mkdtemp</code> returns the pointer <var>path</var> to the modified string if the 92directory was created, otherwise it returns <code>NULL</code>. 93 94 <p><code>mkstemp</code>, <code>mkstemps</code>, <code>mkostemp</code>, and <code>mkostemps</code> return a file 95descriptor to the newly created file, unless it could not generate an 96unused filename, or the pattern you provided is not suitable for a 97filename; in that case, it returns <code>-1</code>. 98 99 <p><br> 100<strong>Portability</strong><br> 101ANSI C does not require either <code>mktemp</code> or <code>mkstemp</code>; the System 102V Interface Definition requires <code>mktemp</code> as of Issue 2. POSIX 2001 103requires <code>mkstemp</code>, and POSIX 2008 requires <code>mkdtemp</code> while 104deprecating <code>mktemp</code>. <code>mkstemps</code>, <code>mkostemp</code>, and <code>mkostemps</code> 105are not standardized. 106 107 <p>Supporting OS subroutines required: <code>getpid</code>, <code>mkdir</code>, <code>open</code>, <code>stat</code>. 108 109 <p><br> 110 111 </body></html> 112 113