Как отловить ошибки при печати необработанного текста в C - PullRequest
4 голосов
/ 23 февраля 2012

Я знаю, как просто напечатать текстовый файл на принтер: (См. Мой вопрос под блоком кода)

#include <stdio.h>
#include <stdlib.h>

int main ( void )
{
     FILE * Printer = fopen("LPT1", "w");
     FILE * FilePointer;
     char str[256];
     char buf[BUFSIZ];
     FilePointer = fopen("sample.txt", "r");
     if( !FilePointer )
     {
        printf("File does not exist\n");
        return -1;
     }
     while( fgets ( buf, sizeof buf, FilePointer ) != NULL ) 
     {
            fprintf(Printer, "%s", buf);
     }
         printf("\nPrinting..\n");
     fprintf(Printer, "\f");

     getch(); 
     return 0;
}

Но моя проблема заключается в том, что при использовании этой техники для печати текста на принтере происходит перехват ошибок. Что если у пользователя нет действующего или годного к использованию принтера? Я хочу, чтобы моя программа выдавала что-то вроде: «Ошибка: принтер не существует!».

Могу ли я что-нибудь сделать с этим? Спасибо!

1 Ответ

2 голосов
/ 23 февраля 2012

Вы можете проверить, подключен ли принтер к сети, но только , если у вас есть доступ к режиму ядра, если вы используете драйвер печати или под Windows 95/98.

Обычно адрес порта принтера устанавливается 0x378 (регистр данных параллельного порта). Добавление одного (0x379) к этому дает нам адрес регистра состояния параллельного порта. Бит 4 регистра состояния (SELECT) сообщает нам, подключен ли принтер к сети или нет. если бит установлен, то принтер подключен и если его 0, бит находится в автономном режиме. Это может выглядеть так:

int status;

// get status register value at 0x379
status = _inp (0x379);

if (status & 0x10) // check bit 4
{
// printer online
}
else
{
// printer offline
} 

Вот другой член этого регистра:

 bit 1 : DCN
 bit 3 : FAULT
 bit 4 : SELECT
 bit 5 : PAPER END
 bit 6 : ACKNOWLEDGE
 bit 7 : BUSY

Это исходит от кодегуру . Но учтите, что вам лучше использовать более высокий интерфейс, такой как API принтера в WIN32 (OpenPrinter (), WritePrinter () StarDocPrinter (), StartPagePrinter () и т. Д.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...