10.9. Creating a Temporary Filename and File
Problem
You have to store some stuff on disk temporarily, and you don’t want to have to write a routine that generates a unique name yourself.
Solution
Use either the
tmpfile or tmpnam
functions, declared in <cstdio>.
tmpfile returns a FILE* that is already opened for writing, and tmpnam generates a unique filename that you can open yourself. Example 10-13 shows how to use tmpfile.
Example 10-13. Creating a temporary file
#include <iostream>
#include <cstdio>
int main() {
FILE* pf = NULL;
char buf[256];
pf = tmpfile(); // Create and open a temp file
if (pf) {
fputs("This is a temp file", pf); // Write some data to it
}
fseek(pf, 5, SEEK_SET); // Reset the file position
fgets(buf, 255, pf); // Read a string from it
fclose(pf);
std::cout << buf << '\n';
}Discussion
There are two ways to create a temporary file; Example 10-13 shows the first way. The
function tmpfile is declared in <cstdio>, takes no parameters, and returns a FILE* if successful, NULL
if not. The FILE* is the same type you can use with the
C input/output functions fread, fwrite, fgets, fputs, etc. tmpfile opens
the temporary file in “wb+” mode, which means you can write to it or read from it in
binary mode (i.e., the characters are not interpreted as they are read). When your program
terminates normally, the temporary file created by tmpfile is automatically deleted.
This may or may not work for you depending on your requirements. You will notice that
tmpfile does not give ...