我有一个函数可以在一定的时间间隔内返回我的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处理它?</ p>
谢谢!
答案 0 :(得分:1)
因为fscanf可以阻止。使用fcntl将从popen获取的文件描述符设置为非阻塞。