+-

我在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 - 乐贴网