"Devrin Talen" <dc...@cornell.edu> writes:

> To block on accesses to a file until it actually has
> data for you try reading up on the `select` call:
>
>      % man 2 select

That would be great because that is exactly what I
need. However I didn't get it to work. I always get
"No data." for the below code, but it doesn't wait for
the timeout, it is just no data instantly on every
iteration. Does select(2) really block until there is
data, or does it block until it is possible to read
the fd?

The whole program: http://user.it.uu.se/~embe8573/llc-select/

  // select
  fd_set rfds;
  FD_ZERO(&rfds);
  FD_SET(0,  &rfds);
  FD_SET(fd, &rfds);

  int retval;

  long long old_count = -1;
  long long     count =  0;

  struct timeval tv;
  tv.tv_sec = 0;
  tv.tv_usec = rate*1000;

  while (count < max_misses) {
    retval = select(fd + 1, &rfds, NULL, NULL, &tv);
    if (retval == -1) { std::cerr << "Can't select()!" << std::endl; }
    else if (retval) {
      std::cout << "Data available! ";
      read(fd, &count, sizeof(count));
      if (count != old_count) { std::cout << "LLC misses: " << count << 
std::endl; }
    }
    else { std::cout << "No data." << std::endl; }
  }

-- 
underground experts united


-- 
To UNSUBSCRIBE, email to debian-user-requ...@lists.debian.org 
with a subject of "unsubscribe". Trouble? Contact listmas...@lists.debian.org
Archive: https://lists.debian.org/877fzqxxva....@debian.uxu

Reply via email to