1 个不稳定版本
使用旧版 Rust 2015
0.3.0 | 2017年3月6日 |
---|
162 每月下载量
在 2 个 crate 中使用(通过 dmx-serial)
43KB
701 行
Termios 分支
lib.rs
:
termios
crate 为 Unix 操作系统上实现的 POSIX termios API 提供 Rust 绑定。termios API 定义在 IEEE Std 1003.1 ("POSIX.1") 规范 中。
入门指南
termios API 在与终端设备关联的文件描述符上操作,例如 /dev/tty*
。当与其他文件描述符一起使用时,termios 函数会返回错误。所有 POSIX 标准的一部分函数都包含在 termios
crate 中。当期望文件描述符时,使用类型 std::os::unix::io::RawFd
,并将整数错误代码转换为 std::io::Result
。
termios API 的一个主要功能是配置终端设备的参数。POSIX 标准定义了一个包含参数和用于操作参数的几个函数的 termios
结构。termios
crate 定义了一个安全的构造函数,该构造函数返回一个填充了打开终端设备的参数的 Termios
结构
use termios::*;
let mut termios = Termios::from_fd(fd).unwrap();
Termios
结构提供了访问 POSIX 标准中定义的字段(c_iflag
、c_oflag
、c_cflag
、c_lflag
和 c_cc
)的权限
termios.c_cflag |= CREAD | CLOCAL;
termios.c_lflag &= !(ICANON | ECHO | ECHOE | ECHOK | ECHONL | ISIG | IEXTEN);
termios.c_oflag &= !OPOST;
termios.c_iflag &= !(INLCR | IGNCR | ICRNL | IGNBRK);
termios.c_cc[VMIN] = 0;
termios.c_cc[VTIME] = 0;
Termios
结构也可以使用任何标准的 termios API 函数进行操作
cfgetispeed(&termios);
cfgetospeed(&termios);
cfsetispeed(&mut termios, B9600).unwrap();
cfsetospeed(&mut termios, B9600).unwrap();
tcsetattr(fd, TCSANOW, &termios).unwrap();
可移植性
termios
crate 以帮助编写可移植代码的方式组织,同时也允许在必要时访问特定于操作系统的功能。
crate 根目录包含跨 Unix 操作系统通用的类型、常量和函数定义。crate 根目录中的大多数定义来自 POSIX 标准;然而,在不同操作系统之间,对标准的支持可能不同。crate 根目录中有几个函数不是 POSIX 标准的一部分,但包括在内,因为它们在 Unix 操作系统中广泛可用。
要编写可移植代码,导入 termios
crate 并仅使用 crate 根目录中的定义。
操作系统特定扩展
每个操作系统都可以定义对POSIX API的扩展。为了明确代码依赖于特定于操作系统的定义,任何非标准定义都导出在termios::os
模块中。依赖特定于操作系统功能的应用程序必须显式选择。当编写依赖特定于操作系统定义的可移植代码时,通常需要使用#[cfg(...)]
属性来支持不同的实现。以下是一个可移植函数的示例,该函数设置Termios
结构体的最大速度。
use std::io;
use termios::{Termios,cfsetspeed};
#[cfg(target_os = "linux")]
fn set_fastest_speed(termios: &mut Termios) -> io::Result<()> {
cfsetspeed(termios, termios::os::linux::B4000000)
}
#[cfg(target_os = "macos")]
fn set_fastest_speed(termios: &mut Termios) -> io::Result<()> {
cfsetspeed(termios, termios::os::macos::B230400)
}
#[cfg(target_os = "freebsd")]
fn set_fastest_speed(termios: &mut Termios) -> io::Result<()> {
cfsetspeed(termios, termios::os::freebsd::B921600)
}
#[cfg(target_os = "openbsd")]
fn set_fastest_speed(termios: &mut Termios) -> io::Result<()> {
cfsetspeed(termios, termios::os::openbsd::B921600)
}
let mut termios = Termios::from_fd(fd).unwrap();
set_fastest_speed(&mut termios).unwrap();
依赖关系
~62KB