2013-07-19 85 views
0

这是访问(外围驱动器)打印机的示例代码。但似乎stdprn不工作。我怎样才能让它活着?或者还有其他合适的方法来打印任何东西。通过C代码访问打印机

/*print_it.c-This program preints a listing with line numbers */ 
#include <stdlib.h> 
#include <stdio.h> 
void do_heading(char *filename); 
int line = 0, page = 0; 
int main(int argv, char *argc[]) 
{ 
    char buffer[256]; 
    FILE *fp; 
    if(argv < 2) 
    { 
     fprintf(stderr, "\nProper Usage is: "); 
     fprintf(stderr, "\nprint_it filename.ext\n"); 
     return(1); 
    } 
    if ((fp = fopen(argc[1], "r")) == NULL) 
    { 
     fprintf(stderr, "Error opening file %s!", argc[1]); 
     return(1); 
    } 
    page = 0; 
    line = 1; 
    do_heading(argc[1]); 
    while(fgets(buffer, 256, fp) != NULL) 
    { 
     if(line % 55 == 0) 
      do_heading(argc[1]); 
     fprintf(stdprn, "%4:\t%s" , line++, buffer); 
    } 
    fprintf(stdprn, "\f"); 
    fclose(fp); 
    return 0; 
} 
void do_heading(char *filename) 
{ 
    page++; 
    if (page > 1)fprintf(stdprn, "f"); 
    fprintf(stdprn, "Page: %d, %s\n\n", page, filename); 
} 
return 0; 
} 

谢谢。

+1

如果(页面> 1); ? –

+0

[C编译使用stdprn时出错]的可能重复(http://stackoverflow.com/questions/12052484/c-compilation-errors-on-using-stdprn) – Joni

+0

对不起这是一个错字。 @RenéKolařík – Maruf

回答

0

看起来像stdprn是1980年代在某些MS-DOS编译器中存在的东西。它不是任何C标准的一部分,也不是在现代编译器中实现的。

可能能够通过添加以下内容到程序自己定义:

#ifdef _WIN32 
#define PRINTER_DEVICE "PRN" 
#else /* assume unix */ 
#define PRINTER_DEVICE "/dev/lp0" 
#endif 

FILE *stdprn = fopen(PRINTER_DEVICE, "w"); 
/* should check for errors if stdprn == NULL */ 
+0

如果它是如此过时那么是否有任何合适的方法来打印任何打印机? @Joni – Maruf

+0

没有便携式的,你必须使用操作系统API。如果打印机物理连接到本机(不是网络打印机),打开打印机设备并向其写入纯文本“可能”会工作,但您将无法设置字体或打印图形。 – Joni

+0

“**如果打印机物理连接到本机(不是网络打印机),打开打印机设备并向其写入纯文本”可能“有效**”只是告诉我该如何完成。我只需要打印几行。 – Maruf