#ipc #pipe #terminal #fifo #reader-writer

app pipe_watcher

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

12 stable releases

2.1.2 Aug 2, 2021
2.1.1 Apr 8, 2021
2.0.3 Mar 20, 2021
1.0.1 Mar 19, 2021

#364 in Unix APIs

MIT/Apache

9KB
164 lines

This crate compiles 2 binaries using the 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. While they're made specifically to be useful along with the ipipe API, they can be used by themselves in conjunction with (probably) any other API for Windows or Unix named pipes.

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

~2MB
~38K SLoC