0

我有一个函数可以在某个时间间隔内返回我的 Wifi 信号强度。

FILE *sig;
int sigstr=0, max;
sig = popen("iwconfig wlan0 | awk '/Link/ {print $2}'","r");
while(fgetc(sig)!='=');
fscanf(sig,"%d/%d", &sigstr, &max);
pclose(sig);
return(((sigstr*4)+(max/2))/max);

我遇到的问题是我的程序在一段时间后冻结,具体取决于获取 Wifi 信号的时间间隔。间隔越短,我的程序冻结得越快。如果我错了,现在纠正我,但这似乎是记忆问题。随着时间的推移,一些项目没有从堆栈中正确删除或释放,导致内存被填满并最终达到程序无法继续运行的水平。所以我的问题是除了我上面的内容之外,我还需要包含另一个声明来释放文件 sig 还是 pclose 会处理这个问题?

谢谢!

4

1 回答 1

1

这是因为 fscanf 可以阻塞。使用 fcntl 将从 popen 获得的文件描述符设置为非阻塞。

于 2013-07-10T17:16:54.080 回答