2013-11-02 38 views
1

我想使該程序後忽略完成 「execvp(的argv [1],argv的+ 1);」如果第一個參數未定義,但getopt解析所有以「 - 」開頭的參數。如何在第一個未定義的參數後忽略所有參數?這可能使用getopt?目前,我有一些代碼:Linux下C getopt的所述第一未聲明的參數

#include <unistd.h> 
#include <stdio.h> 
#include <stdlib.h> 
#include <getopt.h> 
#include <string.h> 
void print_usage() { 
    printf("Usage: here print usage\n"); 
} 

int main(int argc, char *argv[]) { 
    int option = 0; 
char user[32]={0}, command[50]={0}; 
while ((option = getopt(argc, argv,"c:u:h")) != -1) { 
    switch (option) { 
     case 'c' : strcpy(command,optarg); 
      break; 
     case 'u' : strcpy(user,optarg); 
      break; 
     case 'h' : print_usage(); 
        exit(EXIT_SUCCESS); 
      break; 
     default: 
      print_usage(); 
      exit(EXIT_SUCCESS); 
    } 
} 

if(strlen(user)!=0) { 
    if (strlen(command)!=0) 
     printf("execute %s for %s\n",command,user); 
    else 
     printf("please specify command\n"); 
} 
else { 
    if (strlen(command)!=0) 
     printf("please specify user\n"); 
    else if (argc > 2) 
     printf("execute %s for everyone\n",argv[1]); 

} 

return 0; 

}

當你執行,我得到:

./thisprogram ls -l 
./thusprogram: invalid option -- 'l' 

我想作這樣的;

./thisprogram ls -l/
razem 52 
lrwxrwxrwx 1 root root  7 05-31 20:40 bin -> usr/bin 
drwxr-xr-x 5 root root 4096 10-21 22:44 boot 
drwxr-xr-x 19 root root 3160 11-02 17:10 dev 

等等......但我不知道。 問候K.

回答

4

當你遇到一個未知的說法只是停止解析。

int done = 0; 
while (!done && (option = getopt(argc, argv,"c:u:h")) != -1) { 
    switch (option) { 
    ... 
    default: 
     done = 1; 
     break; 
    } 
} 

(或者如果你願意,使用case '?':代替default:情況下,作爲回報的getopt '?' 當遇到未知參數)