I think the growing complexity of nsec() shows that the file model doesn't work in all cases ... the thing starts to look a bit overly complex to me. The fact that it fails due to the size of a static fd array is also a warning flag.
I think a better interface would be one in which you read two variables: /dev/nsecoffset /dev/nsecdivisor You could then apply these to the output of cycles(): nsec = (cycles()/divisor)-offset to get time. nsec gives you precision but dropping into a system call to read time tosses away any hope of accuracy you might achieve. Simply put, nsec() is not correctly named :-) ron