私のプログラムには、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");
}
}