//! 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 serialport5::posix::SerialPortExt; use serialport5::SerialPort; let (mut master, mut slave) = SerialPort::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() {}