2

有什么方法可以在 Windows 和 Linux 之间以可移植的方式从 C++ 程序获取电池的状态(充电/放电/当前充电/容量/等...)。我正在做一个供我自己使用的小程序,需要一些帮助。请在我的博客上查看程序的描述:


JB期刊

另外,有什么方法可以实际查看计算机当前是否连接到互联网。我目前正在通过请求 www.google.com 并查看是否收到“503 错误”作为回报来执行此操作。有更好的方法吗?我正在将 libCurl 用于我程序的 web 界面部分,但想知道是否有更好的选择......

4

4 回答 4

5
  1. 在 windows 和 linux 之间没有可移植的方法来获取电池状态。您必须查询完全不同的 API。您必须查看是否有人为此编写了包装器,但很可能您需要自己做。(也许您在问是否有任何包装器或库?)

  2. 有很多方法可以查看计算机是否连接到互联网,但它们基本上都归结为 ping 可能启动的主机(如谷歌)。我使用 ping 而不是 http 连接。有各种 C 库可用于执行您自己的 ping 操作(无需调用程序。)

于 2009-07-23T20:05:37.927 回答
4

关于您关于以编程方式确定您是否连接到互联网的第二个问题。在 google.com 请求中查找 503 并非万无一失。许多 wifi 网络会重定向流量或以其他方式提供不正确的 dns 名称,以防止您在未经他们授权的情况下连接到互联网。

例如,如果您不支付 comcast 账单,comcast 会重写所有 dns 响应以将您指向一个 IP 地址,告诉您支付您的 comcast 账单。从 http 层的角度来看,没有发生错误,您已经成功完成了对 google.com 的 http 请求。不幸的是,页面的内容不同。

于 2009-07-23T20:08:53.333 回答
2

正如您可能从各种答案中推断出的那样,“连接到互联网”的问题格式不正确。您无法在计算机内部做任何事情来确定它连接到哪种网络。您可以拥有有效的 IP,但位于专用网络上。ICMP ping 可能会被防火墙过滤,但 HTTP 不会。到任意主机的 HTTP 可能会动态路由到本地“立即付款”帐户管理应用程序。故障模式的列表不胜枚举。如果您确实需要知道是否可以访问 Internet 上的给定服务,则需要尝试连接到该服务。

我无法谈论 Windows 中的电源管理问题,但在 linux 中读取电池状态就像打开 /proc/acpi/battery 下的文件一样简单(可能有几个电池目录,每个目录都包含“状态”和“ info" 文件,带有纯文本、人类可读的字段。

于 2009-07-23T20:23:28.797 回答
-3

要测试互联网连接,请检查您的 IP 地址。如果你在 linux 中有 0.0.0.0,或者在 windows 中有 169.254.xy,那么没有

ifconfig (linux)
ipconfig (windows)
于 2009-07-23T20:05:56.367 回答