windows - Sådan fanger du fejl ved udskrivning af rå tekst i C

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg ved, hvordan man blot udskriver en tekstfil til printeren:
(Se mit spørgsmål under kodeblokken)


#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
");
        return -1;
     }
     while( fgets ( buf, sizeof buf, FilePointer ) != NULL ) 
     {
            fprintf(Printer, "\%s", buf);
     }
         printf("
Printing..
");
     fprintf(Printer, "f");

     getch(); 
     return 0;
}


Men mit problem er, at der opstår fejl ved at bruge denne teknik til at udskrive en tekst til printeren.
Hvad hvis brugeren ikke har en gyldig eller brugbar printer på det tidspunkt? Jeg vil have mit program til at spytte noget ud som: 'Fejl: printeren eksisterer ikke!'.


Er der noget jeg kunne gøre med det? Tak!

Bedste reference


Du kan kontrollere, om printeren er online, men kun , hvis du har adgang til kernel-tilstand, hvis du er en printerdriver eller under Windows 95/98.


Normalt er printerportens adresse indstillet 0x378 (dataregister for parallelport). Tilføjelse af en (0x379 til dette giver os adressen til statusregisteret for parallelporten. bit 4 i statusregistret (SELECT) fortæller os, om printeren er online eller offline. Hvis bit er indstillet, er printeren online
og hvis det er 0, er biten offline.
Det kan se sådan ud:


int status;

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

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


Her er det andet medlem af dette register:


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


Det kommer fra codeguru. Men vær opmærksom på, at du bedre bør bruge en højere grænseflade som printeren api i WIN32 (OpenPrinter (), WritePrinter () StarDocPrinter (), StartPagePrinter () osv.) [6]