我有一個函數,可以在一定的時間間隔內返回我的Wifi信號的強度。Popen導致程序凍結
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照顧呢?
謝謝!
sig只是一個指針。根據架構,它需要4或8個字節的內存。它沒有佔用足夠的空間。我敢打賭,fscanf正在返回並出錯。抓住返回值並檢查errno。 – Magn3s1um
如果子進程由於某種原因無法產生預期的輸出,那麼'while(fgetc(sig)!='=');'將永遠循環。 – Casey