Arm平台,为什么线程在popen函数中被阻塞?

时间:2013-07-22 03:56:57

标签: linux ping popen

在我的程序中,有一个线程调用popen函数来执行ping命令。让它运行几天后,有时线程将在popen中阻止。我找到了一些关于popen的信息,但无法得到结果。

以下是跑步的输出。

正常:

  

测试popen之前   在测试之前测试fgets   在

之后测试fgets

块:

  

之前测试popen

代码:

int ping_fun(char *p_ip_addr)
{
    FILE *ptr = NULL;
    char buff[512];
    char ps[128];
    int ret_value = 0;


    memset(buff, 0, sizeof(buff));
    memset(ps, 0, sizeof(ps));

    sprintf(ps,"ping -c 5 %s 2>&1 | grep -c '64 bytes from'", p_ip_addr);

    printf("test popen before\n");
    ptr = popen(ps, "r");

    if (NULL != ptr)
    {
        printf("test fgets before\n");
        fgets(buff, 512, ptr);
        printf("test fgets after\n");
        ret_value = atoi(buff);
        if (ret_value > 0)  //ping success
        {
            //do something .....
        }
        pclose(ptr);
    }
    else
    {
        printf("test popen fail\n");
    }
}

0 个答案:

没有答案