直接上代码:
bool checkNet()
{
vector<string> v;
std::array<char, 128> buffer;
std::unique_ptr<FILE, decltype(&pclose)> pipe(popen("ping www.baidu.com -c 2 -w 2 ", "r"), pclose);
if (!pipe)
{
throw std::runtime_error("popen() failed!");
}
while (fgets(buffer.data(), buffer.size(), pipe.get()) != nullptr)
{
std::cout << "qqq: " << buffer.data() << endl;
v.push_back(buffer.data());
}
// 读取倒数第二行 2 packets transmitted, 2 received, 0% packet loss, time 1001ms
if (v.size() > 1)
{
string data = v[v.size() - 2];
int iPos = data.find("received,");
if (iPos != -1)
{
data = data.substr(iPos + 10, 3); // 截取字符串返回packet loss
int n = atoi(data.c_str());
if (n == 0)
return 1;
else
return 0;
}
}
else
{
return 0;
}
}
int main(int argc, char const *argv[])
{
if (checkNet())
{
printf("网络连接成功\n");
}
else
{
printf("网络连接失败\n");
}
while(1);
}