The Open Group Base Specifications Issue 7
IEEE Std 1003.1, 2013 Edition
Copyright © 2001-2013 The IEEE and The Open Group

#### NAME

> mkdtemp, mkstemp - create a unique directory or file

#### SYNOPSIS

> ``[CX] #include <stdlib.h>
> char *mkdtemp(char *`template`);
> int mkstemp(char *`template`);``
> `
> `

#### DESCRIPTION

> The mkdtemp() function uses the contents of template to construct a unique directory name. The string provided in template shall be a pathname ending with six trailing `'X'` s. The mkdtemp() function shall replace each `'X'` with a character from the portable filename character set. The characters are chosen such that the resulting name does not duplicate the name of an existing file at the time of a call to mkdtemp(). The unique directory name is used to attempt to create the directory using mode 0700 as modified by the file creation mask.

> The mkstemp() function shall replace the contents of the string pointed to by template by a unique pathname, and return a file descriptor for the file open for reading and writing. The mkstemp() function shall create the file, and obtain a file descriptor for it, as if by a call to:

>     open(pathname, O_RDWR|O_CREAT|O_EXCL, S_IRUSR|S_IWUSR)

> The function thus prevents any possible race condition between testing whether the file exists and opening it for use. The string in template should look like a pathname with six trailing `'X'` s; mkstemp() replaces each `'X'` with a character from the portable filename character set. The characters are chosen such that the resulting name does not duplicate the name of an existing file at the time of a call to mkstemp().

#### RETURN VALUE

> Upon successful completion, the mkdtemp() function shall return a pointer to the string containing the directory name if it was created. Otherwise, it shall return a null pointer and shall set errno to indicate the error.

> Upon successful completion, the mkstemp() function shall return an open file descriptor. Otherwise, it shall return -1 if no suitable file could be created.

#### ERRORS

> The mkdtemp() function shall fail if:

> [EACCES]
>   Search permission is denied on a component of the path prefix, or write permission is denied on the parent directory of the directory to be created.
> [EINVAL]
>   The string pointed to by template does not end in `"XXXXXX"`.
> [ELOOP]
>   A loop exists in symbolic links encountered during resolution of the path of the directory to be created.
> [EMLINK]
>   The link count of the parent directory would exceed {LINK_MAX}.
> [ENAMETOOLONG]
>   The length of a component of a pathname is longer than {NAME_MAX}.
> [ENOENT]
>   A component of the path prefix specified by the template argument does not name an existing directory.
> [ENOSPC]
>   The file system does not contain enough space to hold the contents of the new directory or to extend the parent directory of the new directory.
> [ENOTDIR]
>   A component of the path prefix names an existing file that is neither a directory nor a symbolic link to a directory.
> [EROFS]
>   The parent directory resides on a read-only file system.

> The mkdtemp() function may fail if:

> [ELOOP]
>   More than {SYMLOOP_MAX} symbolic links were encountered during resolution of the path of the directory to be created.
> [ENAMETOOLONG]
>   The length of a pathname exceeds {PATH_MAX}, or pathname resolution of a symbolic link produced an intermediate result with a length that exceeds {PATH_MAX}.

> The error conditions for the mkstemp() function are defined in open.

The following sections are informative.

#### EXAMPLES

> ##### Generating a Pathname

> The following example creates a file with a 10-character name beginning with the characters `"file"` and opens the file for reading and writing. The value returned as the value of fd is a file descriptor that identifies the file.

>     #include <stdlib.h>
>     ...
>     char template[] = "/tmp/fileXXXXXX";
>     int fd;

>     fd = mkstemp(template);

#### APPLICATION USAGE

> It is possible to run out of letters.

> The mkdtemp() and mkstemp() functions need not check to determine whether the filename part of template exceeds the maximum allowable filename length.

#### RATIONALE

> None.

#### FUTURE DIRECTIONS

> None.

#### SEE ALSO

> getpid, mkdir, open, tmpfile, tmpnam

> XBD <stdlib.h>

#### CHANGE HISTORY

> First released in Issue 4, Version 2.

#### Issue 5

> Moved from X/OPEN UNIX extension to BASE.

#### Issue 7

> Austin Group Interpretation 1003.1-2001 #143 is applied.

> SD5-XSH-ERN-168 is applied, clarifying file permissions upon creation.

> The mkstemp() function is moved from the XSI option to the Base.

> The mkdtemp() function is added from The Open Group Technical Standard, 2006, Extended API Set Part 1.

> POSIX.1-2008, Technical Corrigendum 1, XSH/TC1-2008/0380 [291], XSH/TC1-2008/0381 [324], and XSH/TC1-2008/0382 [291] are applied.

End of informative text.

return to top of page

UNIX ® is a registered Trademark of The Open Group.
POSIX ® is a registered Trademark of The IEEE.
Copyright © 2001-2013 The IEEE and The Open Group, All Rights Reserved
[ Main Index | XBD | XSH | XCU | XRAT ]