如何在UNIX C中选择select中的nfds参数

时间:2017-07-01 23:57:04

标签: c unix select pipe

我有两个管道,我需要验证哪个管道已准备就绪。问题在于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但没有:我只能同时验证一个管道的变化。 你能救我吗?

0 个答案:

没有答案