Posix与回调的串行连接

时间:2011-03-27 21:04:32

标签: linux macos serial-port posix

我正在尝试使用来自

的代码与arduino进行通信

http://todbot.com/blog/2006/12/06/arduino-serial-c-code-to-talk-to-arduino/

使用termios打开并以非阻塞方式与arduino交谈,工作正常。我想知道的是当使用rxtx在Java上我可以注册一个回调函数,当线路上有数据时调用该函数,这样我就不必手动检查了。我用Google搜索但无法找到有关如何注册回调函数的任何信息?

我在Linux / OS X上,我试图避免启动新线程只是为了观察/读取该行的数据。

2 个答案:

答案 0 :(得分:1)

Posix本身没有定义一种方法来分配串行数据到达时要调用的回调函数。如果您不想使用单独的线程,执行此类处理的标准方法是使用select库函数。这允许您编程定义程序感兴趣的一组文件描述符,然后进入休眠状态。如果您声明对其中一个文件描述符感兴趣(例如新数据可供读取),则Select将自动唤醒您的进程。这避免了必须忙于等待并轮询多个描述符以进行活动。

另一种选择是使用像libevent这样的库,它位于Posix层之上并提供回调基础设施。 http://monkey.org/~provos/libevent/

答案 1 :(得分:1)

使用串行端口时,

Boost.Asio可以提供回调功能。它在Linux和Mac OS X上运行。