2013-05-14 101 views
1

如何在包管理器中處理多個命令行參數?我正在寫一個軟件包管理器,現在接受要安裝的軟件包讓我非常頭疼。例如,用戶想要安裝軟件包x,y和z。現在我的代碼會向一個函數發送3個不同的請求。我想一次性獲得所有包名稱。例如,用戶想要安裝軟件包x,y和z,它將被處理,我的代碼會向一個函數發送一個請求,聲明它需要x,y和z,函數將立即開始工作。處理C命令行參數

這裏是我當前的實現......

case 'S': 
    switch (argv[1][2]) { 
     case 'u': 
      id = 1; 
      alfred("system", "update", "", id); 
      break; 

     case 'r': 
      id = 1; 
      alfred("system", "reload", "", id); 
      break; 

     case 'i': 
      if (argc - 2 != 0) { 
       // Loop until packages are complete. 
       packages = 2; // Starting point of packages = argv[2][0] 
       srand(time(NULL)); // Seed for random number 
       id = rand(); // Generate random number for id 
       argc = argc - 2 + 1; // argc minus the number of packages and plus 1 
       /* This is a very inefficent loop! */ 
       /* Must get all targets and feed it to alfred */ 
       while (packages <= argc) { 
        alfred("system", "install", &argv[packages][0], id); 
        packages++; 
       } 
      } else { 
       printf("Unrecognized format. Execute alfred -h for more information.\n"); 
      } 
      break; 

     default: 
      printf("Unrecognized format. Execute alfred -h for more information.\n"); 
      break; 
    } 
    break; 

回答

0

您也可以嘗試libargtable。 我以前用它來解析各種參數,它非常方便。

+0

謝謝!這對我有用! :) – 2013-05-15 14:31:07

0

我想你正在尋找的是getopt

的文件說

的getopt()函數解析命令行參數。它的參數argc和argv是在程序調用時傳遞給main()函數的參數count和 數組。一個以' - '開頭的元素(並且是 不完全是「 - 」或「 - 」)是一個選項元素。這個元素的字符(除了最初的' - ')是 選項字符。如果重複調用getopt(),則會連續返回每個選項元素 中的每個選項字符。

+0

我已經嘗試getopt。它不符合我的需要,因爲我需要 - 選項。例如--force-yes ...無論如何感謝! :) – 2013-05-15 14:32:09