Студопедия.Орг Главная | Случайная страница | Контакты | Мы поможем в написании вашей работы!  
 

Принтеры с сетевыми интерфейсами



Часто при покупке сетевой карты для принтера можно приобрести две версии: эмулирующую спулер (более дорогая версия) или просто позволяющую принимать на принтер данные так, как если бы использовался последовательный или параллельный порт (более дешевая версия). В этом разделе описано, как использовать более дешёвую версию. Использование более дорогой версии описано в предыдущем разделе Принтеры, установленные на удаленных хостах.

Формат файла /etc/printcap позволяет указывать, какой последовательный или параллельный интерфейс использовать, и (при использовании последовательного интерфейса), какую установить скорость, использовать ли управление потоком, размер отступов для табуляций, преобразование символов новой строки и другие параметры. Но нет способа указать подключение к принтеру, прослушивающему TCP/IP или другой сетевой порт.

Для посылки данных на подключенный к сети принтер, надо разработать программу взаимодействия, которую могут вызывать текстовый фильтр и фильтры преобразований. Вот один из примеров: скрипт netprint принимает все данные со стандартного входного потока и посылает их на принтер, подключенный к сети. Мы указываем имя хоста принтера в качестве первого аргумента, а номер порта, к которому надо подключаться — в качестве второго аргумента команды netprint. Учтите, что поддерживается только одностороннее взаимодействие (с ОС FreeBSD на принтер); многие сетевые принтеры поддерживают двустороннее взаимодействие, и вы можете захотеть его использовать (для получения состояния принтера, учета и т.п.).

#!/usr/bin/perl

#

# netprint - Текстовый фильтр для принтера, подключенного к сети

# Установлен в /usr/local/libexec/netprint

#

$#ARGV eq 1 || die "Usage: $0 <printer-hostname> <port-number>";

$printer_host = $ARGV[0];

$printer_port = $ARGV[1];

require 'sys/socket.ph';

($ignore, $ignore, $protocol) = getprotobyname('tcp');

($ignore, $ignore, $ignore, $ignore, $address)

= gethostbyname($printer_host);

$sockaddr = pack('S n a4 x8', &AF_INET, $printer_port, $address);

socket(PRINTER, &PF_INET, &SOCK_STREAM, $protocol)

|| die "Can't create TCP/IP stream socket: $!";

connect(PRINTER, $sockaddr) || die "Can't contact $printer_host: $!";

while (<STDIN>) { print PRINTER; }

exit 0;

Затем можно использовать этот сценарий в различных фильтрах. Пусть у нас есть строчный принтер Diablo 750-N, подключенный к сети. Принтер принимает данные на печать через порт 5100. Имя хоста для принтера — scrivener. Вот текстовый фильтр для этого принтера:

#!/bin/sh

#

# diablo-if-net - Текстовый фильтр для принтера Diablo `scrivener',

# прослушивающего порт 5100. Установлен в /usr/local/libexec/diablo-if-net

#

exec /usr/libexec/lpr/lpf "$@" | /usr/local/libexec/netprint scrivener 5100





Дата публикования: 2015-01-10; Прочитано: 264 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!



studopedia.org - Студопедия.Орг - 2014-2024 год. Студопедия не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования (0.005 с)...