加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-16 07:29:13 所属栏目:百科 来源:网络整理
导读:我知道如何简单地将文本文件打印到打印机: (请参阅下面的代码块我的问题) #include stdio.h#include stdlib.hint main ( void ){ FILE * Printer = fopen("LPT1","w"); FILE * FilePointer; char str[256]; char buf[BUFSIZ]; FilePointer = fopen("sample.
我知道如何简单地将文本文件打印到打印机:
(请参阅下面的代码块我的问题)

#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 existn");
        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.但请注意,你应该更好地使用更高的界面,如WIN3??2中的打印机api(OpenPrinter(),WritePrinter()StarDocPrinter(),StartPagePrinter()等)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读