1.打印日志函数
#include <stdarg.h>
#define SPIDER_LOG(level, format, ...) do{ \
if (level >= g_conf->log_level) {\
time_t now = time(NULL); \
char msg[MAX_MESG_LEN]; \
char buf[32]; \
sprintf(msg, format, ##__VA_ARGS__); \
strftime(buf, sizeof(buf), "%Y%m%d %H:%M:%S", localtime(&now)); \
fprintf(stdout, "[%s] [%s] %s\n", buf, LOG_STR[level], msg); \
fflush(stdout); \
} \
if (level == SPIDER_LEVEL_ERROR) {\
exit(-1); \
} \
} while(0)
函数调用:
SPIDER_LOG(SPIDER_LEVEL_WARN, "limit should NOT be greater than %lu", rl.rlim_max);
//(其中#define SPIDER_LEVEL_WARN 2)
2.设置进程最多打开的文件数
static int set_nofile(rlim_t limit)
{
struct rlimit rl;
if (getrlimit(RLIMIT_NOFILE, &rl) < 0) {
SPIDER_LOG(SPIDER_LEVEL_WARN, "getrlimit fail");
return -1;
}
if (limit > rl.rlim_max) {
SPIDER_LOG(SPIDER_LEVEL_WARN, "limit should NOT be greater than %lu", rl.rlim_max);
return -1;
}
rl.rlim_cur = limit;
if (setrlimit(RLIMIT_NOFILE, &rl) < 0) {
SPIDER_LOG(SPIDER_LEVEL_WARN, "setrlimit fail");
return -1;
}
return 0;
}
函数调用:
set_nofile(1024);