RPMATCH - Linux手册页

时间:2019-08-20 18:01:12  来源:igfitidea点击:

Linux程序员手册 第3部分
更新日期: 2020-06-09

名称

rpmatch-确定问题的答案是肯定的还是否定的

语法

#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应该是一个空终止的字符串,其中包含用户提供的响应,可能是通过fgets(3)或getline(3)获得的。

如果程序调用了setlocale(3)来进行更改,则根据环境变量LANG,LC_MESSAGES和LC_ALL考虑用户的语言首选项。

无论使用哪种语言环境,匹配ha [Yy]的响应始终被接受为肯定回答,而匹配ha [Nn]的响应始终被接受为否定回答。

返回值

检查响应后,rpmatch()对于公认的否定响应("否")返回0,对于公认的肯定响应("是")返回1,而当响应值未被识别时返回-1。

错误说明

返回值-1可能表示输入无效或其他错误。仅测试返回值是否为非零是不正确的。

rpmatch()可能由于regcomp(3)或regexec(3)可能失败的任何原因而失败;错误的原因无法从errno或其他任何地方获得,而是表示正则表达式引擎发生故障(但这种情况与无法识别的响应值无法区分)。

属性

有关本节中使用的术语的说明,请参见attribute(7)。

InterfaceAttributeValue
rpmatch()Thread safetyMT-Safe locale

遵循规范

rpmatch()并不是任何标准所必需的,但是在其他一些系统上也可以使用。

BUGS

rpmatch()实现仅查看响应的第一个字符。结果," nyes"返回0," ynever;在一百万年之内"返回1。例如,更严格地接受输入字符串是更可取的(例如,使用regex(7)中描述的扩展正则表达式符号) ):ha([yY] | yes | YES)$和ha([nN] | no | NO)$。

示例

rpmatch()应用于程序的命令行参数中给出的字符串时,以下程序显示结果。

#define _SVID_SOURCE
#include <locale.h>
#include <stdlib.h>
#include <string.h>
#include <stdio.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)

出版信息

这个页面是Linux手册页项目5.08版的一部分。有关项目的说明、有关报告错误的信息以及此页面的最新版本,请访问https://www.kernel.org/doc/man-pages/