3

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

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

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

./printfile file.txt 1000

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

现在关于这种情况如何:

./printfile file.txt 1000 --nolinebreaks

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

./printfile file.txt 1000 true

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

4

8 回答 8

11

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

于 2008-09-24T02:51:04.853 回答
4

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

看看 GNU 的getopt()/getopt_long()选项解析器可能值得您花时间。它支持使用诸如--number-of-line-breaks 47.

于 2008-09-24T03:16:49.567 回答
2

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

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

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

于 2008-09-24T02:50:18.553 回答
1

Pax 在这里有正确的想法。

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

于 2008-09-24T03:02:36.137 回答
1

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

于 2008-09-24T03:08:31.537 回答
0

关于上下文以及您正在尝试做什么的问题并不十分清楚 - 您的意思是从 C++ 程序中运行可执行文件?有几个标准 C 库函数,其名称如 execl()、execv()、execve() 等,它们将选项作为字符串或指向字符串数组的指针。还有 system() 它接受一个字符串,其中包含您在 bash 提示符下键入的任何内容、选项和所有内容。

于 2008-09-24T02:55:52.113 回答
0

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

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

于 2008-09-24T04:13:03.457 回答
-1

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

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

编辑:从您的编辑中,您不能只解析每个选项以查找与该选项关联的“可选”的特殊关键字吗?

于 2008-09-24T03:03:23.437 回答