C ++将选项传递给可执行文件

时间:2020-03-06 14:38:22  来源:igfitidea点击:

如何将选项传递给可执行文件?有没有比将选项设为布尔参数更简单的方法?

编辑:最后两个答案建议使用参数。我知道我可以像这样编写可行的解决方案,但我宁愿选择它们。

EDIT2:根据澄清要求,我将使用以下简单示例:
处理参数非常容易,因为它们会自动解析为数组。

./printfile file.txt 1000

如果我想知道用户想要打印的文件名,可以通过argv [1]访问它。

现在介绍一下这种情况:

./printfile file.txt 1000 --nolinebreaks

用户希望在没有换行符的情况下打印文件。这不是程序能够运行所必需的(因为文件名和要打印的行数是),但是用户可以选择使用if if if。现在,我可以使用:

./printfile file.txt 1000 true

使用提示将通知用户第三个参数用于确定是否使用换行符打印文件。但是,这似乎很笨拙。

解决方案

我使用两种方法来传递信息:

1 /使用命令行参数,使用诸如getargs之类的特定库更易于处理。

2 /作为环境变量,使用getenv。

命令行参数是解决之道。我们可能要考虑使用Boost.ProgramOptions来简化此任务。

关于上下文的问题并不清楚,只是我们要做什么意味着要从C ++程序中运行可执行文件?有几种名称为execl(),execv(),execve()等标准C库函数,这些函数将这些选项用作字符串或者指向字符串数组的指针。还有system(),它接受一个字符串,其中包含我们在bash提示符下键入的所有内容,选项以及所有内容。

Pax在这里有正确的想法。

如果我们需要更彻底的双向通信,请使用管道打开该进程,然后将内容发送到stdout上的stdin / listen。

我们可以将选项放入.ini文件中,并使用GetPrivateProfileXXX API创建一个类,该类可以从.ini中读取所需的程序选项类型。

我们还可以为应用程序创建一个交互式外壳程序,以实时更改某些设置。

编辑:
从编辑中,我们能否仅解析每个选项以查找与该选项关联的"可选"特殊关键字?

我们还可以使用Window的PostMessage()函数。如果要发送选项的可执行文件已经在运行,这非常方便。如果我们对此技术感兴趣,可以发布一些示例代码。

我们似乎认为,以"--"开头的"选项"与没有的"选项"之间存在一些根本区别。唯一的区别在于我们如何解析它们。

可能值得我们花时间来看一下GNU的getopt()/getopt_long()选项解析器。它支持通过参数传递参数,例如--line-of-line-breaks 47

我喜欢popt库。它是C语言,但在C ++中也可以正常工作。

它似乎不是跨平台的。我发现当我不得不为某些Linux软件的Windows端口破解自己的API兼容版本时,发现了这一点。