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