【发布时间】: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