lp 特殊文件

用途

提供对行式打印机设备驱动程序的访问。

描述

勒普 驱动程序提供到打印机所使用的端口的接口。

打印机方式

勒普 驱动程序根据在驱动程序中设置的方式 (通过 斯普普 命令或配置) 解释回车符,退格符,换行符,制表符和换页符。 还可以选择每页的行数,每行的列数以及每行开头处的缩进。 可以使用 Lsattr 命令来找到这些方式的缺省值。 可以使用 LPRMODS ioctl 操作来设置以下方式:

描述
绘制 确定对文本进行格式化时是否由设备驱动程序解释数据流。 如果 PLOT 方式为 off ,那么将使用通过 LPRSET ioctl 操作设置的当前值来格式化文本。

如果设置了 PLOT 方式,那么不会对数据流执行任何解释,并且会将字节发送至打印机而不进行修改。 设置 PLOT 方式会导致其他格式化方式 (例如 NOFF 和 NOFL) 被忽略。 缺省打印机后端 皮奥比将以 PLOT 方式发送所有输出。

当处于 PLOT 方式时,应用程序必须发送最终换页符。 如果在未处于 PLOT 方式的情况下执行了最后一次写操作,那么设备驱动程序将发送最终换页符。

关闭 如果此方式为 on ,那么根据使用 LPRSET ioctl 操作设置的当前行值,每个换进纸字符都将替换为换行字符。 如果 PLOT 方式处于活动状态,那么将忽略此方式。
NONL 如果此方式为 on ,那么每个换行字符都将替换为回车符。 如果 PLOT 方式处于活动状态,那么将忽略此方式。
NOCL 如果此方式为 off ,那么将在每个换行字符后插入回车符。 如果方式为 "开启" ,那么在换行字符后不会插入回车符。 如果 PLOT 方式处于活动状态,那么将忽略此方式。
NOTAB 如果此方式关闭,那么将使用空格模拟 8 个位置选项卡。 如果 NOTAB 方式为 on ,那么跳进字符将替换为空格。 如果 PLOT 方式处于活动状态,那么将忽略此方式。
NOBS 如果此方式关闭,那么会将退格发送至打印机。 如果 NOBS 方式为 on ,那么通过发送回车符 (后跟空格) 到适当的打印位置来模拟退格。 如果 PLOT 方式处于活动状态,那么将忽略此方式。
NOCR 如果打开此方式,那么每个回车符都将替换为换行字符。 如果 PLOT 方式处于活动状态,那么将忽略此方式。
CAPS 如果此方式为 on ,那么小写字符将转换为大写。 如果 PLOT 方式处于活动状态,那么将忽略此方式。
回绕 如果此方式关闭,那么将在右页边距处截断该行,并且将废弃通过右页边距接收到的任何字符。 如果 WRAP 方式为 on ,那么在右页边距后接收到的字符将打印在前面的下一行 ... (省略号)。 如果 PLOT 方式处于活动状态,那么将忽略此方式。
丰蒂尼特 最初, FONTINIT 方式是关闭的。 当打印机字体已初始化时,它由应用程序打开。 在以下两种情况下,可以将其关闭:
  • 应用程序需要对字体进行重新初始化。
  • 发生致命打印机错误。 在此情况下, 勒普 设备驱动程序会关闭 FONTINT 方式。
RPTERR 如果 RPTERR 方式已关闭并且发生错误,那么在清除错误或接收到取消信号后,设备驱动程序才会返回。 如果 RPTERR 方式为 "开启" ,那么设备驱动程序将等待先前 LPRSTOV ioctl 操作指定的时间量,然后返回错误。
IGNOREPE 如果 IGNOREPE 方式为 on ,那么设备驱动程序允许对设备进行写操作,而不考虑并行接口上 PE (纸端) 行的状态。 例如,当检测到打印机缺纸时,应用程序可以利用此方式来更改处于软件控制下的打印机的纸盘。

RPTERR 方式关闭时的错误处理

如果 RPTERR 方式为关闭,那么不会执行任何错误报告。 在返回到应用程序之前,设备驱动程序将等待清除错误或接收到取消信号。 RPTERR 是缺省方式,旨在用于不执行错误恢复的现有应用程序。

如果设备驱动程序接收到信号,那么当前操作将返回不完整,并带有 EINTR 错误代码。

如果打印已取消,并且打印机处于 PLOT 方式,那么应用程序必须发送最终换页字符以弹出部分页面。 如果打印机不处于 PLOT 方式,那么设备驱动程序将发送取消后的最终进纸字符。

