fprintf && write

From
Andrey Melnikov (2:5030/1340.116)
To
All ()
Date
2003-05-31T21:16:08Z
Area
RU.UNIX.PROG
                               Hello All!

Что-то у меня лыжи не едут совсем.
Беру софтину, которая всю свою разумную жизнь работала так:

  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 (два) с лишним раза. Где я тут неправ ?

     Andrey aka TEMHOTA-RIPN
--- GoldED+/LNX 1.1.4.7
 * Origin: Powered by SlackWare Linux (2:5030/1340.116)