Потребителски вход

Запомни ме | Регистрация
Постинг
04.05.2009 15:02 - Getopt или как да направим системна програма която да приема опции
Автор: daniel Категория: Технологии   
Прочетен: 4574 Коментари: 5 Гласове:
0

Последна промяна: 04.05.2009 15:13


Първо за да използваме тази функция трябва да включим към програмата си unistd.h

 

#include “unistd.h”

 

Използвани променливи за връщане на резултат:

Int opterr -

Int optopt

Int optind

Char optarg

 

Фукцията:

Int getopt(int argc, char **argv, const char *options)

 

Getopt функцията взима следващ аргумент за опция от изброените аргументи в argv и argc, които по принцип се посрещат от главната main фукция на програмата.

 

Options e поредица от опции които са валидни за нашата програма. Примерно ако е “aqw:” за нашата програма ще са валидни опции като –a –q –w но няма да е валиднa опцията –r например. Двуеточието „аяв:” след валидните опции  означава че тези опции са задължителни, ако вместо ‘:’ се запише ‘::’  aqw::”нашите опции стават незадължителни.

 

Ето и примерна програма която ще наречем ginservice.c :

#include "ctype.h"
#include "stdio.h"
#include "stdlib.h"
#include "unistd.h"

int main(int argc, char **argv)
{
 int glass = 0;
 int lemon = 0;
 int ice = 0;
 char *somethingadditional = NULL;
 int index;
 int c;

 opterr = 0;

 while((c = getopt(argc, argv, "glip:")) != -1)
  switch (c)
  {
   case "g":
   glass = 1;
   break;
   case "l":
   lemon = 1;
   break;
   case "i":
   ice = 1;
   break;
   case "p":
   somethingadditional = optarg;
   break;
   case "?":
   if (optopt == "p")
    fprintf (stderr, "option -%c requires an argument.n", optopt);
   else if (isprint (optopt))
    fprintf (stderr, "Unknown option "-%c".n",optopt);
   else
    fprintf (stderr, "Unknown option character "x%x".n", optopt);
   return 1;
   default:
   abort();
 }

printf ("Gin with:n glass = %d n lemon = %d n ice = %d n something additional = %sn",glass,lemon,ice, somethingadditional);

for (index = optind; index < argc; index++)
 printf ("Non-option argument: %sn", argv[index]);
return 0;
}

Първо да компилираме:
# gcc -o ginservice ginservice.c

Ето и примерно използване:
#./ginservice -g
Gin with:
 glass = 1
 lemon = 0
 ice = 0
 something additional = (null)

#./ginservice -g -l
Gin with:
 glass = 1
 lemon = 1
 ice = 0
 something additional = (null)


#./ginservice -g -l -i
Gin with:
 glass = 1
 lemon = 1
 ice = 1
 something additional = (null)

#./ginservice -g -l -i -p "this is something additional"
Gin with:
 glass = 1
 lemon = 1
 ice = 1
 something additional = this is something additional

#./ginservice -g -l -i -p "this is something additional" other arguments
Gin with:
 glass = 1
 lemon = 1
 ice = 1
 something additional = this is something additional
Non-option argument: other
Non-option argument: arguments

Това е.
Надявам се съм бил полезен за някой

Използвана информация от тук


 




Гласувай:
0



Следващ постинг
Предишен постинг

1. ivodidov - охооо
04.05.2009 15:15
това C++ ли е ?
цитирай
2. daniel - чисто c
04.05.2009 15:21
чисто c
цитирай
3. анонимен - въпрос
04.05.2009 16:28
защо използваш кавички - " - а не триъгълни скоби - <, > - за препроцесора?
цитирай
4. daniel - @анонимен
04.05.2009 17:50
Интересно наистина. Дори и не знаех че при чисто 'С' пак става номера. А това го използвам може би защото в литературата която чета има примери с кавички.
цитирай
5. анонимен -
04.05.2009 18:08
ами и така става, но не е добра практика, защото може да ти създаде проблем, когато включваш локални хедъри.
цитирай
Търсене

За този блог
Автор: daniel
Категория: Лични дневници
Прочетен: 177322
Постинги: 10
Коментари: 96
Гласове: 121
Архив
Календар
«  Април, 2024  
ПВСЧПСН
1234567
891011121314
15161718192021
22232425262728
2930