我正在考虑在 C/C++ 中为 linux 实现一种守护进程/服务,它将通过 shell(使用 linux-gpib 库)与特定的 gpib 设备进行通信。这个想法是,守护进程将扫描所有现有设备,并为每个设备创建一个文件/管道/dev/gpib#-*
(*
它们在指定 gpib 总线上的地址在哪里)。用途如 of /dev/com#
。然后我可以输入命令行:
echo "*IDN?" > /dev/gpib1-12
哪个会发送“*IDN?” 连接到 1 号机上的设备 12。到目前为止,一切顺利...
当我想从设备中检索数据时,问题就开始了。我希望它类比地工作,这样
cat /dev/gpib1-12
会写出设备要说的内容......但我不知道我发送到设备的哪个命令会使设备返回一个字符串(值)而哪个不会。所以我的选择是:
- 反复检查(while-loop)设备是否有任何要回复的内容,然后将其发送到相应的管道。
-或者- - 仅当客户端程序尝试从
/dev/gpib#-*
管道读取时才查询设备。这必须通过“信号”和“等待”来提供。
出于明显的原因(性能和/或延迟障碍),我不想实施解决方案1。我不知道如何做另一件事……我觉得,它必须可以在 ol'mighty linux 上实现,但是如何实现呢?我确实读过这个,我认为该功能的一些旋转select()
是正确的前进方向,但我不知道如何使用它来解决我的问题。我也偶然发现了这个,那个家伙解释了如何做类似的事情,但又如此不同(代码mosfet.c)。
问题是:如何通过信号、等待或中断从管道/FIFO/文件的另一端读取尝试立即检测并做出反应?
感谢您的回答。
PS:这里是早上七点半(是的,又是一个不眠之夜),所以请原谅我蹩脚的
英语……我正在询问(通过文件 I/O 访问单个设备)是否可以通过 linux-gpib 库,请告诉我。我确实阅读了 linux-gpib 的文档和 src,但没有发现任何帮助。所有 linux-gpib 库提供的都是与 C、Python 等的绑定。
PPS:是否有其他替代方法可以使用管道?