首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用FD_SET编程错误

用FD_SET编程错误
EN

Stack Overflow用户
提问于 2011-11-06 17:43:16
回答 2查看 2.1K关注 0票数 0

我的代码有问题,我无法找出问题是什么,因为我是新选择();

有人能告诉我这是怎么回事吗?

代码语言:javascript
复制
run_fct.c: In function ‘run’:
run_fct.c:22: error: invalid type argument of ‘->’ (have ‘fd_set’)
cc1: warnings being treated as errors
run_fct.c:11: error: unused variable ‘timeout’
make: *** [run_fct.o] Error 1

代码语言:javascript
复制
FD_SET(0, fds);

代码语言:javascript
复制
void run(t_coord* piece, t_env* env, t_used_piece* rand_piece)
{
    char            arrows[2000];
    int             number;
    int             nread;
    int             ret;
    fd_set          fds;
    struct timeval  timeout;
    int             test;

    test = 0;
    (void)env;
    number = 0;
    set_keypress();
    init_pieces(piece);
    while (1)
    {
        FD_ZERO(&fds);
        FD_SET(0, fds);
        ret = select(1, &fds, 0, 0, 0);
        if (test == 0)
        {
            get_piece(rand_piece);
            number = rand_piece->piece;
            print_piece(env, piece, number);
        }
        if (ret > 0)
        {
            if (FD_ISSET(0, &fds))
            {
                nread = read(0, arrows, 3);
                if (arrows[0] == 27 && arrows[1] == '[' && arrows[2] == 'A')
                {
                    printf("A = UP\n");
                    piece[number].ay = piece[number].ay + 1;
                }
                else if (arrows[0] == 27 && arrows[1] == '[' && arrows[2] == 'B')
                {
                    piece[number].ay = piece[number].ay + 2;
                }
                else if (arrows[0] == 27 && arrows[1] == '[' && arrows[2] == 'C')
                {
                    piece[number].ax = piece[number].ax + 1;
                    piece[number].ay = piece[number].ay + 1;
                }
                else if (arrows[0] == 27 && arrows[1] == '[' && arrows[2] == 'D')
                {
                    piece[number].ax = piece[number].ax - 1;
                    piece[number].ay = piece[number].ay + 1;
                }
                else
                {
                    piece[number].ay = piece[number].ay + 1;
                }
            }
        }
        test = 1;
    }
    reset_keypress();
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-11-06 17:48:50

也许您是指FD_SET(0, &fds); (您在fds之前忘记了& )。

我希望您知道使用select有一些局限性。ppollpollpselect可能更好。

票数 1
EN

Stack Overflow用户

发布于 2011-11-06 17:48:16

您忘了将fd_set作为指针传递。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8028969

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档