【发布时间】:2016-09-01 16:51:44
【问题描述】:
所以我通过使用 echo 发送和 cat 接收来与设备通信。这是我的代码的 sn-p:
fp = popen("echo "xyz" > /dev/ttyACM0 | cat - /dev/ttyACM0", "r");
while (fgets(ret_val, sizeof(ret_val)-1, fp) != NULL)
{
if (strcmp(ret_val, "response") == 0)
{
close(fp);
return ret_val;
}
}
好的,问题是,cat 似乎保持打开状态,因为当我在循环中运行此代码时,它第一次工作,然后在我调用 popen 的地方挂起。我假设猫是罪魁祸首是正确的吗?
有没有办法在我运行命令后立即终止 cat,所以我只是从我的设备获得响应?谢谢!
【问题讨论】:
-
你为什么使用管道?
echo的输出会发送到设备,因此不会将任何内容写入管道。 -
cat一直读到 EOF。如果设备在响应后没有发送 EOF,它应该如何知道它何时读取了整个响应? -
你为什么首先使用外部命令呢?只需在 C 程序中打开
/dev/ttyACM0。 -
就像@Barmar 所说,绝对没有理由使用
popen来写入/读取串行端口。您可以使用fopen、fputs和fgets。如果您需要更改串口的波特率或其他属性,请参见tcgetattr手册页。 -
其他小问题:1)
-1在sizeof(ret_val)-1中不需要。 2)怀疑你想要"response\n"而不是"response"。