Перейти от печати к записи файла 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);
}