#pipe #ipc #fifo #cli #terminal

app pipe_watcher

A pipe reader and writer for the terminal. Made for use with the ipipe Rust library.

11 stable releases

2.1.1 Apr 8, 2021
2.0.6 Apr 8, 2021
2.0.3 Mar 20, 2021
1.0.1 Mar 19, 2021

#50 in Unix APIs

Download history 14/week @ 2021-03-03 3/week @ 2021-03-10 80/week @ 2021-03-17 18/week @ 2021-03-24 44/week @ 2021-03-31 70/week @ 2021-04-07

53 downloads per month

MIT/Apache

8KB
162 lines

This crate compiles 2 binaries can be used with the ipipe library to interact with named pipes. The pipe_listener binary reads the output of one or more named pipes and writes it to standard out. The pipe_writer binary reads the output of standard in and writes it to one or more named pipes.

These programs can easily be used in conjunction to redirect named-pipe I/O willy-nilly.

To Install

cargo install pipe_watcher

Pipe Listener

Usage: pipe_listener [pipe_name...]

Multiple pipe names may be specified.

In a terminal:

pipe_listener my_pipe1

Then, in your Rust program:

use ipipe::*;

fn main()
{
    ipipe::init("my_pipe1").unwrap();
    pprintln!("my_pipe1", "A line sent to you from me!");
}

And that's it! You should see the output in your terminal.

Pipe Writer

Usage: pipe_writer [pipe_name...]

The reverse of the pipe listener binary.

In a terminal:

pipe_writer my_pipe1

In your Rust program:

use ipipe::*;
use std::io::{Read, BufReader};

fn main()
{
    let pipe = ipipe::init("my_pipe1").unwrap();
    loop
    {
        for line in BufReader:new(pipe.clone()).lines()
        {
            println!("{}", line);
        }
    }
}

Then start typing into the terminal, hit enter, and watch the magic happen. Note that these binaries are NOT line-buffered by default.

Pipe names:

The pipe_name argument can be parsed one of two ways:

  • If the name does not contain a forward slash / or backaslash \ character, it will be treated as an ipipe pipe name. That translates to "\\.\pipe\pipe_name" on Windows and /tmp/pipe_name on Unix systems.
  • If the name does contain a slash, it will be treated as a literal path. That means the path must be formatted correctly to work on the appropriate OS.

Dependencies

~235KB