0

私のプログラムには、popen関数を呼び出してpingコマンドを実行するスレッドがあります。数日間実行した後、スレッドがブロックされることがありますpopen。に関する情報が見つかりましpopenたが、結果を取得できません。

以下は、実行の出力です。

普通:

テスト popen の前
テスト fgets 前
テスト fgets 後

ブロック:

前に開くテスト

コード:

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