Skip to main content
mkstemp is not C but POSIX.
Source Link
MSalters
  • 181.7k
  • 11
  • 171
  • 376

Okay, mkstemp is the preferred way to create a temp file in CPOSIX.

But it opens the file and returns an int, which is a file descriptor. From that I can only create a FILE*, but not an std::ofstream, which I would prefer in C++. (Apparently, on AIX and some other systems, you can create an std::ofstream from a file descriptor, but my compiler complains when I try that.)

I know I could get a temp file name with tmpnam and then open my own ofstream with it, but that's apparently unsafe due to race conditions, and results in a compiler warning (g++ v3.4. on Linux):

warning: the use of `tmpnam' is dangerous, better use `mkstemp' 

So, is there any portable way to create an std::ofstream to a temp file?

Okay, mkstemp is the preferred way to create a temp file in C.

But it opens the file and returns an int, which is a file descriptor. From that I can only create a FILE*, but not an std::ofstream, which I would prefer in C++. (Apparently, on AIX and some other systems, you can create an std::ofstream from a file descriptor, but my compiler complains when I try that.)

I know I could get a temp file name with tmpnam and then open my own ofstream with it, but that's apparently unsafe due to race conditions, and results in a compiler warning (g++ v3.4. on Linux):

warning: the use of `tmpnam' is dangerous, better use `mkstemp' 

So, is there any portable way to create an std::ofstream to a temp file?

Okay, mkstemp is the preferred way to create a temp file in POSIX.

But it opens the file and returns an int, which is a file descriptor. From that I can only create a FILE*, but not an std::ofstream, which I would prefer in C++. (Apparently, on AIX and some other systems, you can create an std::ofstream from a file descriptor, but my compiler complains when I try that.)

I know I could get a temp file name with tmpnam and then open my own ofstream with it, but that's apparently unsafe due to race conditions, and results in a compiler warning (g++ v3.4. on Linux):

warning: the use of `tmpnam' is dangerous, better use `mkstemp' 

So, is there any portable way to create an std::ofstream to a temp file?

Source Link
Frank
  • 66.6k
  • 97
  • 243
  • 327

[c++] How to create a std::ofstream to a temp file?

Okay, mkstemp is the preferred way to create a temp file in C.

But it opens the file and returns an int, which is a file descriptor. From that I can only create a FILE*, but not an std::ofstream, which I would prefer in C++. (Apparently, on AIX and some other systems, you can create an std::ofstream from a file descriptor, but my compiler complains when I try that.)

I know I could get a temp file name with tmpnam and then open my own ofstream with it, but that's apparently unsafe due to race conditions, and results in a compiler warning (g++ v3.4. on Linux):

warning: the use of `tmpnam' is dangerous, better use `mkstemp' 

So, is there any portable way to create an std::ofstream to a temp file?