Skip to content
/ fcat Public

A 3x faster implementation of cat, using splice

License

Apache-2.0, MIT licenses found

Licenses found

Apache-2.0
LICENSE-APACHE
MIT
LICENSE-MIT
Notifications You must be signed in to change notification settings

mre/fcat

Folders and files

NameName
Last commit message
Last commit date
Jan 10, 2023
Jul 31, 2018
Apr 28, 2021
Jul 31, 2018
Feb 6, 2023
Feb 6, 2023
Aug 9, 2018
Jul 31, 2018
Jul 31, 2018
Aug 1, 2018
Jul 18, 2022
Aug 9, 2018
Jul 31, 2018

Repository files navigation

😼 fcat

Github Actions

fastcat logo

fcat, short for fastcat, is a cat implementation in Rust using Linux's splice syscall.
With that little trick, it's more than three times as fast as the system cat in our benchmarks.
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.) This can't be fixed unless changes to the kernel get made.

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.
    Still, I wonder why this is not part of e.g. GNU cat...
  • What I like the most about the project is the logo.

License

fcat is licensed under either of

at your option.