用C ++压缩系统(“ping”)输出

时间:2010-10-31 06:40:25

标签: c++ windows ping suppress

我写了一个简单的程序,ping三个站点,然后对它们是否可访问做出反应。

我的问题是:我可以抑制系统(“ping”)的输出吗?我用C ++编写了代码,因为我知道这种语言最好。目前,代码打开运行系统命令的ping.exe。如果我可以阻止输出显示,它仍然是理想的ping。

我最终将在Windows服务中转换此程序,这就是为什么我要禁止命令行控制台窗口以及抑制ping输出。感谢。

6 个答案:

答案 0 :(得分:17)

尝试执行system("ping host > nul")nul是Windows等效的UNIX /dev/null)。

答案 1 :(得分:6)

通常情况下,如果你打算打电话给另一个程序,但又不想让它像std::system那样行事,那么你需要一个特定于平台的功能,如fork() / {{3在UNIX上或在Windows上的exec()。这些函数可让您控制其他程序的运行方式,例如,它不显示输出或不创建控制台窗口等。

答案 2 :(得分:3)

您可以使用如下的系统命令来禁止ping命令的输出。

system("ping 100.100.100.100 > response.dat");

上面的命令ping IP地址100.100.100.100并将输出定向到名为response.dat的文件。在response.dat中,您可以看到ping命令的响应。

答案 3 :(得分:2)

做系统(“ping site.com> nul 2> nul”);并检查shell返回的值。 如果ping成功,shell将返回0,否则返回1。 我会更详细,但Vis Studio正在重新安装。 :)

还有一种方法可以使用Win API隐藏控制台窗口以执行命令,但是...... 我不记得细节了。

编辑: 我还在等MSVS安装过程,所以...... :) 对于dwCreationFlags参数,使用带有DETACHED_PROCESS标志的CreateProcess来隐藏控制台窗口。

调用create process后,您必须在进程句柄上使用WaitForSingleObject来等待ping完成。 CreateProcess的最后一个参数应该有一个指向包含进程句柄的进程信息的指针。 (假设CreateProcess成功)您必须等待命令完成。一旦完成,您可以使用进程句柄来获取返回值,尽管我现在也不得不告诉您如何执行此操作。

答案 4 :(得分:2)

当您转到Windows并致电CreateProcess()时,请务必设置:

    lpStartupInfo->wShowWindow = SW_HIDE;

这将确保隐藏新进程创建的任何窗口。

使用DETACHED_PROCESS标志将阻止新进程继承应用程序的控制台,但这不会阻止新进程创建新控制台。不确定ping会做什么,但最好通过使用SW_HIDE消除所有疑问。

答案 5 :(得分:2)

您也可以使用这种方式,这将返回文件中的输出,并且不显示控制台窗口并冻结主要应用程序,这是非常有用的。 首先,您需要使用;

包含Windows标头
#include <Windows.h>

然后发送ping命令并将输出写入这样的文件中;

WinExec("ping google.com > file.dat", SW_HIDE); 

这将向google.com发送ping命令,并将输出写入当前正在运行的程序目录中的文件'file.dat'。因此,您可以将file.dat更改为您想要的任何文件或文件路径,当然您可以更改ping命令。 &gt; character表示命令的输出需要在其后面的文件路径中写入。 如果要在运行ping命令时显示控制台窗口并冻结应用程序,则需要使用以下代码行而不是WindExec()代码;

system("ping google.com > file.dat");