vty_server 特殊文件
用途
虚拟终端服务器 (vty_server 或 vts) 是一个 AIX® 设备驱动程序,用于创建从运行虚拟终端服务器的分区到另一个分区上的虚拟终端 (而不是虚拟终端服务器) 的 tty 样式连接。
描述
vty 有一个控制器端 (vty 服务器) 和一个工作程序端 (vty)。 Vty 服务器由特殊程序 (例如 mkvterm) 打开和使用。 Vty 由 ksh之类的 shell 打开和使用。 数据路径是双向的。
vts_ioctl
当应用程序使用从成功打开 vts 端口返回的文件描述符来调用 ioctl 时,将通过设备切换表来调用 vts_ioctl 命令。 vts_ioctl 在端口上执行专用控制操作。
语法
struct vts_ioctl {
void *vi_buffer; /* pointer to user's buffer */
int vi_bufsize; /* size of user's buffer */
int vi_offset; /* offset into data */
int vi_result; /* bytes transferred */
}; vi_buffer 参数是指向用户空间中的缓冲区的指针。 vi_bufsize 参数指定缓冲区的大小。 对于 VTS_READ_CLCS 和 VTS_READ_PARTNER ,数据将从 vts 驱动程序移至 vi_buffer指定的缓冲区中。 对于 VTS_WRITE_PARTNER ,将从 vi_buffer 指定的缓冲区中拉取数据并将其移动到 vts 驱动程序中。
vi_offset 参数仅用于 VTS_READ_CLCS。 一个应用程序可以发出多个 VTS_READ_CLCS ioctl 调用; 驱动程序传输到应用程序的数据可能比 vi_buffer 参数指定的缓冲区中的数据要多。
对于第一个 FTS_READ_CLCS , vi_offset 设置为 0。 这会导致驱动程序查询 PHYP 以获取可能的 CLC 的当前列表。 将 CLC 的第一个序列移动到用户空间中。 每个 CLC 由新行分隔,而最后一个 CLC 由空值终止。 移动到用户空间中的字节数计数 (不包括终止空值) 存储在 vi_result中。
应用程序确定数据的处理方式 (例如,应用程序可以将数据保存在链接列表中)。 然后将 vi_result 添加到 vi_offset ,并执行另一个 VTS_READ_CLCS。 这将导致驱动程序将下一组 CLC 移动到应用程序的缓冲区中。 此操作序列将继续执行,直到在 vi_result中返回零为止。
一系列 VTS_READ_CLCS 调用将导致一系列由新行分隔的 CLC ,并以空值终止。 以下是可能发生的错误情况:
- EIO
- 对 PHYP 的驱动程序调用返回了错误。
- ENOMEM
- 没有可用内存来存放 CLC 列表。
- EPERM
- copyin 或 copyout 失败。
VTS_READ_PARTNER 调用将返回上次成功进行 VTS_WRITE_PARTNER 调用时传递的值。 如果当前未连接这些 vts ,那么将返回空字符串。 唯一可能的错误是 copyin 或 copyout 例程返回的错误。
VTS_WRITE_PARTNER 调用创建并结束连接。 以下是结束连接时可能发生的错误:
- ENXIO
- 当前未连接这些 vts。
- EIO
- 对 PHYP 的 H_FREE_VTERM 调用返回了 H_hardware。 这通常指示 PHYP 存在问题,或者分区连接失败。
- EINVAL
- 对 PHYP 的 H_FREE_VTERM 调用返回了H_参数。 这通常指示驱动程序问题。
要创建连接,缓冲区必须包含从 VTS_READ_CLCS 中传递的 CLC。 CLC 可以包含结束新行,该行将被除去。 以下是可能的错误:
- EBUSY
- 已连接这些 vts。 请使用 VTS_READ_PARTNER 来确定 VTS 的连接位置,或者使用 VTS_WRITE_PARTNER (名称为空) 来结束连接。
- EINVAL
- 所传递的 CLC 不在此 vts 的有效连接列表中。 如果对 PHYP 的 H_REGISTER_VTERM 调用返回H_参数,那么也会返回 EINVAL。注: 如果发生重新配置,那么可能已更改有效 CLC 的列表。
- EIO
- 对 PHYP 的 H_REGISTER_VTERM 调用返回了H_参数。 这可能是由于 PHYP 失败。