在我的程序中,有一个线程调用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");
}
}