読み書き時間と数を選択するには? [閉鎖]

読み書き時間と数を選択するには? [閉鎖]

このプログラムは一度だけ待機しますが、その理由を知りません。実際、この質問はトピックから逸​​脱した質問として残してはいけないと思います。

#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ループの内部。

おすすめ記事