2013-07-10 79 views
0

我有一个代码从xdr文件读取输入并在shell上显示结果,但我更喜欢程序将结果保存为我可以用geany或nano或其他人读取的格式程式。 程序:从打印变为写入文件c

#include <stdio.h> 
#include <stdlib.h> 
#include <rpc/rpc.h> /* xdr is a sub-library of rpc */ 

#pragma comment(lib, "Ws2_32.lib") // Library for ntohl and htonl 

main() 
{ 
    // Reopens stdin to be the same input stream but in binary mode 

    XDR xdrs; 
    long i, j; 

    FILE* fp; 
    fp = fopen("file.txt", "rb+"); 

    xdrstdio_create(&xdrs, fp, XDR_DECODE); 
    for (j = 0; j < 100; j++) 
    { 
     if (!xdr_long(&xdrs, &i)) { 
      fprintf(stderr, "failed!\n"); 
      exit(1); 
     } 
     printf("%ld ", i); 
    } 

    printf("\n"); 
    exit(0); 
} 

正如你所看到的文件打印的结果,但我更喜欢它保存它,我可以操作和正常读取的文件。

非常感谢您的帮助。

回答

0

你可以这样做,也可以使用DUP2()

#include <stdio.h> 
#include <stdlib.h> 
#include <rpc/rpc.h> /* xdr is a sub-library of rpc */ 

#pragma comment(lib, "Ws2_32.lib") // Library for ntohl and htonl 

main() 

{

// Reopens stdin to be the same input stream but in binary mode 

XDR xdrs; 
long i, j; 

FILE* fp,*fpwrite; 
fp = fopen("file.txt", "rb+"); 
fpwrite = fopen("Myfile","w+"); 
if(fpwrite == NULL){ 
    printf("Failed to open destination file\n"); 
} 

xdrstdio_create(&xdrs, fp, XDR_DECODE); 
for (j = 0; j < 100; j++) 
{ 
    if (!xdr_long(&xdrs, &i)) { 
     fprintf(stderr, "failed!\n"); 
     exit(1); 
    } 
    printf("%ld ", i); 
    fprintf(fpwrite,"%ld ",i); 

} 

printf("\n"); 
fclose(fp); 
fclose(fpwrite); 
exit(0); 

}

+0

当我尝试这方面,我收到以下错误消息输出重定向到文件:decode.c:'in'main': decoder.c:14:9:错误:从类型'struct FILE *'分配类型'FILE'时的不兼容类型 decoder.c:15:12 :error:无效的操作数为二进制==(有'FILE'和'void *') decoder.c:27:5:error:'fprintf'参数1的不兼容类型 /usr/include/stdio.h: 357:12:note:expected'struct FILE * __restrict__'but argument is of'FILE' decoder.c:33:1:error:'fclose'参数1的不兼容类型 /usr/include/stdio.h :238:12:note:expected'struct FILE *'but argument is of'FILE'' –

+0

我解决了问题@Chinna,我必须在一行中声明一个文件,并且:我不能在相同的行:'FILE * a1,a2,... an;'我必须声明如下:'FILE * a1; FILE * a2; ...' –

+0

@PanichiPattumerosPapaCastoro对不起,我看着它。但你可以声明像这样的文件* fp,* fpwrite – Chinna