fmtmsg函数用法详解
fmtmsg函数简介
- 头文件包含
#include <fmtmsg.h>
- 函数定义
int fmtmsg(long classification , const char * label ,
int severity , const char * text ,
const char * action , const char * tag );
fmtmsg函数常见使用错误
- 编译错误
warning: implicit declaration of function ‘fmtmsg’ [-Wimplicit-function-declaration]
解决办法:包含头文件
#include <fmtmsg.h>
fmtmsg函数详细描述
此函数在classification参数中指定的设备上显示由其参数描述的消息。对于写到stderr 的消息,格式取决于 MSGVERB 环境变量。
label参数标识消息的源。字符串必须由两个冒号分隔的部分组成,其中第一部分不超过10个字符,第二部分不超过14个字符。
text参数描述错误的条件。
action参数描述了从错误中恢复的可能步骤。如果是打印的,则前缀为“to fix:”。
tag参数是对在线文档的引用,在那里可以找到更多信息。它应该包含label值和唯一的标识号。Dummy arguments每个参数都可以有一个虚拟值。虚拟分类值 MM_NULLMC (0L)没有指定任何输出,因此不会打印任何内容。虚拟严重性值 NO_SEV (0)表示没有提供严重性。值MM_NULLLBL MM_NULLTXT MM_NULLACT MM_NULLTAG 是"((char\ *)\ 0)" 空字符串的同义词,label0是NO_SEV The classification argument的同义词classification参数是描述4种信息的值的总和。
第一个值定义输出通道。
- MM_PRINT 输出到stderr
- MM_CONSOLE 输出到系统控制台。
- "MM_PRINT | MM_CONSOLE" 输出到两者。
第二个值是错误的来源:
- 发生硬件错误。
- 发生固件错误。
- 发生软件错误。
第三个值编码问题的检测器:
- MM_APPL 它是由应用程序检测到的。
- MM_UTIL 它是由实用程序检测到的。
- MM_OPSYS 操作系统检测到它。
第四个值显示了事件的严重程度:
- MM_RECOVER 这是一个可恢复的错误。
- MM_NRECOV 这是一个不可恢复的错误。The severity argument severity参数可以采用以下值之一:
- MM_NOSEV 没有打印严重性。
- MM_HALT 此值打印为halt。
- MM_ERROR 此值打印为错误。
- MM_WARNING 此值打印为警告。
- MM_INFO 此值作为信息打印。
数值介于0和4之间。使用addseverity (3)或环境变量 SEV_LEVEL ,您可以添加更多的级别和字符串来打印。
fmtmsg函数返回值
该函数可以返回4个值:
- MM_OK 一切都很顺利。
- MM_NOTOK 完全失败。
- MM_NOMSG 写入stderr 时出错
- MM_NOCON 写入控制台时出错。
fmtmsg函数其他说明
System V和UnixWare手册页告诉我们,这些函数已经被“pfmt()和addsev()”或“pfmt()、vpfmt()、lfmt()和vlfmt()”所取代,稍后将被删除。
fmtmsg函数使用举例
#include <stdio.h>
#include <stdlib.h>
#include <fmtmsg.h>
int
main(void)
{
long class = MM_PRINT | MM_SOFT | MM_OPSYS | MM_RECOVER;
int err;
err = fmtmsg(class, "util\-linux:mount", MM_ERROR,
"unknown mount option", "See mount(8).",
"util\-linux:mount:017");
switch (err) {
case MM_OK:
break;
case MM_NOTOK:
printf("Nothing printed\en");
break;
case MM_NOMSG:
printf("Nothing printed to stderr\en");
break;
case MM_NOCON:
printf("No console output\en");
break;
default:
printf("Unknown error from fmtmsg()\en");
}
exit(EXIT_SUCCESS);
}
输出应该是:
util\-linux:mount: ERROR: unknown mount option
TO FIX: See mount(8). util\-linux:mount:017
而之后
MSGVERB=text:action; export MSGVERB
输出变为:
unknown mount option
TO FIX: See mount(8).
评论区