RPTERR 方式开启时的错误处理

如果 RPTERR 方式为 on ,那么设备驱动程序将等待 v_timeout 配置参数中指定的时间,然后返回未完成的操作并返回错误代码。 此返回信息允许应用程序获取打印机状态,并可能显示错误消息。
注: 当设备驱动程序返回包含错误代码 (如先前所述) 的不完整操作时,应用程序必须重新发送任何未打印的数据。

使用注意事项

与设备相关的子例程

大多数打印机操作是使用 关闭 子例程实现的。 但是,这些子例程向调用程序提供的关于打印机的配置和状态的信息很少或根本没有提供。 ioctl 子例程为打印机设备驱动程序提供更特定于设备的接口。

这些子例程中的大部分传递包含在结构中的数据。 在所有情况下,都应该在调用例程中分配所指示类型的结构。 然后应将指向此结构的指针传递到设备驱动程序。

打开和关闭子例程

如果未安装打印机的适配器,那么打开尝试将失败。 如果打印机适配器繁忙,那么 子例程将返回错误。 但是,由成功打开 勒普 特殊文件的父进程创建的所有子进程都将继承打开的打印机。

如果多个 子例程都具有 模式 参数值 "只读" ,那么该驱动程序允许这些子例程发生。 因此,当打印机适配器当前正在使用时, 斯普普 命令可以执行查询。 勒普 驱动程序一次只允许一个进程写至打印机适配器。

关闭 子例程等待所有输出完成后再返回给用户。

读写子例程

对于本机 I/O 并行端口,未实现 子例程。

当打印到处于脱机状态的并行打印机时, 子例程返回的字节数可能比打印机恢复联机时缓冲和准备写的实际字节数少 1。 这用作一种机制,以向调用应用程序指示打印机存在问题,需要用户干预,可能允许用户将打印机联机并继续打印。 在此情况下, 子例程不会返回任何错误。

ioctl 子例程

可能的 ioctl 操作及其描述如下所示:

描述
IOCINFO 返回描述设备的 /usr/include/sys/devinfo.h 文件中定义的结构。
LPQUERY 提供对打印机状态的访问。 请参阅 /usr/include/sys/lpio.h 文件以获取值定义。 错误的类型如下所示:
  • 打印机是缺纸的。
  • 未选择位: 打印机可能已关闭或未安装。
  • 打印机正忙。
  • 打印机是未知的。
LPRGET 返回页面长度,宽度和缩进值。 当未设置 PLOT 方式时,设备驱动程序将使用这些值。 缺省打印机后端 皮奥比发送所有设置了 PLOT 方式的打印作业。 LPRGET 操作使用 lprio 结构,如 /usr/include/sys/lpio.h 文件中所定义。
LPRGETA 获取 RS232 参数。 这些是波特率,字符率,字符大小,停止位和奇偶性校验的值。 请参阅 LPR232 结构和 termio 结构,如 termios.h 文件中所定义。
注: 出于兼容性原因,支持此操作。 建议对 tcgetattr 子例程进行使用。
LPRGTOV 获取当前超时值,并将其存储在 /usr/include/sys/lpio.h 文件中定义的 lptimer 结构中。 超时值以秒为单位进行测量。
LPRMODG 获取打印机方式。 这些打印机方式支持各种格式化选项和错误报告。 此 ioctl 操作使用 /usr/include/sys/lpio.h 文件中定义的 LPRMOD 结构。
LPRMODS 设置 打印机方式。 这些打印机方式支持各种格式化选项和错误报告。 此 ioctl 操作使用 /usr/include/sys/lpio.h 文件中定义的 LPRMOD 结构。
LPRSET 设置页面的长度,宽度和缩进值。 当未设置 PLOT 方式时,设备驱动程序将使用这些值。 缺省打印机后端 皮奥比发送所有设置了 PLOT 方式的打印作业。 LPRSET 操作使用 lprio 结构,如 /usr/include/sys/lpio.h 文件中所定义。
LPRSETA 设置 RS232 参数。 这些是波特率,字符率,字符大小,停止位和奇偶性校验的值。 请参阅 LPR232 结构和 termio 结构,如 termios.h 头文件中所定义。
注: 出于兼容性原因,支持此操作。 建议对 tcsetattr 子例程进行使用。
LPRSTOV 设置超时的值。 此 ioctl 操作的 arg 参数指向 /usr/include/sys/lpio.h 文件中定义的 lptimer 结构。 必须以秒为单位提供超时值。