ipipe - A cross-platform named-pipe library for Rust
This library allows the creation of platform-independant named pipes. Standard Read/Write traits are implemented. APIs and performance will be improved in future versions. Issues and PRs welcome.
Example:
use Pipe;
use thread;
use ;
const CANCEL: u8 = 24;
Running the above example program will output:
1
2
3
4
5
6
7
8
9
10
Pipe::create
generates a random pipe name in a temporary location.
Example path (Windows):
\\.\pipe\pipe_23676_xMvclVhNKcg6iGf
Example path (Unix):
/tmp/pipe_1230_mFP8dx8uVl
Pipe::with_name
allows a pipe name to be specified.
Features
-
static_pipe
The static_pipe
default feature allows the creation of mutex-protected static pipes that can be written to from anywhere in a way that mimics stdout. Here's an example:
use *;
use ;
let mut reader = init.unwrap;
// You can get a handle to an already-initialized pipe like this:
// let mut reader = ipipe::get("my_pipe");
let s = new.lines.next.unwrap;
println!;
// Drops the static pipe. Can also call `ipipe::close_all()` to drop all static pipes.
close;
Then anywhere your program (or another program with enough permission to access the pipe) can write code like this:
pprintln!;
Lower level as well as more complete/intuitive APIs to the static pipes are also planned for a future release.
-
rand
The rand
default feature will allow calling Pipe::create()
to open a pipe with a randomly-generated name. The generated name will have the following format: pipe_[process pid]_[15 random alphnumeric characters]
. Equivalent to Pipe::with_name(&str)
in every other way.
-
channels
The channels
feature will allow calling pipe.receiver()
and pipe.sender()
to generate a channel. One end of the channel will be sent to a thread to watch either input or output from the pipe, and the other end of the channel will be returned.