3270cn 特殊文件
用途
通过 3270 连接适配器设备处理程序提供对 3270 连接适配器的访问。
描述
3270cn 字符特殊文件提供对 3270 连接适配器设备处理程序的访问,以用于仿真 3270 显示站和打印机。 设备处理程序是一个多路复用设备处理程序,它支持其每个通道上的独立逻辑 3270 会话。
设备处理程序支持两种操作方式:
| 项 | 描述 |
|---|---|
| 分布式功能终端 (DFT) 方式 | 在 DFT 方式下,适配器可以显示为多个 SNA 或非 SNA 显示会话和/或非 SNA 打印机会话,并且是控制单元的一个智能设备。 在此方式下,设备处理程序提供对多个 3278/79 显示站进行仿真的功能。 如果连接的控制单元不支持 "扩展异步事件设备状态" ,那么必须仅为一个会话配置控制单元端口或设备处理程序。 |
| 3278/79 仿真控制单元终端 (CUT) 方式 | 在 CUT 方式下,适配器将显示为控制单元的单会话,非智能设备。 在此方式下,设备处理程序提供对单个 3278/79 显示站进行仿真的功能。 |
设备处理程序最多支持四个 3270 连接适配器,其中每个适配器最多可以有五个 DFT 会话或一个 CUT 会话。
/usr/include/sys/io3270.h 文件包含由设备处理程序使用的结构的定义。
使用注意事项
当访问 3270 连接设备处理程序时,应考虑下列各项:
| 项 | 描述 |
|---|---|
| 驱动程序初始化和终止 | 可以装入和卸载设备处理程序。 设备处理程序支持用于初始化和终止自身的配置调用,但不支持用于查询重要产品数据 (VPD) 的配置调用。 |
| 特殊文件支持 | 将讨论除 开 和 关闭 以外的其他子例程,以确定设备处理程序的运行方式。 |
子例程支持
3270 设备处理程序为以下子例程提供特定于 3270 的支持:
打开和关闭子例程
设备处理程序将 3270cn 特殊文件作为字符多路复用特殊文件来支持。 必须同时打开特殊文件以进行读写操作 (0-RDWR)。
对于关闭 3270cn 特殊文件,存在特殊注意事项。 如果同时以 CUT 方式和 CUT-文件传输方式打开文件,那么针对 CUT-文件传输方式的 关闭 操作必须在针对 CUT 方式的 关闭 操作之前。
开 调用中使用的特殊文件名采用几种不同的格式,具体取决于设备的打开方式。 特殊文件名的类型为:
| 项 | 描述 |
|---|---|
| dev /3270c n/C | Starts the device handler in CUT mode for the selected port, where the value of N is 0 <= N <= 7. |
| / dev/3270c n/F | Starts the device handler in CUT File-Transfer mode for the selected port, where the value of N is 0 <= N <= 7. 当前必须以 CUT 方式打开该文件,然后才能以 CUT 文件传输方式打开该文件。 |
| / dev/3270c n/* | Starts the device handler in DFT mode for the selected port, where the value of N is 0 <= N <= 7 and the * (asterisk) is defined by P/A, as follows:
|
| /dev/3270c n | 以DFT模式启动所选端口的设备处理程序,其中n的取值范围为0 ≤ n ≤ 7。 |
在非 SNA DFT 方式下读取子例程
通信适配器从主机接收到的数据将放置在缓冲区中,直到消息完成或缓冲区已满为止。 当出现任一情况时,驱动程序会将程序控制返回给应用程序。 该应用程序可以通过发出 WDC_INQ ioctl 操作来确定 读 子例程调用的状态。
如果 WDC_INQ 操作返回指示有更多数据可用的状态,那么应用程序应立即发出另一个 读 调用。 必须尽快读取可用数据以避免降级链接或降低主机性能。
如果进行了 读 调用并且没有可用的数据,那么调用过程将被阻止,直到数据变为可用为止。 要避免阻塞,请使用 轮询 子例程来确定数据是否可用。
主机将数据作为出站 3270 数据流进行发送。 设备处理程序将转换出站 3270 数据流中的命令代码。 以下是命令代码和转换:
| 命令码 | 转换为驱动程序 | 司机外 |
|---|---|---|
| 擦除所有未受保护的项 | 0x6F | 0x0F |
| 擦除/写入 | 0xF5 | 0x03 |
| 擦除/写入备用项 | 0x7E | 0x0D |
| 读取缓冲区 | 0xF2 | 0x02 |
| 已修改读取 | 0xF6 | 0x06 |
| 写 | 0xF1 | 0x01 |
| 写入结构化字段 | 0xF3 | 0x11 |
以 SNA DFT 方式读取子例程
与非 SNA DFT 方式不同,在 SNA DFT 方式下,设备驱动程序既不执行链接也不执行命令解释。 应用程序必须同时累积 SNA 数据段以形成响应单元 (RU) 并解释其中包含的任何 3270 数据。
非 SNA DFT 方式下的 readx 子例程
通信适配器从主机接收到的数据将放置在缓冲区中,直到消息完成或缓冲区已满为止。 在完成 读 调用后, 读 扩展指向的 io3270 结构将包含状态。 下列其中一个状态码是在io_flagsio3270 结构的字段:
| 项 | 描述 |
|---|---|
| WDI_可用性 | 此链接地址的其他数据可用。 |
| WDI_COMM | 出现通信错误。 该io_status字段包含相应的消息代码。 |
| WDI_PROG | 发生程序错误。 该io_status字段包含相应的消息代码。 |
| WDI_MACH | 发生硬件错误。 该io_status字段包含相应的消息代码。 |
| WDI_致命 | 发生了阻止与主机进一步通信的错误。 除了 WDI_COMM, WDI_PROG或 WDI_MACH 标志之外,还可以选择设置此标志。 它也会在发生 coax 故障时设置。 在这种情况下,io_status字段包含 WEB_610值,但是未设置 WDI_COMM, WDI_PROG或 WDI_MACH 标志。 |
重置时, WDI_DAVAIL 标志指示刚刚读取的数据将标记出站 3270 数据流已完成。
如果 WDI_DAVAIL 标志指示更多数据可用,那么应立即发出另一个 读 子例程。 必须尽快读取可用数据以避免降级链接或降低主机性能。
如果进行了 读 子例程调用并且没有可用的数据,那么调用过程将被阻止,直到数据变为可用为止。 要避免阻塞,请使用 轮询 子例程来确定数据是否可用。
在非 SNA DFT 方式下写子例程
在非 SNA DFT 方式下, 写 子例程会将入站 3270 数据流发送至主机。 在 写 子例程调用上指定的缓冲区必须包含完整的入站 3270 数据流。 当 写 调用已从子例程调用上指定的缓冲区成功传输时,它已完成。
SNA DFT 方式下的写子例程
在 SNA DFT 方式下, 写 子例程将 SNA 数据传送至主机系统。 此数据可以是具有 SNA 头的 3270 数据流,也可以是 SNA 响应。
应用程序将数据发送到设备驱动程序,一次发送一个 RU。 然后,设备驱动程序负责对入站 SNA 数据进行分段。 如果在处理第一个调用之前进行第二个 写 调用,那么在设备驱动程序就绪之前,第二个调用不会继续。 在将数据从应用程序的用户空间传送到设备驱动程序的内核空间之后, 写 子例程完成,并将控制权返回给应用程序。
如果设备驱动程序检测到两个 写 调用之间的 coax 断开连接,那么第二个 写 调用将返回到应用程序,并且 错误号 全局变量设置为 EFAULT。
非 SNA DFT 方式下的 writex 子例程
写 子例程会将入站 3270 数据流发送至主机。 在 写 子例程调用上指定的缓冲区必须包含完整的入站 3270 数据流。
当 写 子例程从指定缓冲区成功传输数据时,它已完成。 在完成 写 子例程调用后, 写 扩展所指向的 io3270 结构将包含状态。 下列其中一个状态码是在io_flagsio3270 结构的字段:
| 项 | 描述 |
|---|---|
| WDI_可用性 | 指示数据可用于此链接地址; 必须先读取数据,然后才能执行任何写入操作。 |
| WDI_COMM | 指示通信错误。 该io_status字段包含相应的消息代码。 |
| WDI_PROG | 指示程序错误。 该io_status字段包含相应的消息代码。 |
| WDI_MACH | 指示硬件错误。 该io_status字段包含相应的消息代码。 |
DFT 方式下的 ioctl 子例程
当设备处理程序处于 DFT 方式时,可以向它发出 ioctl 子例程。 下列是可用的 ioctl 操作:
| 项 | 描述 |
|---|---|
| IOCINFO | 返回逻辑终端号。 此数字是 iocinfo 结构中的控制器类型和控制器连接协议的 EBCDIC 表示法。 |
| WDC_AUTO | 仅对非 SNA DFT 方式有效。 为处理程序提供选项以自动确认接收到有效的 3270 数据流。 仅当 3270 数据流的开头包含以下内容时,才会发送应答:0xF3 00 06 40 00 F1 C2 xx xx 10 14,其中xx不检查字段。 此命令还允许驱动程序在收到数据后不指示确认。 |
| WDC_INQ | 查询由应用程序发出的最后一次非 SNA 读 或 写 调用的状态。 此外, WDC_INQ 操作将确定数据是否可用于读取。 该状态将放置在io_flagsio3270 结构的字段。 此字段接受以下值:
|
| WDC_POR | 首先禁用链路地址,然后重新启用该地址以模拟 3270 终端开机复位功能。 |
| WDC_SSTAT | 仅对非 SNA DFT 方式有效。 将状态发送到主机。 自变量字段包含下列其中一个值:
|
DFT 方式中的错误条件
通过 3270cn 特殊文件访问设备处理程序时,可能返回以下错误条件:
| 项 | 描述 |
|---|---|
| EBUSY | 针对已打开的通道请求了打开。 |
| EFAULT | 由调用程序指定的缓冲区无效。 |
| EINTR | 子例程调用已中断。 |
| EINVAL | 接收到无效参数。 |
| EIO | 在请求的数据传输上发生不可恢复的 I/O 错误。 |
| ENODEV | 为无效通道请求了打开。 |
| ENOMEM | 驱动程序无法分配内存以在数据传输中使用。 |
| ENXIO | 对无效的次要设备号请求了操作。 |
在 CUT 方式下读取子例程
两个 ioctl 操作控制 读 子例程的操作方式: EMNWAIT 和 电子邮件等待 操作。 EMNWAIT 操作指示应立即满足后续读调用的要求。 电子邮件等待 ioctl 操作 (缺省值) 指示只有在来自控制单元的中断指示屏幕上的某些内容已更改之后,才应该满足读调用。 以下是控制单元中断:
| 项 | 描述 |
|---|---|
| Buffer Modification Complete | 读 子例程返回请求的字节数。 |
| Load I/O Address Command Decoded | 对于读取的字节数, 读 子例程返回 0。 |
在 CUT 方式下写子例程
写 子例程会将入站 3270 数据流发送至主机。 在 写 子例程上指定的缓冲区必须包含完整的入站 3270 数据流。 要将偏移量设置到通信适配器缓冲区以开始写入,请使用 Emseek ioctl 操作。
CUT 方式下的 ioctl 子例程
可以在 CUT 方式下向设备处理程序发出 ioctl 子例程。 以下是可接受的 ioctl 操作:
| 项 | 描述 |
|---|---|
| EMKEY | 将扫描代码发送至仿真适配器。 扫描代码通过 EMKEY 操作进行逻辑 OR 运算,结果将用作 ioctl 子例程调用的命令字段。 |
| EMCPOS | 返回光标相对于通信适配器缓冲区开始位置的位置。 |
| EMXPOR | 禁用链路地址,然后重新启用它来仿真 3270 终端开机复位功能。 |
| EMNWAIT | 指定应该立即满足 读 子例程调用。 |
| 电子邮件等待 | 指定只有在更改仿真缓冲区或光标位置 (这是缺省设置) 之后,才应该满足 读 子例程调用。 |
| EMVISND | 返回仿真 "可视/声音" 寄存器的当前内容。integer。 此字段的地址将指定为 EMVISND 操作的参数。 |
| 艾米面具 | 提供掩码以指定显示哪些中断。 "参数" 字段指定掩码的地址。 掩码的 0 位 7 0 到 7) 对应于中断状态寄存器的 0 7 7 位。 掩模的第 8 位至第 15 位对应于视觉/声音寄存器的第 0 位至第 7 位。 此操作允许驱动程序忽略视觉或声音中断,但那些专门屏蔽 ON 的位除外。 当某个位处于开启状态时,对应于该位位置的中断将出现。 与掩码中的 off (0) 位位置相对应的 0 将被设备处理程序废弃。 先前掩码设置将返回到掩码字段中的调用者。 在 IBM® 3270 连接技术参考中记录了中断状态位以及可视位或声音位。 |
| IOCINFO | 将 /usr/include/sys/devinfo.h 文件中定义的设备信息结构返回到用户指定的区域。 该devtype字段的值为 DD_EM78(在 devinfo.h 文件中定义) ,标志字段值的值为 0。 |
| Emseek | 将偏移量设置到通信适配器缓冲区以开始 读 或 写 子例程调用。 |
CUT 方式中的错误条件
通过 dev/3270cn 特殊文件访问设备处理程序时,可能返回以下错误条件:
| 项 | 描述 |
|---|---|
| EBUSY | 针对已打开的通道请求了打开。 击键缓冲区已满。 |
| EFAULT | 由调用者指定的缓冲区无效。 |
| EINTR | 子例程调用已中断。 |
| EINVAL | 在 ioctl 调用上指定了无效参数。 |
| EL3RST | 通信适配器已接收到 重置 命令。 |
| ENOCONNECT | 在指定了 电子邮件等待 ioctl 操作的 读 操作处于等待状态时,与控制单元的连接已停止。 |
| EIO | 在请求的数据传输上发生不可恢复的 I/O 错误。 |
| ENXIO | 请求了对次设备号执行无效的操作。 |
此特殊文件需要 IBM 3270 连接适配器。