| % File src/library/base/man/tempfile.Rd |
| % Part of the R package, https://www.R-project.org |
| % Copyright 1995-2019 R Core Team |
| % Distributed under GPL 2 or later |
| |
| \name{tempfile} |
| \alias{tempfile} |
| \alias{tempdir} |
| \title{Create Names for Temporary Files} |
| \description{ |
| \code{tempfile} returns a vector of character strings which can be used as |
| names for temporary files. |
| } |
| \usage{% ../R/temp.R |
| tempfile(pattern = "file", tmpdir = tempdir(), fileext = "") |
| tempdir(check = FALSE) |
| } |
| \arguments{ |
| \item{pattern}{a non-empty character vector giving the initial part |
| of the name.} |
| \item{tmpdir}{a non-empty character vector giving the directory name} |
| \item{fileext}{a non-empty character vector giving the file extension} |
| \item{check}{\code{\link{logical}} indicating if \code{tmpdir()} |
| should be checked and recreated if no longer valid.} |
| } |
| \value{ |
| For \code{tempfile} a character vector giving the names of possible |
| (temporary) files. Note that no files are generated by \code{tempfile}. |
| |
| For \code{tempdir}, the path of the per-session temporary directory. |
| |
| On Windows, both will use a backslash as the path separator. |
| |
| On a Unix-alike, the value will be an absolute path (unless |
| \code{tmpdir} is set to a relative path), but it need not be canonical |
| (see \code{\link{normalizePath}}) and on macOS it often is not. |
| } |
| \details{ |
| The length of the result is the maximum of the lengths of the three |
| arguments; values of shorter arguments are recycled. |
| |
| The names are very likely to be unique among calls to \code{tempfile} |
| in an \R session and across simultaneous \R sessions (unless |
| \code{tmpdir} is specified). The filenames are guaranteed not to be |
| currently in use. |
| |
| The file name is made by concatenating the path given by |
| \code{tmpdir}, the \code{pattern} string, a random string in hex and |
| a suffix of \code{fileext}. |
| |
| By default, \code{tmpdir} will be the directory given by |
| \code{tempdir()}. This will be a subdirectory of the per-session |
| temporary directory found by the following rule when the \R session is |
| started. The environment variables \env{TMPDIR}, \env{TMP} and |
| \env{TEMP} are checked in turn and the first found which points to a |
| writable directory is used: |
| #ifdef unix |
| if none succeeds \file{/tmp} is used. The path should not contain spaces. |
| #endif |
| #ifdef windows |
| if none succeeds the value of \env{R_USER} (see |
| \code{\link{Rconsole}}) is used. If the path to the directory |
| contains a space in any of the components, the path returned will use |
| the shortnames version of the path. |
| #endif |
| Note that setting any of these environment variables in the \R session |
| has no effect on \code{tempdir()}: the per-session temporary directory |
| is created before the interpreter is started. |
| } |
| |
| \section{Note on parallel use}{ |
| \R processes forked by functions such as \code{\link{mclapply}} and |
| \code{\link{makeForkCluster}} in package \pkg{parallel} share a |
| per-session temporary directory. Further, the \sQuote{guaranteed not |
| to be currently in use} applies only at the time of asking, and two |
| children could ask simultaneously. This is circumvented by ensuring |
| that \code{tempfile} calls in different children try different names. |
| } |
| |
| \source{ |
| The final component of \code{tempdir()} is created by the POSIX system |
| call \code{mkdtemp}, or if this is not available (e.g.\sspace{}on |
| Windows) a version derived from the source code of GNU \code{glibc}. |
| |
| It will be of the form \file{RtmpXXXXXX} where the last 6 characters |
| are replaced in a platform-specific way. POSIX only requires that the |
| replacements be ASCII, which allows \code{.} (so the value may appear |
| to have a file extension) and \link{regexp} metacharacters such as |
| \code{+}. Most commonly the replacements are from the \link{regexp} |
| pattern \code{[A-Za-z0-9]}, but \code{.} \emph{has} been seen. |
| } |
| |
| \references{ |
| Becker, R. A., Chambers, J. M. and Wilks, A. R. (1988) |
| \emph{The New S Language}. |
| Wadsworth & Brooks/Cole. |
| } |
| \seealso{\code{\link{unlink}} for deleting files.} |
| \examples{\donttest{ |
| tempfile(c("ab", "a b c")) # give file name with spaces in! |
| |
| tempfile("plot", fileext = c(".ps", ".pdf")) |
| |
| tempdir() # works on all platforms with a platform-dependent result |
| } |
| |
| ## Show how 'check' is working on some platforms: |
| if(exists("I'm brave") && `I'm brave` && |
| identical(.Platform$OS.type, "unix") && grepl("^/tmp/", tempdir())) { |
| cat("Current tempdir(): ", tempdir(), "\n") |
| cat("Removing it :", file.remove(tempdir()), |
| "; dir.exists(tempdir()):", dir.exists(tempdir()), "\n") |
| cat("and now tempdir(check = TRUE) :", tempdir(check = TRUE),"\n") |
| } |
| |
| } |
| \keyword{file} |