blob: 7c9c42ac97ec247bfa1685f2404da65b11a41e39 [file] [log] [blame]
//! Pseudo terminal example.
#[cfg(unix)]
fn main() {
use std::io::{Read, Write};
use std::os::unix::prelude::*;
use std::str;
use std::thread;
use std::time;
use serialport::{SerialPort, TTYPort};
let (mut master, mut slave) = TTYPort::pair().expect("Unable to create pseudo-terminal pair");
// Master ptty has no associated path on the filesystem.
println!(
"Master ptty fd: {}, path: {:?}",
master.as_raw_fd(),
master.name()
);
println!(
"Slave ptty fd: {}, path: {:?}",
slave.as_raw_fd(),
slave.name()
);
// Receive buffer.
let mut buf = [0u8; 512];
println!("Sending 5 messages from master to slave.");
// Send 5 messages.
for x in 1..6 {
let msg = format!("Message #{}", x);
// Send the message on the master
assert_eq!(master.write(msg.as_bytes()).unwrap(), msg.len());
// Receive on the slave
let bytes_recvd = slave.read(&mut buf).unwrap();
assert_eq!(bytes_recvd, msg.len());
let msg_recvd = str::from_utf8(&buf[..bytes_recvd]).unwrap();
assert_eq!(msg_recvd, msg);
println!("Slave Rx: {}", msg_recvd);
thread::sleep(time::Duration::from_secs(1));
}
}
#[cfg(not(unix))]
fn main() {}