Section (1) mktemp

Linux manual pages Section 1  


mktemp — create a temporary file or directory


mktemp [OPTION...] [TEMPLATE]


Create a temporary file or directory, safely, and print its name. TEMPLATE must contain at least 3 consecutive _zsingle_quotesz_X_zsingle_quotesz_s in last component. If TEMPLATE is not specified, use tmp.XXXXXXXXXX, and −−tmpdir is implied. Files are created u+rw, and directories u+rwx, minus umask restrictions.

−d, −−directory

create a directory, not a file

−u, −−dry−run

do not create anything; merely print a name (unsafe)

−q, −−quiet

suppress diagnostics about file/dir−creation failure


append SUFF to TEMPLATE; SUFF must not contain a slash. This option is implied if TEMPLATE does not end in X

−p DIR, −−tmpdir[=DIR/]

interpret TEMPLATE relative to DIR; if DIR is not specified, use $TMPDIR if set, else /tmp/. With this option, TEMPLATE must not be an absolute name; unlike with −t, TEMPLATE may contain slashes, but mktemp creates only the final component


interpret TEMPLATE as a single file name component, relative to a directory: $TMPDIR, if set; else the directory specified via −p; else /tmp/ [deprecated]


display this help and exit


output version information and exit


Written by Jim Meyering and Eric Blake.


GNU coreutils online help: <>

Report any translation bugs to <>


mkstemp(3), mkdtemp(3), mktemp(3)

Full documentation <>

or available locally via: info _zsingle_quotesz_(coreutils) mktemp invocation_zsingle_quotesz_


Copyright © 2019 Free Software Foundation, Inc. License GPLv3+: GNU GPL version 3 or later <>.

This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law.

Section (3) mktemp

Linux manual pages Section 3  


mktemp — make a unique temporary filename


#include <stdlib.h>
char *mktemp( char *template);
[Note] Note
Feature Test Macro Requirements for glibc (see feature_test_macros(7)):
Since glibc 2.12:
(_XOPEN_SOURCE >= 500) && ! (_POSIX_C_SOURCE >= 200112L) || /* Glibc since 2.19:
*/ _DEFAULT_SOURCE || /* Glibc <= 2.19:
Before glibc 2.12:


Never use this function; see BUGS.

The mktemp() function generates a unique temporary filename from template. The last six characters of template must be XXXXXX and these are replaced with a string that makes the filename unique. Since it will be modified, template must not be a string constant, but should be declared as a character array.


The mktemp() function always returns template. If a unique name was created, the last six bytes of template will have been modified in such a way that the resulting name is unique (i.e., does not exist already) If a unique name could not be created, template is made an empty string, and errno is set to indicate the error.



The last six characters of template were not XXXXXX.


For an explanation of the terms used in this section, see attributes(7).

Interface Attribute Value
mktemp() Thread safety MT-Safe


4.3BSD, POSIX.1-2001. POSIX.1-2008 removes the specification of mktemp().


Never use mktemp(). Some implementations follow 4.3BSD and replace XXXXXX by the current process ID and a single letter, so that at most 26 different names can be returned. Since on the one hand the names are easy to guess, and on the other hand there is a race between testing whether the name exists and opening the file, every use of mktemp() is a security risk. The race is avoided by mkstemp(3) and mkdtemp(3).


mktemp(1), mkdtemp(3), mkstemp(3), tempnam(3), tmpfile(3), tmpnam(3)


This page is part of release 4.16 of the Linux man-pages project. A description of the project, information about reporting bugs, and the latest version of this page, can be found at−pages/.

  Copyright (C) 1993 David Metcalfe (

Permission is granted to make and distribute verbatim copies of this
manual provided the copyright notice and this permission notice are
preserved on all copies.

Permission is granted to copy and distribute modified versions of this
manual under the conditions for verbatim copying, provided that the
entire resulting derived work is distributed under the terms of a
permission notice identical to this one.

Since the Linux kernel and libraries are constantly changing, this
manual page may be incorrect or out-of-date.  The author(s) assume no
responsibility for errors or omissions, or for damages resulting from
the use of the information contained herein.  The author(s) may not
have taken the same level of care in the production of this manual,
which is licensed free of charge, as they might when working

Formatted or processed versions of this manual, if unaccompanied by
the source, must acknowledge the copyright and authors of this work.

References consulted:
    Linux libc source code
    Lewine_zsingle_quotesz_s _POSIX Programmer_zsingle_quotesz_s Guide_ (O_zsingle_quotesz_Reilly & Associates, 1991)
    386BSD man pages
Modified Sat Jul 24 18:48:06 1993 by Rik Faith (
Modified Fri Jun 23 01:26:34 1995 by Andries Brouwer (
(prompted by Scott Burkett <>)
Modified Sun Mar 28 23:44:38 1999 by Andries Brouwer (