읽기/쓰기 시간과 개수를 선택하는 방법은 무엇입니까? [폐쇄]

읽기/쓰기 시간과 개수를 선택하는 방법은 무엇입니까? [폐쇄]

이 프로그램은 한 번만 대기하는데 그 이유를 모르겠습니다. 사실 이 질문은 주제에서 벗어난 질문으로 남겨둬서는 안 된다고 생각합니다.

#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <sys/select.h>
#include <unistd.h>

int main(void)
{
  fd_set set;
  struct timeval timeout;
  int rv;
  char buff[100];
  int len = 100;
  int filedesc = open( "/dev/ttyS0", O_RDWR );
  int filedesc1 = filedesc + 1;

  timeout.tv_sec = 5;
  timeout.tv_usec = 10000;
  while(1) {
    printf("begin:\n");
    FD_ZERO(&set); /* clear the set */
    FD_SET(filedesc, &set); /* add our file descriptor to the set */
    rv = select(filedesc1, &set, NULL, NULL, &timeout);
    if(rv == -1)
      perror("select\n"); /* an error accured */
    else if(rv == 0)
      printf("timeout\n"); /* a timeout occured */
    else
      read( filedesc, buff, len ); /* there was data to read */
  }
}

답변1

Select맨페이지 에서 :

Linux에서 select()는 잠자지 않은 시간을 반영하도록 시간 제한을 수정합니다. 대부분의 다른 구현에서는 이 작업을 수행하지 않습니다. (POSIX.1-2001은 두 가지 동작을 모두 허용합니다.)

첫 번째 시간 초과가 발생한 후 timeout남은 절전 시간을 반영하도록 변수가 업데이트되었습니다. 이는 전체 5.01초를 대기했기 때문에 0입니다.

select마지막 매개변수가 어떻게 선언되지 않았는지 확인하세요 const.

이후에 5.01초 동안 다시 대기하려면 다음 코드를 이동해야 합니다.

timeout.tv_sec = 5;
timeout.tv_usec = 10000;

... while루프 내부.

관련 정보