| Types and objects | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Defined in header <stdio.h> | ||
FILE* tmpfile(void); | (1) | |
errno_t tmpfile_s(FILE*restrict*restrict streamptr); | (2) | (since C11) |
tmpfile_s is only guaranteed to be available if__STDC_LIB_EXT1__ is defined by the implementation and if the user defines__STDC_WANT_LIB_EXT1__ to the integer constant1 before including<stdio.h>.The temporary file created by this function is closed and deleted when the program exits normally. Whether it's deleted on abnormal termination is implementation-defined.
Contents |
On some implementations (e.g. older Linux), this function actually creates, opens, and immediately deletes the file from the file system: as long as an open file descriptor to a deleted file is held by a program, the file exists, but since it was deleted, its name does not appear in any directory, so that no other process can open it. Once the file descriptor is closed, or once the program terminates (normally or abnormally), the space occupied by the file is reclaimed by the filesystem. Newer Linux (since 3.11 or later, depending on filesystem) creates such invisible temporary files in one step, via special flag in theopen() syscall.
On some implementations (e.g. Windows), elevated privileges are required as the function may create the temporary file in a system directory.
#define _POSIX_C_SOURCE 200112L#include <stdio.h>#include <unistd.h> int main(void){printf("TMP_MAX = %d, FOPEN_MAX = %d\n",TMP_MAX,FOPEN_MAX);FILE* tmpf= tmpfile();fputs("Hello, world", tmpf);rewind(tmpf);char buf[6];fgets(buf,sizeof buf, tmpf);printf("got back from the file: '%s'\n", buf); // Linux-specific method to display the tmpfile namechar fname[FILENAME_MAX], link[FILENAME_MAX]={0};sprintf(fname,"/proc/self/fd/%d", fileno(tmpf));if(readlink(fname, link,sizeof link-1)>0)printf("File name: %s\n", link);}
Possible output:
TMP_MAX = 238328, FOPEN_MAX = 16got back from the file: 'Hello'File name: /tmp/tmpfjptPe5 (deleted)
(C11) | returns a unique filename (function)[edit] |
C++ documentation fortmpfile | |