0

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

下面是运行的输出。

普通的:

test popen before
test fgets before
test fgets after

堵塞:

测试前打开

代码:

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");
    }
}
4

0 回答 0