LINUX.ORG.RU

Смотришь, что за флаг, и выполняешь соответствующие инструкции.

Zhbert ★★★★★
()

Что у них там в коде творится?

#include <unistd.h>
#include <stdlib.h>
#include <stdio.h>
int main(int argc, char *argv[])
{
    int flags, opt;
    int nsecs, tfnd;
    nsecs = 0;
    tfnd = 0;
    flags = 0;
    while ((opt = getopt(argc, argv, "nt:")) != -1) {
        switch (opt) {
        case 'n':
            flags = 1;
            break;
        case 't':
            nsecs = atoi(optarg);
            tfnd = 1;
            break;
        default: /* '?' */
            fprintf(stderr, "Использование: %s [-t nsecs] [-n] имя\n",
                    argv[0]);
            exit(EXIT_FAILURE);
        }
    }
    printf("flags=%d; tfnd=%d; nsecs=%d; optind=%d\n",
            flags, tfnd, nsecs, optind);
    if (optind >= argc) {
        fprintf(stderr, "После параметра требуется значение\n");
        exit(EXIT_FAILURE);
    }
    printf("параметр = %s\n", argv[optind]);
    /* остальной код не показан */
    exit(EXIT_SUCCESS);
}
olelookoe ★★★
()

У кого «у них»? В процесс приходит массив аргументов от шелла (например, ["/bin/ls", "-lLaS", "--color=auto", "-R"]). Дальше он парсится парсером аргументов коих сотни разных - от стандартных сишных getopt(3), getopt_long(3) до питоньего argparse. Кто-то пишет свой парсер.

slovazap ★★★★★
()

Задают различное поведение для приложения. Ничего сакрального. Все обычное.

thegoldone ★★
()

Ага, спасибо за getopt()!

tiopl09
() автор топика
Ответ на: комментарий от usi_svobodi

Он вполне себе направил, куда смотреть. Ты написал тупо «Ничего не творится», что есть 4.2: в коде есть обработка этих самых флагов. Так что да, это либо 4.2, либо флуд.

Zhbert ★★★★★
()

Разберись что со «*» происходит в шелле, и что именно передается аргументами в программу :)

blex ★★★★
()
Ответ на: комментарий от alegz

getopt никогда не было «стандартным сишным». Это часть util-linux.

Какой нахрен util-linux? Я ясно написал getopt(3) (не getopt(1)), это POSIX.

slovazap ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.