Your solution solved my problem.
You wrote it in cpp but a can translate to C.
Thanks all. Both pocolomos and ndtrung4419


On Tue, Jun 21, 2011 at 1:03 PM, Nguyen Tran Nhan <[email protected]>wrote:

>
>
> On Tue, Jun 21, 2011 at 10:39 AM, Viet Hung Nguyen <[email protected]>wrote:
>
>> Hi all, I'm trying to write a function for my assigment, that function
>> need to print out to both stdout and a file. My C program get user input by
>> scanf.
>> I intend to write a function like printf but i don't really know how:
>>
>> I tried this, but it only can work with "pure" string, can't convert %d,
>> %.*lf...
>>
>>> void dupPrint(FILE *fp,char *string)
>>> {
>>>     printf("%s",string);
>>>     fprintf(fp,"%s",string);
>>>
>>>     return;
>>> }
>>>
>>
>>
>> I tried dup2 and freopen but they didn't work for me.
>>
>> #include <stdio.h>
>>> #include <unistd.h>
>>> #include <fcntl.h>
>>>
>>> int main()
>>> {
>>>     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("Nhap vao so i : ");
>>> //    scanf("%d",&i);
>>>     //printf("%d\n",i);
>>>
>>>
>>>     return 0;
>>> }
>>>
>> This dup2() tut only print to file.
>>
>> I also tried tee, but may be it not work because I have to get input from
>> user (if work, it's not "fair" because tee isn't in my program).
>>
>> Can anyone suggest a solution for my problem.
>> Thanks!
>> (sorry for my bad English).
>>
>>
>> --
>> Thanks & Best regards,
>>
>> Nguyen Viet Hung (Mr)
>>
>> Email: [email protected]
>>
>
>
>
>
> i think vsnprintf and something like va_list will help you.
>
> void dubPrint(FILE *fp, const char *format, ...)
> {
>     int buf_size = 1024;
>     char *buf = new char[buf_size];
>
>     va_list args;
>
>     va_start(args, format);
>     while (vsnprintf(buf, buf_size, format, args) >= buf_size) {
>         delete[] buf;
>         buf_size *= 2;
>         buf = new char[buf_size];
>     }
>     va_end(args);
>
>     printf("%s\n", buf);
>     fprintf(fp, "%s\n", buf);
>
>     fflush(fp);
> }
>
> _______________________________________________
> POST RULES : http://wiki.hanoilug.org/hanoilug:mailing_list_guidelines
> _______________________________________________
> HanoiLUG mailing lists: http://lists.hanoilug.org/
> HanoiLUG wiki: http://wiki.hanoilug.org/
> HanoiLUG blog: http://blog.hanoilug.org/
>



-- 
Thanks & Best regards,

Nguyen Viet Hung (Mr)

Email: [email protected]
YM: hvnsweeting
_______________________________________________
POST RULES : http://wiki.hanoilug.org/hanoilug:mailing_list_guidelines
_______________________________________________
HanoiLUG mailing lists: http://lists.hanoilug.org/
HanoiLUG wiki: http://wiki.hanoilug.org/
HanoiLUG blog: http://blog.hanoilug.org/

Trả lời cho