fscanf之后pclose时的分段错误

问题描述 投票:1回答:1

我尝试获取丢失的数据包编号(从树莓派上的ping命令),该编号用于路由器上的SIM卡交换。我尝试使用底部的代码(减少到引起错误的部分)来执行此操作,但是当我尝试释放(pclose)缓冲区时,我遇到了段错误。我已经尝试过valgrind并且得到了:

无效读取的4号在0x490FBE0:fclose @@ GLIBC_2.4(iofclose.c:53)地址0x382e3820未堆栈,未分配或(最近)未释放进程以信号11(SIGSEGV)的默认操作终止访问不在地址0x382E3820的映射区域内]

我想我正在滥用fscanf,但我不知道如何(我得到了printf结果,它是正确的-4)。

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include "params.h"
#include <pthread.h> 

void *pingOnly(void *vargp){

    FILE *cmd;
    int packetsReceived=0;
    while(1){
        cmd = popen("sudo ping 8.8.8.8 -c 4 -q","r");
        fscanf(cmd, "%[^,], %d", &packetsReceived);
        printf("%d\n", packetsReceived);
        pclose(cmd);        
        if(packetsReceived<3){
            //testSpeed();
        }
        sleep(300);
    }
    return NULL;    
}

int main( int argc, char *argv[] )
{ 
    pthread_t thread_id[3]; 
    pthread_create(&thread_id[2], NULL, pingOnly, NULL);
    pthread_join(thread_id[2], NULL);
    return 0;
}

我尝试获取丢失的数据包编号(从树莓派上的ping命令),该编号用于路由器上的SIM卡交换。我尝试使用底部的代码(减少到引起错误的部分)来完成此操作,但是当我尝试...

segmentation-fault scanf pclose
1个回答
0
投票

问题是这条线

© www.soinside.com 2019 - 2024. All rights reserved.