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