LINUX.ORG.RU

getopt_long си

 


0

1

доброго дня всем.

есть 2 обязательных параметра server и client, однако эти параметры взаимоисключающие, как сделать, чтобы пользователю не выдвалась ошибка. когда он указал server, но не указал client?

если вы поняли, о чем я, то помогите пожалуйста

★★★
#include <err.h>
#include <stdio.h>
#include <unistd.h>

int
main(int argc, char **argv)
{
        int ch;
        int s_flag = 0;
        int c_flag = 0;

        while ((ch = getopt(argc, argv, "sc")) != -1)
                switch (ch) {
                case 's':
                        s_flag = 1;
                        break;
                case 'c':
                        c_flag = 1;
                        break;
                default:
                        break;
                }
        argc -= optind;
        argv += optind;

        if (!(s_flag ^ c_flag))
                errx(1, "No, man!");

        if (s_flag)
                warnx("Server");
        if (c_flag)
                warnx("Client");

        return 0;
}

На getopt_long сам переделаешь.

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

все так, спасибо, красиво у вас выходит :) , у меня такая же идея была. но не тек красиво. думал, что это как-то возможно реализовать исключительно средствами getopt_long.

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

В getopt канонiчно с флагами работать, а потом обрабатывать. Т.к. ключи в командной строке несколько раз встречаться могут и порядок их не детерминирован.

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