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)