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

Sam*_*uel 6 c++ windows ping suppress

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

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

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

zvr*_*rba 18

尝试做system("ping host > nul")(nul相当于UNIX的Windows /dev/null).

  • 不需要结肠,"nul"就足够了. (4认同)
  • @ Samuel,@ zvrba:我可以把一个名为`ping.exe`的恶意可执行文件放到你的程序中.您几乎不应该使用`system()`:http://www.cplusplus.com/forum/articles/11153/如果您正在制作Windows服务,那么情况至少要差两倍. (3认同)
  • 如果我能把你标记为答案......但遗憾的是我没有问过这个问题. (2认同)
  • @zvrba:即使他的可执行文件具有只执行权限(即你不能破坏可执行文件),但如果程序的当前目录是每个人都有写访问权限的目录(通常就是这种情况),那么你不需要一个受损系统来用恶意程序替换`ping.exe`. (2认同)
  • @zvrba:这是任何共享系统中的常见场景.如果您的任何低权限用户可以写入该目录,他们可以获得您的程序权限; 换句话说,如果你正在使用system()调用,那么你正在将程序的特权泄露给系统中的每个人.除非你完全信任你的所有用户(在共享系统中不是**,除非你是妄想),否则使用system()的程序会带来安全隐患. (2认同)

Max*_*ert 6

一般来说,如果你要调用其他程序,但不希望它像std::system,你会需要像一个特定于平台的功能fork()/ exec()UNIX或CreateProcess()Windows上.这些函数可让您控制其他程序的运行方式,例如,它不显示输出或不创建控制台窗口等.