具有命令行执行的C程序缺少输出

具有命令行执行的C程序缺少输出,c,command-line,C,Command Line,我正在尝试建立一个C程序,它将在不同的时间间隔采取WIFI质量和信号水平。我有命令行执行和解析等质量,但信号水平没有得到保存。我尝试了echo quality=45/70 Signal level=-75dbs,这个代码片段工作得很好,但不适用于真正的命令行代码。我不明白为什么它会对质量有效,但对信号强度无效?为代码质量道歉我才刚开始学习C #include <stdio.h> int main(void) { FILE *in; extern FILE *popen(); ch

我正在尝试建立一个C程序,它将在不同的时间间隔采取WIFI质量和信号水平。我有命令行执行和解析等质量,但信号水平没有得到保存。我尝试了
echo quality=45/70 Signal level=-75dbs
,这个代码片段工作得很好,但不适用于真正的命令行代码。我不明白为什么它会对质量有效,但对信号强度无效?为代码质量道歉我才刚开始学习C

#include <stdio.h>

int main(void) {

FILE *in;
extern FILE *popen();
char buff[512];
char str[60]={" "};
char ssid[40]={""};
char quality[6]={""};
char level[5]={""};
char temp[2];

if(!(in = popen("iwlist wlan0 scan | grep -e 'Signal level' ", "r"))){
    exit(1);
}


int turn=1;
while(fgets(buff, sizeof(buff), in)!=NULL){
    strcat(str, buff);

    int z;
    for(z=0;z<30;z++){

        if(str[z] == '='){
            printf("\n ::::: %s", str);
            z++;
            int limit;
            if(str[z]=='-'){
                int y;
                limit=z+4;
                for(y=z; y< limit; y++, z++){

                    sprintf(temp, "%c", str[y]);
                    strcat(level, temp);
                }
            }else{
                int x;
                limit=z+5;
                for(x=z; x<limit ; x++, z++){

                    sprintf(temp, "%c", str[x]);
                    strcat(quality, temp);
                }
                printf("\n ::::: %s", str);
            }

        }
    }
}   
printf("\n printing quality::::: %s", quality);
printf("\n printing signal level:::::: %s", level);
printf("\n ::::: %s", str);
pclose(in);  
}
#包括
内部主(空){
文件*in;
外部文件*popen();
字符buff[512];
char str[60]={''};
char ssid[40]={”“};
字符质量[6]={“};
字符级别[5]={“};
炭温[2];
如果(!(in=popen(“iwlist wlan0扫描| grep-e‘信号电平’,“r”)){
出口(1);
}
整圈=1;
while(fgets(buff,sizeof(buff),in)!=NULL){
strcat(str,buff);
intz;

对于(z=0;zyou可能需要确保
str
strcat(str,buff)中足够大
因为它一直附加到str,也许你是指strcpy?嗨,哗众取宠…我尝试了一下,但没有任何乐趣。str的大小是60,buff的大小是512。它甚至可能在循环的第一次迭代中崩溃。也许你可以从命令shell调用命令
iwlist…| grep-e…
并发布你得到的确切信息。复制值的方式nto
quality
level
太复杂了,但它们应该可以在Ingo Leonhardt中工作。我从命令shell中获得正确的输出。嗨,joop,512处的str和buff也不能工作。