Skip to content

mre/fcat

Repository files navigation

😼 fcat

Github Actions

fastcat logo

fcat, short for fastcat, is a cat implementation in Rust using Linux's splice syscall.
Read the announcement here.

⚠️ **This project is currently broken on newer Linux versions (5.9+) because of some changes
concerning the splice system call. (See here and here.) Consider using uutils/cat, GNU coreutils 9.11 on such kernels since it supports splice too.

Performance

cat myfile | pv -r > /dev/null
[1.90GiB/s]
fcat myfile | pv -r > /dev/null
[5.90GiB/s]

Installation

Note: Only works on Linux.
(But you can send me a pull request for other operating systems.)

cargo install fcat

Usage

fcat file1 file2 file3

Project goals

  • Be the fastest cat in town.
  • Be a drop-in replacement for (POSIX) cat.

Non-goals

  • Provide any additional functionality other than what cat provides.
    If you're looking for a more beautiful cat, check out bat.

Known issues

If you run fcat /dev/zero >> myfile, it will fail with exit code EINVAL because, according to the splice manpage: "The target file is opened in append mode."

Trivia

  • You probably won't ever need this, but it's a fun little experiment.
  • What I like the most about the project is the logo.
  • GNU coreutils 9.11 started using splice at cat (https://savannah.gnu.org/news/?id=10884).

License

fcat is licensed under either of

at your option.

About

A 3x faster implementation of cat, using splice

Topics

Resources

License

Apache-2.0, MIT licenses found

Licenses found

Apache-2.0
LICENSE-APACHE
MIT
LICENSE-MIT

Stars

Watchers

Forks

Releases

No releases published

Sponsor this project

 

Packages

 
 
 

Contributors