나는 특정 간격으로 내 Wi-Fi 신호의 강도를 반환하는 기능이 있습니다.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);
내가으로 실행하고 문제는 내 프로그램은 간격이 와이파이 신호를 얻기위한 시간에 따라 일정 기간 후에 정지 점이다. 간격이 짧을수록 프로그램이 더 빨리 멈 춥니 다. 지금 내가 틀렸다면 나를 교정해라. 그러나 이것은 기억에 문제가있는 것처럼 보인다. 시간이 경과함에 따라 일부 항목이 스택에서 제대로 제거되지 않거나 할당이 취소되지 않아 메모리가 가득 차고 결국 프로그램을 계속 실행할 수없는 수준에 도달하게됩니다. 그래서 내 질문은 내가 떨어져있는 파일을 무료로 다른 진술을 포함해야합니까 아니면 pclose 돌봐 줘야합니까 떨어져 무엇입니까?
감사합니다.
sig는 포인터 일뿐입니다. 아키텍처에 따라 4 또는 8 바이트의 메모리가 필요합니다. 거의 충분한 공간을 차지하지 않습니다. 내 생각에 fscanf가 돌아오고 오류가 발생했습니다. 반환 값을 잡고 errno를 확인하십시오. – Magn3s1um
서브 프로세스가 어떤 이유로 든 예상 출력을 생성하지 못하면 'while (fgetc (sig)! ='= ');'가 영원히 반복됩니다. – Casey