2013-11-02 2 views
0

Итак, я знаю, что вы можете использовать getopt(), чтобы найти аргументы параметров, но как насчет других вещей в массиве argv, таких как цели? Есть ли способ сделать это, используя getopt()? Просматривая страницу руководства, и я ничего не вижу ... может быть, мне это не хватает.Использование getopt() для поиска целей

+1

Что такое цели в 'argv'? Возможно, рассмотрите (в Linux) функции [argp] (http://www.gnu.org/software/libc/manual/html_node/Argp.html) –

+1

Можете ли вы уточнить, какие у вас «целевые»? –

+0

Я объяснил в своем комментарии ниже первого ответа. – user2079802

ответ

2

Для этого используйте optarg (это строка, используйте для этого текст sscanf).

Цитируя man 3 getopt:

optstring is a string containing the legitimate option characters. If such a character is followed by a colon, the option requires an argument, so getopt() 
    places a pointer to the following text in the same argv-element, or the text of the following argv-element, in optarg. Two colons mean an option takes an 
    optional arg; if there is text in the current argv-element (i.e., in the same word as the option name itself, for example, "-oarg"), then it is returned in 
    optarg, otherwise optarg is set to zero. This is a GNU extension. If optstring contains W followed by a semicolon, then -W foo is treated as the long 
    option --foo. (The -W option is reserved by POSIX.2 for implementation extensions.) This behavior is a GNU extension, not available with libraries before 
    glibc 2. 

Если у вас есть дополнительные аргументы (меню cp -l file1 file2) они сохраняются в argv на последних позициях, начиная с optind.

PS: Также есть пример в конце страницы man.

+0

вправо, но я не уверен, как сказать getopt(), чтобы искать эти аргументы. Прямо сейчас я вызываю getopt следующим образом: 'getopt (argc, argv," f: j: ")' поэтому я говорю ему сначала искать параметр '-f', и он возвращает аргумент, тогда он делает то же самое для опции '-j'. Но как насчет того, если у меня есть дополнительная строка, которая также должна быть проанализирована, которая перед этим не имеет спецификатора '-f' или' -j'? – user2079802

+0

Он останется в 'argv', и вы можете прочитать его оттуда. Все несоответствующие опции остаются там. –

Смежные вопросы