C ++– 对Windows命令使用system()

C ++– 对Windows命令使用system(),第1张

概述C ++ – 对Windows命令使用system()

我是C ++的新手,我读过并且听说使用系统调用是不好的做法。 那么如果你需要使用system()来运行一个像ipconfig或者netstat这样的windows命令呢。 它仍然是邪恶的还是被认为是system()的可接受的使用? 我正在编写一个程序来收集有关系统的各种信息,并且我多次使用system(),并将输出传递到文本文件中供审阅。

在客户端计算机上安装字体

两个进程如何不通过pipe()来相互交谈?

删除多个文件后出现“打开的文件太多”的错误

如果path太长,mciSendString将不会播放audio文件

HBITMAP从位

你所做的大部分调用都可以直接使用windows API调用。 理想情况下,您只需调用相应的windows API调用,而不是启动进程,写入文件,然后解析文件。

这就是说,在windows上, CreateProcess将启动一个进程,并提供比呼叫system更多的控制。 这包括使用STARTUPINFO为流程标准输出流提供您自己的HANDLE ,这意味着您可以直接从流程中读取而无需写入文件。

问题不是system的使用,而是错误频繁的情况下的滥用。

调用系统意味着调用命令解释器(CMD)给它一个字符串来解析。 如果该字符串是一个命令将被执行,如果它是一个程序将被调用,因为命令解释器的行为是这样的。

调用CreateProcess意味着让内核启动一个将执行给定程序的进程。 没有命令解释器调用。

现在这一点变成了“命令解释器在你的执行中是否有作用,还是只是一个被动的奴隶?

在第一种情况下(更为罕见的) system最有可能是真正的路要走。

在第二种情况下(更频繁的情况),在两者之间放置一个命令解释器,使得真正的执行依赖于系统在其周围进行的最终调整(例如,启动一个批处理而不是命令),在运行时您可能并不知道在您的用户的机器上。 这甚至可以转化为潜在的安全漏洞。)

系统最常见的用途是 – 但是system("pause")经常在程序终止后保持控制台打开。 这可能是一个快速和肮脏的解决方案,但这通常不是一个好的方法,原因有两个:

如果一个程序在另一个进程中执行,那么可以没有人等待按键返回:只要在已经打开的shell中启动程序,shell就会保持打开状态。

如果一个程序设计为交互式(所以有一个人提供输入),那么使用正常的I / O功能将会更合适。

总结

以上是内存溢出为你收集整理的C ++ – 对Windows命令使用system()全部内容,希望文章能够帮你解决C ++ – 对Windows命令使用system()所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://www.outofmemory.cn/langs/1277008.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-09
下一篇 2022-06-09

发表评论

登录后才能评论

评论列表(0条)

保存