我有两个管道,我需要验证哪个管道已准备就绪。问题在于nfds参数。如果我设置参数如:
pipeStore[0] + 1
我只能使用pipeStore和其他管道一样
int max_fd;
fd_set rpipe_fds;
struct timeval tv;
int retval;
int store_index = 0;
int vector[100];
FD_ZERO(&rpipe_fds);
FD_SET(pipeRead[0], &rpipe_fds);
FD_SET(pipeStore[0], &rpipe_fds);
tv.tv_sec= 100 ;
tv.tv_usec= 0 ;
int val_max;
if(pipeRead[0] >= pipeStore[0])
val_max = pipeRead[0] + 1;
else
val_max = pipeStore[0] + 1;
retval = select(val_max,&rpipe_fds,NULL,NULL,&tv);
if(retval)
{
if(FD_ISSET(pipeStore[0],&rpipe_fds))
{
read(pipeStore[0], store_vector, sizeof(store_vector));
vector[store_vector[0]] = store_vector[1];
printf("Stored %d at position %d\n",vector[store_vector[0]],store_vector[1]);
}
if(FD_ISSET(pipeRead[0],&rpipe_fds) )
{
read(pipeRead[0], &store_index, sizeof(int));
int val_to_return = vector[store_index];
write(pipeStore[1], &val_to_return, sizeof(int));
}
`}
所以我尝试使用上面的代码选择最大的那个简单的alghoritm但没有:我只能同时验证一个管道的变化。 你能救我吗?