nixp.ru v3.0

22 января 2017,
воскресенье,
19:18:19 MSK

DevOps с компанией «Флант»
neogeisha написала 19 декабря 2007 года в 22:21 (299 просмотров) Ведет себя как женщина; открыла 53 темы в форуме, оставила 266 комментариев на сайте.

собственно сабж

например так

file -h

-f open file

то есть тут два параметра, как их скормить программе?

желательно посмотреть на живой пример

спасибо

Anarchist

Ну ты бы хотя бы язык указала, что ли…

neogeisha
Anarchist
Ну ты бы хотя бы язык указала, что ли…

сори, с

sandy
neogeisha
собственно сабж

например так

file -h

-f open file

то есть тут два параметра, как их скормить программе?

желательно посмотреть на живой пример

спасибо

int main(char** argv, int argc)

{

/* … */

return 0;

}

argv — масив строковых параметров твоей проги

argc — количество параметров

file -f open file

1-й параметр: имя проги (file)

2-й: -f

3-й: open

4-й: file

neogeisha

а как сопоставить параметра и действие? как лучше?

case?

neogeisha

или параметры это тоже массивы?

и если эллемент массива равен -р то делать тотто тото ?

metal

Лучше не изобретать велосипеды и использовать getopt. man getopt, там и примерчик есть.

neogeisha
metal
Лучше не изобретать велосипеды и использовать getopt. man getopt, там и примерчик есть.

спасибо, попробуй

Jo

не лучше getopt_long

metal
Jo
не лучше getopt_long

В том же man :)

Anarchist
Jo
не лучше getopt_long

Я думаю, наиболее правильным здесь было бы:

1. [Как минимум] ознакомиться с тремя традициями указания опций.

2. Составить собственное мнение относительно наиболее подходящего.

И уже исходя из этого — разбираться с реализацией.

neogeisha
Anarchist
Я думаю, наиболее правильным здесь было бы:

1. [Как минимум] ознакомиться с тремя традициями указания опций.

2. Составить собственное мнение относительно наиболее подходящего.

И уже исходя из этого — разбираться с реализацией.

и какие же это три традиции?

Anarchist
neogeisha
и какие же это три традиции?

1. BSD

Опция явно не выделяется. Под опцию резервируется один символ.

Типический пример — tar.

2. Классика (System V)

Опять же: под опцию отводится один символ. Опции выделяются символом '-’.

Примеров использующих чисто этот вариант указания опций навскидку не назову.

3. GNU (привет Столлману)

Опция может содержать как один, так и несколько символов.

Выделяется уже также последовательностью символов: '—’.

Во всех трёх случаях опции разделяются пробелами.

В настоящее время обычно используются варианты 2+3. Думается мне, отчасти сие объясняется реализацией getopt.

Steck


extern char *optarg;
main(int argc,char *argv[]) {
 / ................./
while((usag = getopt(argc,argv,"i:s")) != -1)
            switch(usag) {
                  case 'f': // для строк
                        file_name = optarg;
                        break;
                  case 's': // а сюда число можно засунуть
                        sss = atoi(optarg);
                        break;
/.................../
}

Получается примерно так

./test -f file -s числовой_параметр_какой_нить

myst
Anarchist
1. BSD

2. Классика (System V)


1. Бля, Анархист, как ты достал уже! И где ты видел в BSD такие опции, как в tar? Такое говно использует только tar, ps и dd, насколько мне известно. И с BSD это никак не связано.

2. Пример? man. man использует короткие опции. Вот это, как раз и используется в BSD, а не (1).

3. …

4. Как в X.org: -option — '-' один, но символов много.

Ты бы сам матчасть подучил что ли.

Anarchist
myst
1. Бля, Анархист, как ты достал уже! И где ты видел в BSD такие опции, как в tar? Такое говно использует только tar, ps и dd, насколько мне известно. И с BSD это никак не связано.

А ты вообще видел те системы, к которым это относится?

myst
2. Пример? man. man использует короткие опции. Вот это, как раз и используется в BSD, а не (1).

Стандарт.

myst
3. …

4. Как в X.org: -option — '-' один, но символов много.

Иллюстрация того, что не все согласны (хотят следовать) по Пути указанном Столлманном.

myst
Anarchist
А ты вообще видел те системы, к которым это относится?

Я не видел таких систем. Ни к одной из известных мне BSD-систем это не относится. Ты что ли видел такие системы? А если нет, то какого тогда заявляешь, что односимвольные опции без '-’ — это BSD-конвенция?

Anarchist
myst
Я не видел таких систем. Ни к одной из известных мне BSD-систем это не относится. Ты что ли видел такие системы? А если нет, то какого тогда заявляешь, что односимвольные опции без '-’ — это BSD-конвенция?

Дык эти договорённости из времён, когда собственно и произошло разделение на System V и BSD.

Я же и говорю про истрию.

myst

Эти договорённости из жопы. Их достали исторические авторы этих трёх прог. В UNIX всю жизнь опции были -, и в BSD это никогда не меняли.

ecobeingecobeing.ru
Экология и вегетарианство на благо всем живым существам Планеты.