C - FGETS 无法捕获 TTY 设备的输出

  • 本文关键字:TTY 输出 FGETS c pipe fgets
  • 更新时间 :
  • 英文 :


我正在尝试从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/ttyHS4echo命令不会将其标准输出发送到与其父shell相同的文件描述符,这会导致没有写入f- 即使这不是问题,echo也不会读回调制解调器响应给你。

但是,为什么您甚至使用popen()echo,而不是仅打开/dev/ttyHS4读/写并直接对生成的文件描述符使用read()write()

在路径中使用制表符是非常不寻常的。 您可能打算执行以下操作:

popen("echo "AT+CSQ">/dev/ttyHS4","r")

相关内容

  • 没有找到相关文章

最新更新