#temporary-files #file #lock-files #signal-handler #cleanup #file-content

gix-tempfile

A tempfile implementation with a global registry to assure cleanup

26 stable releases (12 major)

15.0.0 Oct 22, 2024
14.0.2 Aug 22, 2024
14.0.1 Jul 23, 2024
13.1.1 Mar 14, 2024
3.0.2 Feb 17, 2023

#187 in Filesystem

Download history 119863/week @ 2024-07-30 115601/week @ 2024-08-06 115521/week @ 2024-08-13 114354/week @ 2024-08-20 112586/week @ 2024-08-27 127895/week @ 2024-09-03 124948/week @ 2024-09-10 114407/week @ 2024-09-17 120417/week @ 2024-09-24 121767/week @ 2024-10-01 113542/week @ 2024-10-08 126055/week @ 2024-10-15 117735/week @ 2024-10-22 118804/week @ 2024-10-29 124673/week @ 2024-11-05 126522/week @ 2024-11-12

508,796 downloads per month
Used in 266 crates (8 directly)

MIT/Apache

79KB
1.5K SLoC

Use tempfiles to minimize the risk of resource leakage when preparing to overwrite or create a file with new content in a signal-safe way, making the change atomic.

Tempfiles can also be used as locks as only one tempfile can exist at a given path at a time.

  • registered temporary files which are deleted automatically as the process terminates or on drop
    • write to temporary file and persist it under new name
    • close temporary files to convert them into a marker while saving system resources
    • mark paths with a closed temporary file
  • persist temporary files to prevent them from perishing.
  • signal-handler integration with gix to clean lockfiles before the process is aborted.
  • use a temporary file transparently due thanks to implementations of std::io traits

lib.rs:

git-style registered tempfiles that are removed upon typical termination signals.

To register signal handlers in a typical application that doesn't have its own, call [gix_tempfile::signal::setup(Default::default())][signal::setup()] before creating the first tempfile.

Signal handlers are powered by signal-hook to get notified when the application is told to shut down to assure tempfiles are deleted. The deletion is filtered by process id to allow forks to have their own set of tempfiles that won't get deleted when the parent process exits.

Initial Setup

As no handlers for TERMination are installed, it is required to call [signal::setup()] before creating the first tempfile. This also allows to control how this crate integrates with other handlers under application control.

As a general rule of thumb, use Default::default() as argument to emulate the default behaviour and abort the process after cleaning temporary files. Read more about options in signal::handler::Mode.

Limitations

Tempfiles might remain on disk

  • Uninterruptible signals are received like SIGKILL
  • The application is performing a write operation on the tempfile when a signal arrives, preventing this tempfile to be removed, but not others. Any other operation dealing with the tempfile suffers from the same issue.

Feature Flags

Dependencies

~3–13MB
~187K SLoC