fcntl(fd, F_GETFD)
is the canonical cheapest way to check that fd
is a valid open file descriptor. If you need to batch-check a lot, using poll
with a zero timeout and the events
member set to 0 and checking for POLLNVAL
in revents
after it returns is more efficient.
With that said, the operation "check if a given resource handle is still valid" is almost always fundamentally incorrect. After a resource handle is freed (e.g. a fd is close
d), its value may be reassigned to the next such resource you allocate. If there are any remaining references that might be used, they will wrongly operate on the new resource rather than the old one. Thus, the real answer is probably: If you don't already know by the logic of your program, you have major fundamental logic errors that need to be fixed.
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…