8

我正在使用 fastcgi 库创建一个应用程序,它们的打印方法有点冗长。我试图用我自己的方法包装他们的 fprintf 函数:

我想转

FCGX_FPrintF(out, char* fmt, ...);

进入

写(字符* strFormat,...);

我发现了 va_list 的魔力,但找不到将 va_list 值传递给他们的 fprintf 函数的简单方法。有没有办法做到这一点?我知道 vsprintf 和 vprintf 存在,所以它一定比我想象的要难。

如果一切都失败了,我将重载一个写入函数

4

2 回答 2

14

您必须vfprintf()在 Fast CGI 库中找到类似物。至少有一个是合理的;实现的简单方法FCGX_FPrintF()是:

void FCGX_FPrintF(FILE *out, char *fmt, ...)
{
    va_list args;
    va_start(args, fmt);
    FCGX_VFPrintF(out, fmt, args);
    va_end(args);
}

所以这个函数存在的可能性很大;您需要检查它是否正式公开。


快速访问Fast CGI 网站会发现 FCGX 前缀被 fgciapp.h 头文件中声明的函数使用,而该前缀又包含:

/*
 *----------------------------------------------------------------------
 *
 * FCGX_FPrintF, FCGX_VFPrintF --
 *
 *      Performs printf-style output formatting and writes the results
 *      to the output stream.
 *
 * Results:
 *      number of bytes written for normal return,
 *      EOF (-1) if an error occurred.
 *
 *----------------------------------------------------------------------
 */
DLLAPI int FCGX_FPrintF(FCGX_Stream *stream, const char *format, ...);

DLLAPI int FCGX_VFPrintF(FCGX_Stream *stream, const char *format, va_list arg);

至此,界面的功能就完成了。

于 2009-10-10T20:16:15.943 回答
1

我不相信有任何方法可以以独立于平台的方式做到这一点。我可能会自己使用 vsprintf 格式化字符串,然后将其发送到打印功能。

于 2009-10-10T20:16:42.027 回答