Sign Up

Sign Up to our social questions and Answers Engine to ask questions, answer people’s questions, and connect with other people.

Have an account? Sign In

Have an account? Sign In Now

Sign In

Login to our social questions & Answers Engine to ask questions answer people’s questions & connect with other people.

Sign Up Here

Forgot Password?

Don't have account, Sign Up Here

Forgot Password

Lost your password? Please enter your email address. You will receive a link and will create a new password via email.

Have an account? Sign In Now

You must login to ask a question.

Forgot Password?

Need An Account, Sign Up Here

Please briefly explain why you feel this question should be reported.

Please briefly explain why you feel this answer should be reported.

Please briefly explain why you feel this user should be reported.

Sign InSign Up

The Archive Base

The Archive Base Logo The Archive Base Logo

The Archive Base Navigation

  • SEARCH
  • Home
  • About Us
  • Blog
  • Contact Us
Search
Ask A Question

Mobile menu

Close
Ask a Question
  • Home
  • Add group
  • Groups page
  • Feed
  • User Profile
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Buy Points
  • Users
  • Help
  • Buy Theme
  • SEARCH
Home/ Questions/Q 141577
In Process

The Archive Base Latest Questions

Editorial Team
  • 0
Editorial Team
Asked: May 11, 20262026-05-11T07:47:56+00:00 2026-05-11T07:47:56+00:00

Win32’s CreateFile has FILE_FLAG_DELETE_ON_CLOSE , but I’m on Linux. I want to open a

  • 0

Win32’s CreateFile has FILE_FLAG_DELETE_ON_CLOSE, but I’m on Linux.

I want to open a temporary file which will always be deleted upon program termination. I could understand that in the case of a program crash it may not be practical to guarantee this, but in any other case I’d like it to work.

I know about RAII. I know about signals. I know about atexit(3). I know I can open the file and delete it immediately and the file will remain accessible until the file descriptor is closed (which even handles a crash). None of these seem like a complete and straightforward solution:

  1. RAII: been there, done that: I have an object whose destructor deletes the file, but the destructor is not called if the program is terminated by a signal.
  2. signals: I’m writing a low-level library which makes registering a signal handler a tricky proposition. For example, what if the application uses signals itself? I don’t want to step on any toes. I might consider some clever use of sigaction(2) to cope…but haven’t put enough thought into this possibility yet.
  3. atexit(3): apparently useless, since it isn’t called during abnormal termination (e.g. via a signal).
  4. preemptive unlink(2): this is pretty good except that I need the file to remain visible in the filesystem (otherwise the system is harder to monitor/troubleshoot).

What would you do here?

Further Explanation

I elided one detail in my original post which I now realize I should have included. The ‘file’ in this case is not strictly a normal file, but rather is a POSIX Message Queue. I create it via mq_open(). It can be closed via mq_close() or close() (the former is an alias for the latter on my system). It can be removed from the system via mq_unlink(). All of this makes it analogous to a regular file, except that I cannot choose the directory in which the file resides. This makes the current most popular answer (placing the file in /tmp) unworkable, because the ‘file’ is created by the system in a virtual filesystem with very limited capacity. (I’ve mounted the virtual filesystem in /dev/mqueue, following the example in man mq_overview) .

This also explains why I need the name to remain visible (making the immediate-unlink approach unworkable): the ‘file’ must be shared between two or more processes.

  • 1 1 Answer
  • 0 Views
  • 0 Followers
  • 0
Share
  • Facebook
  • Report

Leave an answer
Cancel reply

You must login to add an answer.

Forgot Password?

Need An Account, Sign Up Here

1 Answer

  • Voted
  • Oldest
  • Recent
  • Random
  1. 2026-05-11T07:47:56+00:00Added an answer on May 11, 2026 at 7:47 am

    The requirement that the name remains visible while the process is running makes this hard to achieve. Can you revisit that requirement?

    If not, then there probably isn’t a perfect solution. I would consider combining a signal handling strategy with what Kamil Kisiel suggests. You could keep track of the signal handlers installed before you install your signal handlers. If the default handler is SIG_IGN, you wouldn’t normally install your own handler; if it is SIG_DFL, you would remember that; if it is something else – a user-defined signal handler – you would remember that pointer, and install your own. When your handler was called, you’d do whatever you need to do, and then call the remembered handler, thus chaining the handlers. You would also install an atexit() handler. You would also document that you do this, and the signals for which you do it.

    Note that signal handling is an imperfect strategy; SIGKILL cannot be caught, and the atexit() handler won’t be called, and the file will be left around.

    David Segond’s suggestion – a temporary file name daemon – is interesting. For simple processes, it is sufficient; if the process requesting the temporary file forks and expects the child to own the file thereafter (and exits) then the daemon has a problem detecting when the last process using it dies – because it doesn’t automatically know the processes that have it open.

    • 0
    • Reply
    • Share
      Share
      • Share on Facebook
      • Share on Twitter
      • Share on LinkedIn
      • Share on WhatsApp
      • Report

Sidebar

Related Questions

In Win32 I want to suspend a thread using Suspend(GetCurrentThread()); but I find I
win32 windows application and want to capture full screen and remove the border of
In Win32_DiskDrive. There's a Capabilities Property which has a type of System.UInt16[]. Am trying
I have developed a Win32 application using C/C++, which runs on Vista and XP.
Win32's FindWindow() can find a window having the title of Untitled - Notepad, but
I found that MinGW Win32 compatibility layer has following definition in ndis.h: #define NdisGetCurrentSystemTime
I am building a Win32 C++ project on VS2008 SP1. In created .manifest file
The win32 API has for example two methods StrFormatByteSize and StrFormatByteSizeEx. Even though both
In Win32 API, there is CopyFile that literally copies a file. However, this API
My Win32 application performs numerous disk operations in a designated temporary folder while functioning,

Explore

  • Home
  • Add group
  • Groups page
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Users
  • Help
  • SEARCH

Footer

© 2021 The Archive Base. All Rights Reserved
With Love by The Archive Base

Insert/edit link

Enter the destination URL

Or link to existing content

    No search term specified. Showing recent items. Search or use up and down arrow keys to select an item.