2014-11-23 42 views
2

我正在编写一个程序代理,它将stdout等重定向到文件中,其用法如下:proxy [-i infile] [-o outfile] [-e errfile] cmd [options] 。C强制getopt先停止参数

所以我想强制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

您正受到GNU的getopt的可疑行为咬伤在进入之前重新排序参数如您发现的,一种解决方案是在第一次调用getopt之前设置环境变量POSIXLY_CORRECT您还可以通过传递+作为getopt字符串的第一个字符来禁用此行为:

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

很好,这个小“+”解决了我所有的问题:) 非常感谢! – sch0rschi 2014-11-23 14:32:25