lp - принтеры
НАЗВАНИЕlp - принтеры
СИНТАКСИС
#include
КОНФИГУРАЦИЯ
lp[0-2] - это символьные устройства для работы
параллельного порта; оно имеет основной число 6 и
второстепенное 0-2. Второстепенные числа соответствуют
следующим адресам порта принтера: 0x03bc, 0x0378 и 0x0278.
Обычно они работают в режиме 220 с пользователем root
группы lp. Управлять принтерами можно при помощи опроса и
при помощи сигнала прерывания. Прерывания рекомендуются
при высоких скоростях печати, например, для лазерных
принтеров. Для обычных матричных принтеров будет
достаточно опроса портов. По умолчанию устанавливается
режим опроса.
ОПИСАНИЕ
Поддерживаются следующие вызовы: ioctl(2):
int ioctl(int fd, LPTIME, int arg)
Устанавливает время, в течение которого драйвер
ожидает проверку принтера, когда его буфер заполнен
arg. Если принтер быстрый, то лучше уменьшить это
число, а если медленный, то лучше увеличить. Это
чило представлено в сотых секунды; по умолчанию
указано число 2, что означает 0,02 секунды. Это
отражается только на драйвере опроса.
int ioctl(int fd, LPCHAR, int arg)
Устанавливает максимальное количество циклов, в
течение которых драйвер опроса ожидает готовность
принтера к переводу символа в переменную arg. Если
печать медленная, то рекомендуется увеличить это
число, а если медленная система, то увеличить. По
умолчанию это число равно 1000 и оно влияет только
на драйвер опросов.
int ioctl(int fd, LPABORT, int arg)
Если arg равен нулю, то драйвер принтера будет
повторять попытки при ошибках, в противном случае
он прекратит их повторение. По умолчанию
устанавливоемое значение равно нулю.
int ioctl(int fd, LPABORTOPEN, int arg)
Если arg равен нулю, то open(2) будет прерван при
ошибке, иначе ошибка будет проигнорирована.
Значение по умолчанию не равно нулю.
int ioctl(int fd, LPCAREFUL, int arg)
Если arg равен нулю, то сигналы о том, что
закончилась бумага, принтер не готов или ошибка,
должны быть с отрицательным значением: при другом
значении они игнорируются. По умолчанию значение
не равно нулю.
int ioctl(int fd, LPWAIT, int arg)
Устанавливает число циклов ожидания до
стробирования принтера и для получения только что
напечатанного символа, а также устанавливает число
циклов ожидания до остановки стробирования в
зависимости от значения arg. В руководстве
сказано, что это время должно равняться 0.5-м
микросекундам, но опыт показал, что в данном случае
хватает и времени задержки программы. Поэтому
устанавливоемое значение по умолчанию равно нулю.
Это используется как для опрашивающего, так и
прерывающего принтера.
int ioctl(int fd, LPSETIRQ, int arg)
Этот ioctl() требует прав суперпользователя. Он
создает int с новым IRQ в значении аргумента.
Побочный эффект - повторный запуск принтера. Когда
arg равен нулю, будет использован драйвер опроса,
установленный по умолчанию.
int ioctl(int fd, LPGETIRQ, int *arg)
Сохраняет используемый IRQ в arg.
int ioctl(int fd, LPGETSTATUS, int *arg)
Сохраняет значение статуса порта, равное arg. Биты
имеют следующие значения:
LP_PBUSY принтер занят, значение по умолчанию - 1
LP_PACK подтверждение, значение по умолчанию - 0
LP_POUTPA закончилась бумага, значение по умолчанию - 1
LP_PSELECD принтер выбран, значение по умолчанию - 1
LP_PERRORP ошибка, значение по умолчанию - 0
Обратитесь к руководству по Вашему принтеру для
уяснения значения сигналов. Замечание: неописанные
биты тоже могут иметь значение (в зависимости от
Вашего принтера).
int ioctl(int fd, LPRESET)
вновь запускает принтер, аргументы для этого не
используются.
ФАЙЛЫ
/dev/lp*
АВТОРЫ
Изначально драйвер принтера был описан Jim Weigand и Linus
Torvalds. Далее он был доработан Michael K. Johnson.
Программа прерывания написана Nigel Gamble. Alan Cox
сделал ее модульной. LPCAREFUL, LPABORT, LPGETSTATUS были
добавлены Chris Metcalf.