在打印前面加进程名字,基于printf函数封装
在打印前面加进程名字,基于printf函数封装
#include <stdio.h>
#include <stdarg.h>
#include <string.h>
#include <unistd.h>
#include <stdlib.h>
// ============================
// 封装的打印函数 zsprintf()
// ============================
void zsprintf(const char *fmt, ...)
{
char proc_name[64] = {0};
char final_fmt[1024] = {0};
// 读取进程名(来自 /proc/self/comm)
FILE *fp = fopen("/proc/self/comm", "r");
if (fp)
{
if (fgets(proc_name, sizeof(proc_name), fp))
{
// 去掉末尾的换行符
size_t len = strlen(proc_name);
if (len > 0 && proc_name[len - 1] == '\n')
proc_name[len - 1] = '\0';
}
fclose(fp);
}
else
{
strcpy(proc_name, "unknown");
}
// 拼接最终格式字符串
snprintf(final_fmt, sizeof(final_fmt), "[%s] %s", proc_name, fmt);
// 可变参数处理
va_list args;
va_start(args, fmt);
vprintf(final_fmt, args);
va_end(args);
}
// 使用
...
zsprintf("======chn is %d function: %s line: %d\n", chn, __FUNCTION__, __LINE__);
或
zsprintf("======function: %s line: %d\n", __FUNCTION__, __LINE__);