C强制getopt在第一个非参数处停止

时间:2014-11-23 13:45:02

标签: c getopt

我正在编写一个程序代理,它将stdout等重定向到文件中,使用:proxy [-i infile] [-o outfile] [-e errfile] cmd [options]。

所以我想强制getopt在到达cmd时停止,因为它不应该解析选项。

我读到了环境变量POSIXLY_CORRECT,但我想让它独立于此。

所以我的问题是如何达到目的。

到目前为止我的代码的一部分

while ((opt = getopt (argc, argv, "i:o:e:")) != -1)
  switch (opt)
  {
    case 'i':
      i = 1;
      strcpy(input, optarg);
      break;
    case 'o':
      o = 1;
      strcpy(output, optarg);
      break;
    case 'e':
      e = 1;
      strcpy(error, optarg);
      break;
    default:
      fprintf(stderr, "usage: proxy [-i infile] [-o outfile] [-e errfile] <cmd> [options]\n");
      return -1;
  }

当给出cmd选项时,这将一直进入默认情况:(

1 个答案:

答案 0 :(得分:1)

你被GNU getopt在进入之前重新排序参数的可疑行为所困扰。如您所知,一种解决方案是在第一次调用POSIXLY_CORRECT之前设置环境变量getopt。您还可以通过将+作为getopt字符串的第一个字符传递来禁用此行为:

opt = getopt(argc, argv, "+i:o:e:")