Здравствуйте!
При реализации функций печати текстового редактора у меня возникла следующая проблема. Перед выводом текста на принтер проверяю состояние принтера вот таким образом:
int check_printer()
{
int fd, res;
unsigned char status = 0;
QApplication::setOverrideCursor(QCursor(Qt::WaitCursor));
fd = open("/dev/lp0", O_RDONLY);
if (fd < 0)
{
QApplication::restoreOverrideCursor();
return PRINTER_OFFLINE;
}
res = ::ioctl(fd, LPGETSTATUS, &status);
sleep(1);
::close(fd);
QApplication::restoreOverrideCursor();
// out of paper
if (status & LP_POUTPA)
return PAPER_EMPTY;
if (!(status & LP_PERRORP))
return PRINTER_ERR;
if (!(status & LP_PSELECD))
return PRINTER_OFFLINE;
if (status & LP_PBUSY)
return PRINTER_BUSY;
return PRINTER_OK;
}
При этом программа нормально отслеживает включен принтер или нет и наличие бумаги в лотке принтера. Но все это лишь до того момента, пока принтер не находится в режиме энергосбережения. Когда принтер засыпает, программа не получает состояния принтера и выводит статус "принтер не отвечает". Если не проверять состояние принтера, документ выводится нормально. Но в таком случае нельзя отследить наличие бумаги и включение принтера. Можно ли решить эту проблему? Каким образом можно отследить "спящий" принтер и "разбудить" его перед печатью? И если И если можно то каким образом? Разработка ведется под Linux с ядром 2.6 в Qt версии 4.4.3. Заранее спасибо.