变量函数:提取参数并追加字符串

 涅槃WB 发布于 2023-02-11 17:19

我有一个函数log_info(从printf实现中复制)接受变量号.参数并将其传递给vprintf:

int log_info(const char *format, ...) {
  va_list arg;
  int done;

  va_start (arg, format);
  done = vfprintf (stdout, format, arg);
  va_end (arg);

  return done;
}

我想在这些参数前面添加和附加字符串.因此,如果用户以这种方式调用上述函数:

log_info("at iteration %d, float value is %f", i, f);

而不是打印

at iteration 4, float value is 102.34

我想要打印

[INFO] [at iteration 4, float value is 102.34] [timestamp: xxxx]

我可以分3个步骤完成

fprintf(stdout, "[INFO] [");
vprintf(stdout, format, arg);
fprintf(stdout, "] [timestamp:%f]", ts);

但是程序是多线程的,因此我希望所有数据都可以在一次调用vprintf中编写(vprintf是线程安全的).

另一种选择是锁定一个互斥锁,然后按照上面所示的3个步骤编写它,但是如果将字符串附加到args并不是太复杂,我想尝试一下.

编辑:由于使用互斥锁而导致的性能开销并不是真正的问题,但除非必要,否则我不想使用它.

提前致谢

撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有