Getopt - имя файла в качестве аргумента - PullRequest
5 голосов
/ 04 марта 2011

Допустим, я создал программу на C, которая называется так:

./something -d dopt filename

Итак, -d - это команда, dopt - необязательный аргумент для -d, а filename - этоаргумент ./something, потому что я также могу вызвать ./something filename.

Что представляет собой форма getopt для получения имени файла?

Ответы [ 2 ]

4 голосов
/ 04 марта 2011

Использовать строку опций "d:"

Захват -d dopt с optarg обычным способом. Затем посмотрите на optind (сравните его с argc), который говорит вам, остались ли еще какие-либо неопционные аргументы. Если это так, ваше имя файла является первым из них.

getopt специально не говорит вам, что такое неопционные аргументы, или проверяет число. Он просто сообщает вам, где они начинаются (сначала переместив их в конец массива аргументов, если вы находитесь в режиме GNU-строгий POSIX)

3 голосов
/ 04 марта 2011

Проверьте, как grep делает это . В конце main() вы найдете:

if (optind < argc)
{
    do
    {
        char *file = argv[optind];
        // do something with file
    }
    while ( ++optind < argc);
}

optind - это количество параметров командной строки, найденных getopt. Так что эта условная / циклическая конструкция может обрабатывать все файлы, перечисленные пользователем.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...