我发现,有各种各样的文件描述符——几乎每件事情都是围绕着文件描述符抽象化的:常规文件、套接字、信号和计时器(例如)。所有文件描述符只是整数。
给定一个文件描述符,是否可以知道它是什么类型?例如,拥有像 getFdType(fd) 这样的系统调用会很好。
如果 epoll_wait 由于多个文件描述符准备就绪而被唤醒,则每个文件描述符的处理将基于其类型。这就是我需要该类型的原因。
当然,我可以自己单独维护此信息,但使用系统支持会更加方便。
此外,不管类型如何,所有文件描述符是否都是连续的?也就是说,如果你打开一个常规数据文件,然后创建一个计时器文件描述符,再创建一个信号文件描述符,它们是否都保证按顺序编号?
getFdType
这样的东西,但传统上有fstat
来区分类似文件的类型,并尝试使用fd特定调用,例如getsockopt
或timerfd_gettime
来区分它们,作为最后的手段,可以使用/proc/1234/fd/42
上的readlink
获取描述性字符串,例如anon_inode:[timerfd]
。 - that other guy