linux - 在用户空间模拟文件描述符

标签 linux file-descriptor

我想在用户空间实现一个类似套接字的对象。有一个重要的要求是它应该是可轮询的(即它的状态应该可以通过 select 或 poll 调用进行查询)。

是否有平台中立的方法来实现这样的对象?

我知道在 Linux 上有 eventfd 可以满足需要,只是没有办法强制它既不发出 POLLIN 也不发出 POLLOUT 信号。

最佳答案

您可以使用socketpair() 创建一对连接的AF_UNIX 套接字。这比 pipeline() 更好,因为它允许双向通信。如果这还不足以满足您的需求,另一个选择(需要 root 来运行守护程序)是使用 as-yet-not-in-mainline-Linux CUSE修补程序以在用户空间中创 build 备驱动程序以执行您喜欢的任何操作。或者您可以直接连接到您的用户将使用的任何事件循环...

新的 Linux eventfd 还可以模拟 POLLIN/POLLOUT,尽管不能同时模拟两者 - 将其值设置为 0xfffffffffffffffe(对于 POLLIN 但不是 POLLOUT)、0 对于 POLLOUT 但不是 POLLIN,或者对于两者都设置为其他任何值。

除了这些选项之外,没有平台中立的方法可以做到这一点,不是。通常的模式是使用 FIFO 来唤醒事件循环,并在唤醒后使用其他 API 进行轮询。

关于linux - 在用户空间模拟文件描述符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/909189/

相关文章:

linux - 如果网络出现故障,套接字会发生什么

c - 具有自己的文件偏移量的重复文件描述符

ksh - 输出文件描述符重定向

linux - exec n<&m 与 exec n>&m —— 基于 Sobell 的 Linux 书

linux - 在不相关的进程之间共享 futex

linux - Putty、Xming、Gedit、Windows 8 和 Linux

Linux设备驱动程序

Android、VideoView、内部存储

android - osmdroid 的用户代理

c - 为什么这个程序的一部分不能在 Linux 中运行,但可以在 Windows 上运行?