Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 将多个文件描述符分组为一个“;虚拟的;用于通过API导出FD的文件描述符_Linux_Unix_Event Handling_File Descriptor_Mainloop - Fatal编程技术网

Linux 将多个文件描述符分组为一个“;虚拟的;用于通过API导出FD的文件描述符

Linux 将多个文件描述符分组为一个“;虚拟的;用于通过API导出FD的文件描述符,linux,unix,event-handling,file-descriptor,mainloop,Linux,Unix,Event Handling,File Descriptor,Mainloop,如果子系统具有事件处理功能,那么在Unix/Linux世界中,通常会向该子系统添加API调用,以允许公开文件描述符,从而可以将所述事件处理集成到使用类似poll()或select()的现有主循环中。例如,在Wayland中,有wl_display_get_fd()。如果该FD显示活动,则可以调用wl_display_read_events()和friends 如果该子系统内部只有一个FD,那么这种方法的效果很小。但如果有多个FD需要关注事件,该怎么办 我只看到两种解决方案: 暴露所有FD。但是,

如果子系统具有事件处理功能,那么在Unix/Linux世界中,通常会向该子系统添加API调用,以允许公开文件描述符,从而可以将所述事件处理集成到使用类似poll()或select()的现有主循环中。例如,在Wayland中,有wl_display_get_fd()。如果该FD显示活动,则可以调用wl_display_read_events()和friends

如果该子系统内部只有一个FD,那么这种方法的效果很小。但如果有多个FD需要关注事件,该怎么办

我只看到两种解决方案:

  • 暴露所有FD。但是,我不知道有哪种API可以做到这一点
  • 公开某种“虚拟”FD,该FD以某种方式耦合到内部“真实”FD。一旦实际FD接收到数据并标记为可读,则该虚拟FD也是可读的。一旦一个真正的FD可以写入,那么虚拟FD就会自动标记为可写等
  • #对我来说2听起来更干净。有可能吗?还是有更好的方法来解决这个问题