rpmatch(3)

ИМЯ
rpmatch - определяет, является ли ответ на вопрос утвердительным или отрицательным

LIBRARY
Standard C library (libc, -lc)

СИНТАКСИС
#include <stdlib.h>

int rpmatch(const char *response);

    Требования макроса тестирования свойств для glibc (см. feature_test_macros(7)):

rpmatch():
    начиная с glibc 2.19:
        _DEFAULT_SOURCE
    glibc 2.19 и старее:
        _SVID_SOURCE

ОПИСАНИЕ
Функция rpmatch() обрабатывает ответ пользователя «да» или «нет» на вопросы, учитывая интернационализацию.

В аргументе response должен указываться ответ пользователя в виде строки, заканчивающейся null, полученной, например, с помощью fgets(3) или getline(3).

Пользовательские языковые настройки определяются с помощью переменных окружения LANG, LC_MESSAGES и LC_ALL, если для их учёта программа вызывала setlocale(3).

Regardless of the locale, responses matching ^[Yy] are always accepted as affirmative, and those matching ^[Nn] are always accepted as negative.

ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ
После проверки response, функция rpmatch() возвращает 0 при найденном отрицательном ответе («нет»), 1 при положительном ответе («да») и -1, когда значение response не распознано.

ОШИБКИ
Возвращаемое значение -1 может указывать на неправильные входные данные, либо какую-то другую ошибку. Не стоит проверять является ли возвращаемое значение лишь отличным от нуля.

Функция rpmatch() может завершиться с ошибкой по любой из причин, по которым могут не выполниться regcomp(3) или regexec(3); причина ошибки не указывается в errno или где-то ещё — это указывает на ошибку в самом механизме regex (но этот случай не отличается от нераспознанных значений response).

АТРИБУТЫ
Описание терминов данного раздела смотрите в attributes(7).
Интерфейс | Атрибут | Значение
rpmatch() | Безвредность в нитях | MT-Safe locale

СТАНДАРТЫ
rpmatch() is not required by any standard, but available under the GNU C library, FreeBSD, and AIX.

ДЕФЕКТЫ
The YESEXPR and NOEXPR of some locales (including "C") only inspect the first character of the response. This can mean that "yno" et al. resolve to 1. This is an unfortunate historical side-effect which should be fixed in time with proper localisation, and should not deter from rpmatch() being the proper way to distinguish between binary answers.

ПРИМЕРЫ
Следующая программа показывает результаты, когда в rpmatch() передана строка, полученная программой из командной строки.

    #define _SVID_SOURCE
    #include <locale.h>
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    int
    main(int argc, char *argv[])
    {
        if (argc != 2 || strcmp(argv[1], "--help") == 0) {
            fprintf(stderr, "%s response\n", argv[0]);
            exit(EXIT_FAILURE);
        }
        setlocale(LC_ALL, "");
        printf("rpmatch() returns: %d\n", rpmatch(argv[1]));
        exit(EXIT_SUCCESS);
    }

СМ. ТАКЖЕ
fgets(3), getline(3), nl_langinfo(3), regcomp(3), setlocale(3)

ПЕРЕВОД
Русский перевод этой страницы руководства был сделан aereiae <aereiae@gmail.com>, Azamat Hackimov <azamat.hackimov@gmail.com>, Dmitriy S. Seregin <dseregin@59.ru>, Katrin Kutepova <blackkatelv@gmail.com>, Lockal <lockalsash@gmail.com>, Yuri Kozlov <yuray@komyakino.ru>, Баринов Владимир и Иван Павлов <pavia00@gmail.com>

Этот перевод является бесплатной документацией; прочитайте Стандартную общественную лицензию GNU версии 3 (https://www.gnu.org/licenses/gpl-3.0.html) или более позднюю, чтобы узнать об условиях авторского права. Мы не несем НИКАКОЙ ОТВЕТСТВЕННОСТИ.

Если вы обнаружите ошибки в переводе этой страницы руководства, пожалуйста, отправьте электронное письмо на man-pages-ru-talks@lists.sourceforge.net.