【发布时间】:2013-09-03 15:45:25
【问题描述】:
我正在尝试读取 C 程序中的无线连接链路质量。
我愿意:
for(;;){
rf_line = popen("cat /proc/net/wireless | grep wlan0", "r");
fgets(line, 80, rf_line);
pclose(rf_line);
...
//more code
}
在带有 Wheezy 08/12 映像的 Raspberry Pi 上,它崩溃并出现 errno 32,管道损坏。
如果我从控制台调用cat /proc/net/wireless | grep wlan0,它可以正常工作。
另外,如果我尝试使用 gdb 进行调试,则不会发生错误。 在我的装有 Linux Mint 14 的笔记本电脑上,它永远不会发生。
我试图通过拨打system(...) 来防止这种情况。即使使用 bash -c ... 打开一个新的 bash。
我也试过,不写到标准输出和文件,没有运气。
编辑:
与rf_line = popen("/bin/grep wlan0 /proc/net/wireless", "r");
将行的大小增加到 200 没有任何效果。
我有同样的结果,errno 32。
编辑:
与 rf_line = fopen("/proc/net/wireless","r");
我有同样的结果,errno 32。
然而,这导致了建议,即 popen 无法正常工作,因为它是唯一剩下的管道。
Fopen / popen 被频繁调用,这可能是问题吗?
有谁知道我下一步该怎么做?
问候, CK
【问题讨论】:
-
你的程序走了多远?你有
line,你打电话给pclose()了吗? -
当我在 gdb 中执行此操作时,每个断点都会被命中,并且我得到了正确的行。如果我清除断点并继续,管道会在 popen 结束之前中断。
-
@ChristophKuhr 请检查我的更新。
-
@konsolebox 没有效果。
-
Popen 被频繁调用,这可能是个问题吗?
标签: c linux bash shell raspberry-pi