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