pipe_watcher

Crates.iopipe_watcher
lib.rspipe_watcher
version2.1.2
sourcesrc
created_at2021-03-08 21:53:27.601733
updated_at2021-08-02 20:15:41.417902
descriptionA pipe reader and writer for the terminal. Made for use with the ipipe Rust library.
homepagehttps://github.com/Eolu/pipe_watcher
repositoryhttps://github.com/Eolu/pipe_watcher
max_upload_size
id365879
size11,325
Griffin O'Neill (Eolu)

documentation

https://docs.rs/pipe_watcher

README

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.
Commit count: 18

cargo fmt