gpt4 book ai didi

c++ - 在 Linux 中检测从管道/fifo 的另一端读取的尝试

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:00:54 28 4
gpt4 key购买 nike

我正在考虑在 C/C++ 中为 linux 实现一种守护进程/服务,它将通过 shell(使用 linux-gpib 库)与特定的 gpib 设备通信。这个想法是守护进程将扫描所有现有设备并创建一个文件/管道 /dev/gpib#-* (其中 * 将是它们在指定 gpib 上的地址总线)为每个设备。用法如 /dev/com#。然后我可以在命令行中输入:

回显“*国际化域名?” >/dev/gpib1-12

哪个会发送“*IDN?”字符串到板 1 上的设备 12。到目前为止,这是小菜一碟......

当我想从设备中检索数据时,问题就出现了。我希望它以类推方式工作,以便

cat/dev/gpib1-12

会写出设备要说的内容...但是我不知道我发送给设备的哪个命令会使设备返回一个字符串(值)而哪个不会。所以我的选择是:

  1. 反复检查(while-loop)设备是否有任何要回复的内容,然后将其发送到相应的管道。
    -或-
  2. 仅当客户端程序试图从/dev/gpib#-* 管道读取时才查询设备。这必须通过“信号”和“等待”来提供。

出于显而易见的原因(性能和/或延迟障碍),我不想实现解决方案1。我不知道如何做另一件事......我觉得,它必须可以在 ol'mighty linux 上实现,但是怎么做呢?我读过this我认为函数 select() 的一些旋转是正确的前进方向,但我不知道如何使用它来解决我的问题。我也偶然发现了this ,这家伙解释了如何做一些相似但又如此不同的事情(代码 mosfet.c)。

问题是:我如何立即检测并响应通过信号、等待或中断从管道/FIFO/文件的另一端读取的尝试?

感谢您的回答。


PS:现在是早上七点半(又是一个不眠之夜),所以请原谅我蹩脚的英语...
PPS:哦,是的,如果有人已经知道这种用于 linux 的 gpib 守护进程,或者我想问的(通过文件 I/O 访问单个设备)是否可以通过 linux-gpib图书馆,请告诉我。我确实阅读了 linux-gpib 的文档和 src,但没有发现任何帮助。所有 linux-gpib 库提供的都是与 C、Python 等的绑定(bind)。
PPS:除了使用管道还有其他选择吗?

最佳答案

如果你的 gpib 设备只需要一个好的终端,你可以使用 python(或者更好的 ipython)。

linux-gpib 带有 python 包装器(代码看 here )。所以在你的 shell 中输入 python 打开 python在 python 解释器中,您可以像这样轻松地与设备通信

>>>import Gpib
>>>device = Gpib.Gpib(pad=2)

这将打开一个与主地址为 2 的 gpib 设备的连接。要与其通信,只需执行以下操作

>>>device.write('*IDN?')
>>>device.read()
'HEWLETT-PACKARD,33120A,0,8.0-5.0-1.0'

为了进一步简化它,使用 ipython 而不是普通的 python。这为您提供了制表符完成功能等等。

关于c++ - 在 Linux 中检测从管道/fifo 的另一端读取的尝试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20259889/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com