+-
在C中使用popen调用ping
我在CentOS linux的C代码中有以下代码.此代码在线程中每5秒调用一次.如果我禁用pclose(fp),代码工作正常,但我知道我应该这样做.当我启用它时,有人可以解释为什么它挂在pclose(fp)上吗?
非常感谢.

FILE* fp;
int status;
char path[255];

fp = popen("ping -c 3 -W 3 200.0.0.51", "r");
sleep(3); 
int i=0; 
while (i < 255) {
    path[i] = fgetc(fp); 
    i++;
}

char* str;
str = strstr(path, "100% packet loss");

if (str!=NULL) {
    //pclose(fp); // <--- hangs here if I enable
    OS_Reboot(); 
}
最佳答案
问题似乎是pclose()仅在从popen创建的进程终止时才返回,但ping将永远循环.

In any case, pclose() shall not return before the child process created by popen() has terminated

解决方案是自己分叉进程并为返回到进程的stdin和stdout创建管道.另一个stackoverflow成员显示here的可能实现.

点击查看更多相关文章

转载注明原文:在C中使用popen调用ping - 乐贴网