C++:_popen 无限循环 (Windows)

C++: _popen infinite loop (Windows)

我正在尝试编写一个应用程序以使用 _popen 无限检查对服务器的 ping,但是当我 运行 应用程序一段时间后,函数 (_popen) 开始返回 NULL,直到我重新启动它。为什么会这样?我应该如何修复它?

FILE *fin = _popen("ping 104.160.131.1", "r");
        while (fin == NULL) {
            std::cout << "If this takes too long restart application";
            fin = _popen("ping 104.160.131.1", "r");
            system("cls");
        }

显示的代码会泄漏文件描述符,因为您没有相应的 _pclose() 调用,这最终会导致您描述的行为。

FILE *fin = _popen("ping 104.160.131.1", "r");
while (fin == nullptr) {
    std::cout << "If this takes too long restart application";
    fin = _popen("ping 104.160.131.1", "r");
    system("cls");
}
//...
_pclose(fin);