fgets无法捕获tty设备的输出

时间:2012-12-30 08:11:02

标签: c pipe fgets

我试图从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无法获得任何数据。

请告知我可能出现故障的地方。

2 个答案:

答案 0 :(得分:1)

您正在调用popen()来创建一个文件描述符,该文件描述符向您的主程序提供此命令的标准输出:

echo -e ... >/dev/ttyHS4

意识到这个命令什么都不发送给那个文件描述符,对吧? popen()打开一个shell - 通常为/bin/sh - 然后执行该命令。由于重定向到/dev/ttyHS4echo命令不会将其标准输出发送到与其父shell相同的文件描述符,这导致没有任何内容写入f - 即使这不是问题,echo永远不会回读调制解调器对你的反应..

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

答案 1 :(得分:0)

在路径中使用制表符很常见。你可能打算这样做:

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