系统编程概念章节中的函数解析
1.获取函数中省略号指定的参数:
在函数体中声明一个va_list,然后用va_start()函数来获取参数列表中的参数,使用完毕后调用va_end()结束。
2.vfprintf()函数:将可变参数按照指定的格式打印到文件流中。
函数原型:int vfprintf(FILE *stream, char *format,va_list param)
参数:stream 表示将字符打印到的文件流;
format 表示指定的格式;
param 表示可变参数。
3.程序实例:
void usageErr(const char *format,...)
{
va_list argList;
fflush(stdout);
fprintf(stderr,"Usage:");
va_start(argList,format);
vfprintf(stderr,format,argList);
va_end(argList);
fflush(stderr);
exit(EXIT_FAILURE);
}
4. vsnprintf()函数:将可变参数格式化输出到一个字符数组
函数原型:int vsnprintf(char *str,size_t size,const char *format,va_list ap)
参数:str 字符数组名称;
size 字符数组大小;
format 指定的格式;
va_list 可变参数。
5. snprintf()函数:将可变个参数按照一定的格式化成字符串,然后将其复制到str中。
函数原型:int snprintf(char *str,size_t size,const char *format,...)
参数:str 字符数组名称;
size 字符数组大小;
format 指定的格式。
6.程序实例:
static void outputError(Boolean useErr,int err,Boolean flushStdout,const char *format,va_list ap)
{
#define BUF_SIZE 500
char buf[BUF_SIZE],userMsg[BUF_SIZE],errText[BUF_SIZE];
vsnprintf(userMsg,BUF_SIZE,format,ap);
if(useErr)
snprintf(errText,BUF_SIZE,"[%s %s]",(err > 0 && err < MAX_ENAME) ? ename[err] : "?UNKNOWN?",strerror(err));
else
snprintf(errText,BUF_SIZE,":");
snprintf(buf,BUF_SIZE,"ERROR %s %s\n",errText,userMsg);
if(flushStdout)
fflush(stdout);
fputs(buf,stderr);
fflush(stderr);
}