在C中打印原始文本时如何捕获错误

我知道如何简单地打印一个文本文件到打印机:(看到我的问题在代码块下面)

#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; } 

但是我的问题是在使用这种技术将文本打印到打印机时出现错误。 如果用户当时没有有效或可用的打印机呢? 我希望我的程序吐出来:“错误:打印机不存在!”。

有什么我可以做的吗? 谢谢!

您可以检查打印机是否联机,但是只有当您有权访问内核模式时,如果您是打印驱动程序或在Windows 95/98下。

通常,打印机端口地址设置为0x378 (并行端口的数据寄存器)。 加一个( 0x379 )给我们的是并行端口状态寄存器的地址。 状态寄存器(SELECT)的第4位告诉我们打印机是在线还是离线。 如果该位置位,则打印机处于联机状态,如果该位为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 

它来自codeguru 。 但是请注意,您应该更好地使用WIN32(OpenPrinter(),WritePrinter()StarDocPrinter(),StartPagePrinter()等打印机api)