rpmatch(3) | Library Functions Manual | rpmatch(3) |
rpmatch - определяет, является ли ответ на вопрос утвердительным или отрицательным
Standard C library (libc, -lc)
#include <stdlib.h>
int rpmatch(const char *response);
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 _DEFAULT_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 или более позднюю, чтобы узнать об условиях авторского права. Мы не несем НИКАКОЙ ОТВЕТСТВЕННОСТИ.
Если вы обнаружите ошибки в переводе этой страницы руководства, пожалуйста, отправьте электронное письмо на man-pages-ru-talks@lists.sourceforge.net.
5 февраля 2023 г. | Linux man-pages 6.03 |