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

时间:2008-09-24 02:47:24

标签: c++ arguments

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

编辑:最后两个答案建议使用参数。我知道我可以编写一个可行的解决方案,但我宁愿让它们成为选项。

EDIT2:根据要求澄清,我将使用这个简单的例子: 处理参数相当容易,因为它们会自动解析为数组。

./printfile file.txt 1000

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

现在谈谈这种情况:

./printfile file.txt 1000 --nolinebreaks

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

./printfile file.txt 1000 true

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

8 个答案:

答案 0 :(得分:11)

命令行参数是要走的路。您可能需要考虑使用Boost.ProgramOptions来简化此任务。

答案 1 :(得分:4)

您似乎认为以“--”开头的“选项”和没有“getopt()”的“参数”之间存在一些根本区别。唯一的区别在于你如何解析它们。

看看GNU的getopt_long() / --number-of-line-breaks 47选项解析器可能值得您花些时间。它支持使用{{1}}等选项传递参数。

答案 2 :(得分:2)

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

1 /使用命令行参数,使用特定库(如getargs)更容易处理。

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

答案 3 :(得分:1)

Pax在这里有正确的想法。

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

答案 4 :(得分:1)

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

答案 5 :(得分:0)

关于上下文以及您正在尝试做什么,问题并不是非常明确 - 您是指在C ++程序中运行可执行文件?有几个标准的C库函数,其名称类似于execl(),execv(),execve(),...将选项作为字符串或指向字符串数组的指针。还有system(),其中包含一个字符串,其中包含您在bash提示符下输入的内容,选项和所有内容。

答案 6 :(得分:0)

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

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

答案 7 :(得分:-1)

您可以将选项放在.ini文件中,并使用GetPrivateProfileXXX API's创建一个类,该类可以从.ini中读取您要查找的程序选项类型。

您还可以为应用创建交互式外壳,以实时更改某些设置。

编辑: 从你的编辑中,你不能只解析每个选项,寻找与该选项相关的“可选”特殊关键词吗?