我试图从Linux板上的ttyHS4(控制)和ttyHS5(数据)安装选项调制解调器获取RSSI值。预期结果显示在控制台上,但fgets只捕获任何控制台输出数据。
if ((f=popen("echo -e \"AT+CSQ\r\n\">dev\ttyHS4","r"))==NULL){
perror("popen");
exit(1);
}
while (fgets(buff,sizeof(buff),f){
printf(":%s:\n",buff);
}
我在popen命令中测试了“echo \”TEST \“”,上面的代码能够打印出“:TEST:”字符串。使用ttyHS4输出,我只能在控制台上获得一些输出,但fgets + fprintf无法获得任何数据。
请告知我可能出现故障的地方。
答案 0 :(得分:1)
您正在调用popen()
来创建一个文件描述符,该文件描述符向您的主程序提供此命令的标准输出:
echo -e ... >/dev/ttyHS4
你做意识到这个命令什么都不发送给那个文件描述符,对吧? popen()
打开一个shell - 通常为/bin/sh
- 然后执行该命令。由于重定向到/dev/ttyHS4
,echo
命令不会将其标准输出发送到与其父shell相同的文件描述符,这导致没有任何内容写入f
- 即使这不是问题,echo
永远不会回读调制解调器对你的反应..
但为什么你甚至使用popen()
和echo
,而不只是在生成的文件上打开/dev/ttyHS4
读/写并使用read()
和write()
描述符直接?
答案 1 :(得分:0)
在路径中使用制表符很常见。你可能打算这样做:
popen("echo \"AT+CSQ\">/dev/ttyHS4","r")