A tiny crate for checking if Ctrl-C was pressed.
No handlers to set. No threads. No AtomicBool
.
Just call init_ctrlc()
once, then check is_ctrlc_received()
in your loop.
- Signal-safe
SIGINT
handler - No threads, no allocations
- No runtime Rust dependencies
- Ideal for polling-based CLI tools
Add to your Cargo.toml
:
ctrlc-tiny = "0.1"
Example:
fn main() -> std::io::Result<()> {
ctrlc_tiny::init_ctrlc()?;
loop {
if ctrlc_tiny::is_ctrlc_received() {
println!("Ctrl-C detected");
break;
}
// work...
}
Ok(())
}
Need to detect Ctrl-C more than once? See examples/multi_ctrlc.rs
.
ctrlc
is great when you want to run custom logic when Ctrl-C is pressed.
But if you just want to check whether Ctrl-C was pressed, it can feel more involved than necessary.
ctrlc-tiny
keeps things simple: a single flag you can poll.
- Internally uses a
volatile sig_atomic_t
flag — safe in POSIX signal handlers. - No heap, no threads — fully signal-safe by design.
- The flag can be reset via
reset_ctrlc_received()
, but may race with the signal handler if SIGINT is received at the same time.
- ✅ Linux
- ✅ macOS
- ❌ Windows (no plans to add support)
Honestly, Arc
, AtomicBool
, and even the internals of the ctrlc
crate don't pose any real-world performance issues.
This crate was created to scratch a personal itch — to get rid of a subjective sense of overkill and a bit of boilerplate.
In that sense, I’m quite happy with how this crate turned out.
Licensed under either of:
- MIT
- Apache 2.0
See LICENSE-MIT or LICENSE-APACHE.