Linux 描述符类型

3

我该如何获取描述符类型?我正在使用epoll来监控许多描述符,例如套接字、定时器和信号。我看到可以使用fstat,但是模式只涉及套接字和管道的内容。fstat manpage。是否有一种特殊的函数来识别描述符?


2
哦,我明白了,你想要获取从 epoll 返回的描述符的类型(即套接字/文件等)。 - kirelagin
我正在使用epoll,其中我添加了signalfd、timerfd、tcp服务器套接字和tcp客户端套接字。当我使用epoll_wait时,我会得到一个准备好的描述符列表。但是我不知道这些描述符是套接字、timerfd还是signalfd。对于tcp套接字,如果它们是客户端或服务器(getsockopt),很容易找出来。问题在于fstat没有提到timerfd或signalfd。 - Kouros
请参考fstat手册中的示例。 - Kouros
1
看起来你无法避免在你仍然知道哪个描述符属于哪种类型的时候存储描述符的int值以及它们的类型,然后稍后可以与这个存储进行比较。 - alk
@alk 是的,我考虑过了。也许没有更好的方法了。谢谢 - Kouros
显示剩余2条评论
1个回答

1
我认为没有简单或统一的方法来完成你所要求的操作。命令lsof可以确定这些信息,因此您可能需要查看该代码以了解他们在做什么。
从我的经验来看,要确定描述符是否为套接字,可以使用getsockopt(2)。如果调用getsockopt失败并且errno == ENOTSOCK,则您的描述符不是套接字。同样,您可以使用isatty(3)来确定描述符是否属于串行端口或终端。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接