2011-11-06 52 views
0

我有我的代码的问题,我找不到问题是什么,因为我新选择();
任何人都可以告诉我从哪里来的问题?C编程错误与FD_SET


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 

FD_SET(0, fds); 

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(); 
} 
+0

什么是't_used_piece'? – cnicutar

+0

@cnicutar它是一个先前定义的随机值的结构。 – Slrs

回答

1

也许你的意思是FD_SET(0, &fds);(你在fds之前忘了&)。

我希望你知道使用select有一些限制。 ppollpollpselect可能会更好。

+0

我惊讶的是你为什么问。编译器为您提供了一个很好的行号,并且该行非常短,并使用FD_SET。快速浏览Linux上'man FD_SET'的输出会给你足够的提示。 –

+0

我意识到你的答案后是多么愚蠢......并且谢谢。 – Slrs

1

你忘了fd_set传递的指针。