LINUX.ORG.RU

Проблема с select


0

0

Есть подпрограмма которая должна копировать данные из одного дескриптора на другой
если ей передать дескрипторы 0 и 1 то почему-то печатается всякая муть, помогите разобраться
int cpFromTo(int from, int to, int timeout, int limit){
char buffer[256];
int max,rc,r;
struct timeval tv;
fd_set rfd;
fd_set wfd;
FD_ZERO(&rfd);
FD_ZERO(&wfd);
FD_SET(from,&rfd);
FD_SET(to,&wfd);

tv.tv_sec=5;
tv.tv_usec=0;

if(from>to)
max=from;
else
max=to;

rc=select(max+1,&rfd,&wfd,NULL,&tv);
if(rc){
if(FD_ISSET(from,&rfd)){
r=read(from,buffer,sizeof(buffer)-1);
buffer[r]='\0';
if(r==0 || r==-1)
return 0;
}
if(FD_ISSET(to,&wfd)){
r=write(to,buffer,strlen(buffer));
if(r==0 || r==-1)
return 0;
}
}
else
}

anonymous

Re: Проблема с select

Чущь какая то написана

Сделай вначале чтение, а затем отдельно запись.
Чтение можно с селектом, а запись если буфер не пуст.
Может я ошибаюсь, на зачем селест на запись, write не должен записать бельше чем не сможет. Это ИМХО

anonymous ()

Re: Проблема с select

Присоединяюсь к тезке.
А почему муть пишет - так у тебя buffer локальный.
Получил данные на rfd, записал buffer, если wfd не готов - вышел из процедуры (данные из buffer при этом теряются). В следующий раз когда войдешь в процедуру и wfd готов, в buffer будет garbage

anonymous ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.