您的位置:首页 > 运维架构 > Linux

(Michael Kerrisk)Linux系统编程手册读书笔记(一)-----系统编程概念中的函数解析

2014-09-05 14:18 459 查看

系统编程概念章节中的函数解析

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);
}


 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息