Перейти от печати к записи файла c

У меня есть код, который читает вход xdr файл и показывает результат в оболочке, но я предпочитаю, чтобы программа сохраняла результаты в формате, который я могу прочитать с помощью geany, nano или других программ. Программа:

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

Как вы можете видеть, файл печатает результат, но я предпочитаю, чтобы он сохранял его в файле, которым я могу манипулировать и читать нормально.

Большое спасибо за вашу помощь.

1 ответ

Вы можете сделать это или перенаправить вывод в файл, используя 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);

}

Другие вопросы по тегам