这些论点究竟在linux中意味着什么?

时间:2015-11-11 21:46:16

标签: c linux parameter-passing

我有一个用C编写的程序,我应该在linux上运行它的命令看起来像这样:

./program --something X Y

究竟是什么意思?我认为X Y将是argc[2] Xargc[3]将是Y的论点?

但是--something呢?

非常感谢!

3 个答案:

答案 0 :(得分:3)

C运行时不会区分任何参数,无论它们是否以--开头。所以你有,

argv[0] = "./program"
argv[1] = "--something"
argv[2] = "X"
argv[3] = "Y"
argv[4] = NULL

这是你的程序为这些值赋予意义。

答案 1 :(得分:0)

遵循命令本身的任何内容都将转到argv

argv[1]--somethingargv[2]Xargv[3]Y。遵循* unix约定,这意味着你的程序有一个名为“something”的参数,值为“X”,“Y”是程序应该应用的参数 - 但这完全取决于你的程序实现

答案 2 :(得分:0)

argcargv而言,这些论点与其他论点没有什么不同。

使它们与众不同的是,许多Linux工具(但不仅仅是)使用getopt来更容易理解这些选项。当您需要多个可能的选项(或者不记得它们的用途)时,这尤其有用。

您通常可以选择多种选择,包括和不使用参数。

惯例也是让--help打印出所有可用选项的摘要。

例如,在man的帮助下:

$ man --help
Usage: man [OPTION...] [SECTION] PAGE...

  -C, --config-file=FILE     use this user configuration file
  -d, --debug                emit debugging messages
  -D, --default              reset all options to their default values
      --warnings[=WARNINGS]  enable warnings from groff

在此特定示例中,您可以使用-d--debug打开调试功能。 getopt(或类似)用于将-d--debug解析为有意义的内容。 -C--config-file也是等价的,但期待一个论点。

在其他语言中有类似的等价物(例如Python's argparse或Java中的Apache Commons CLI)。