2013-07-19 87 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