Como imprimir em stdout e arquivo em C

Eu li este tópico, mas o problema dele talvez seja diferente do meuEscrevendo para stdout e um arquivo

Eu quero escrever uma função, essa função precisa imprimir em stdout e em um arquivo. Meu programa C obtém a entrada do usuário por scanf.

Pretendo escrever uma função como printf, mas não sei como:

Eu tentei isso, mas ele só pode funcionar com uma string "pura", não pode converter% d,%. * Lf (minha função de impressão precisa apenas de duas conversões)

void dupPrint(FILE *fp,char *string)
{
    printf("%s",string);
    fprintf(fp,"%s",string);

    return;
}

Tentei o dup2 e o freopen, mas eles não funcionaram para mi

#include <stdio.h>
#include <unistd.h>
#include <fcntl.h>

int main()
{
    int i;
    int file = open("input3.txt", O_APPEND | O_WRONLY);
    if(file < 0) return 1;

    if(dup2(file,1) < 0) return 1;

    printf("Redirect to file!\n");
    printf("enter i : ");
    scanf("%d",&i);



    return 0;
}

Este tutorial do dup2 () é impresso apenas em arquiv

Eu também tentei tee, mas pode não funcionar porque tenho que receber informações do usuário (se funcionar, não é "justo" porque tee não está no meu programa

Acho que implementar um problema semelhante ao printf resolveu o problema, mas não sei como converter. * Lf (imprima em dobro com precisão de inserção do usuário)

#include <stdio.h>
#include <stdarg.h>
void dupPrint(FILE *fp,char *fmt,  ...)
{
    va_list ap;
    char *p, *sval;
    int ival;
    double dval;

    va_start (ap, fmt); //make ap point to 1st unnamed arg
    for(p = fmt; *p; p++)
       {
           if (*p != '%') {
               putchar(*p);
               continue;
           }
           switch (*++p) {
               case 'd':
                   ival = va_arg(ap, int);
                   printf("%d", ival);
                   break;
               case '.*lf' //?????
           }
       }       

}

lguém pode sugerir uma solução para o meu problem

questionAnswers(4)

yourAnswerToTheQuestion