Re: fprintf && write

From
Alexander Krisak ()
To
Andrey Melnikov ()
Date
2003-05-31T22:23:50Z
Area
RU.UNIX.PROG
From: "Alexander Krisak" <chris@imp.lg.ua>


Hello, Andrey Melnikov
> Что-то у меня лыжи не едут совсем.
> Беру софтину, которая всю свою разумную жизнь работала так:
>
>   out = fdopen(out_fd, "w");
>   ....
>
>   fprintf(out, "%s", buffer);
>   ....
>
> Выкидываю все эти fprintf() и заменяю на свою функцию:
>
> static char wr_buf[1024];
> write_out (int fd, char *fmt, ...){
>     va_list ap;
>     fd_set wfds;
>     struct timeval tv;
>     int wlen = 0, len, wr;
>
>     va_start(ap,fmt);
>     (void) vsnprintf(wr_buf,sizeof(wr_buf),fmt,ap);
>     va_end(ap);
>
>     FD_ZERO (&wfds);
>     FD_SET (fd, &wfds);
>     len = strlen(wr_buf);
>
>     while (wlen != len){
>
>           tv.tv_sec = timeout; /* timeout; */
>           tv.tv_usec = 0;
>
>           if (!select (fd + 1, NULL, &wfds, NULL, &tv)){
>              return -1;
>           }
>         wr = write(fd,wr_buf,len);
>
>         if (wr < 0){
>            return -1;
>         } else {
>            wlen += wr;
>         }
>     }
>
>    return 0;
> }
>
> И скорость падает в 2 (два) с лишним раза. Где я тут неправ ?

man fopen() и все прочее на предмет буферизации выводимых данных.
в частности man setbuf и setvbuf.
--
kris



--- ifmail v.2.15dev5
 * Origin: Severodonetsk-InterNetNews site http://www.sed.lg.ua/ (2:5020/400)