【问题标题】:Can Select() be used to detect and identify multiple stream inputSelect() 可以用来检测和识别多流输入吗
【发布时间】:2015-04-30 06:50:48
【问题描述】:

我刚刚遇到了用于 linux(或者是 Unix?)操作系统的 select() 函数。它看起来可以实现我需要做的事情。

我有一个 Linux 进程(在 Debian 上),它在 3 个其他进程之间具有 IPC(进程间通信)。其中 2 个是串行端口流,另一个是命名管道。

我的进程需要从每个流中读取数据并做出相应的反应(它是这 3 个进程之间的代理)。每个进程传入的数据没有顺序(一个可能会说话,然后另一个会沉默一段时间)。

所以我正在考虑有一个主循环,它只使用select() 来监听所有流(从不超时)。这样,当/如果流写入我的进程时,select 可以通知我,哪个流正在说话,然后我可以做出相应的反应。

这是 select 的工作原理吗?这种设计是否可行,您将如何处理它们的行为是动态且不可预测的 3 个流(就它们何时将数据写入流而言)?

【问题讨论】:

  • 是的,这正是select() 旨在解决的问题类型。它是多进程/线程和非阻塞 I/O 的一种不那么混乱(如果源数量很大,效率更高)的替代方案。

标签: c unix io serial-port


【解决方案1】:

是的,这正是 select 的设计目的:多路复用多个输入流并检测哪些数据流可供读取。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-07-10
    • 2011-12-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多