int main() { int msqid, i; struct bbs_msgbuf *msg; struct sigaction act; umask(027); chdir(BBSHOME); setuid(BBSUID); setreuid(BBSUID, BBSUID); setgid(BBSGID); setregid(BBSGID, BBSGID); if (dodaemon("bbslogd", true, true)) { bbslog("3error", "bbslogd had already been started!"); return 0; } atexit(flushBBSlog_exit); bzero(&act, sizeof(act)); act.sa_handler = flushlog; sigaction(SIGTERM, &act, NULL); sigaction(SIGABRT, &act, NULL); sigaction(SIGHUP, &act, NULL); act.sa_handler = flushBBSlog_time; sigaction(SIGALRM, &act, NULL); act.sa_handler = trunclog; sigaction(SIGUSR1, &act, NULL); act.sa_handler = truncboardlog; sigaction(SIGUSR2, &act, NULL); alarm(60*10); /*十分钟flush一次*/ msqid = init_bbslog(); if (msqid < 0) return -1; gb_trunclog=false; truncboard=false; openbbslog(1); while (1) { if ((msg = rcvlog(msqid)) != NULL) writelog(msg); if (gb_trunclog) do_trunclog(); else if(truncboard) do_truncboardlog(); } flushlog(-1); for (i = 0; i < sizeof(logconfig) / sizeof(struct taglogconfig); i++) { free(logconfig[i].buf); } }
int main(int argc, char *argv[]) { char *str; int i = 0, day = 0, hour = 4; umask(027); lockfd = open(MY_BBS_HOME "/friends.lock", O_CREAT | O_RDONLY, 0660); if (flock(lockfd, LOCK_EX | LOCK_NB) < 0) exit(1); if(argc == 2) { if(!strcmp(argv[1], "-d")) { //run as daemon if (fork()) return 0; setsid(); if (fork()) return 0; close(0); close(1); close(2); } } msqid = initFriendsMSQ(); if (msqid < 0) exit(1); fidx = ght_create(MAXUSERS + 3); if (fidx == NULL) exit(1); mkdir(FRIENDS_TMPDIR, 0770); //try making tmp dir if(load_friends() == -1) exit(1); div_friends(); friends_top10(); signal(SIGHUP, set_sync_flag); //sync if disconnected signal(SIGTERM, write_back_all); signal(SIGCHLD, sig_child); while (1) { while ((str = rcvlog(msqid, 1))) { // printf("%s\n", str); handle_msg(str); } sleep(5); i++; if (i == hour*12*60 || sync_flag) { //write back from time to time system("rm -f " FRIENDS_TMPDIR "/*"); if(++day == 24/hour) {//daily day = 0; estrange_by_time(); } save_friends(); div_friends(); friends_top10(); i = 0; sync_flag = 0; } } return 0; }
int main() { char *str; int i = 0, fd = -1, msqid = -1; int sp_retv, sv_retv; srandom(time(NULL)); chdir(MY_BBS_HOME); mkdir(SP_DIR, 0770); umask(027); msqid = initAILogMSQ(); if (msqid < 0) return -1; #if !defined(DEBUG_MODE) if (fork()) return 0; setsid(); if (fork()) return 0; close(0); close(1); close(2); #endif signal(SIGHUP, sig_hup); signal(SIGTERM, sig_term); signal(SIGCHLD, sig_chld); fd = open(MY_BBS_HOME "/reclog/AId.lock", O_CREAT | O_RDONLY, 0660); if (flock(fd, LOCK_EX | LOCK_NB) < 0) return -1; #ifdef DEBUG_MODE printf("msq started...\n"); #endif while (1) { if(i % 128 == 0) { sv_retv = load_server(); sp_retv = load_special(); if(fork() == 0) { close(fd); update_special_html(); if(sp_retv == 1) return send_special(); else return MAX_SERVER_NUM; } } while ((str = rcvlog(msqid, 1))) { strsncpy(queue[qlen++], str, 512); #ifdef DEBUG_MODE printf("recved@%ld |%s|\n", time(NULL), str); if(qlen < 1) #else if(qlen < 16) #endif continue; if(num_server == 0) { if(qlen > MAX_QLEN - 1) qlen--;//drop msg break; } if(fork() == 0) { close(fd); return require_ai(i%num_server); } qlen=0; break; } i++; sleep(5); } }
int main() { char lastch = 0, *str; int l, msqid, i; umask(027); msqid = init_bbslogmsq(); if (msqid < 0) return -1; if (fork()) return 0; setsid(); if (fork()) return 0; close(0); close(1); close(2); fd = open(MY_BBS_HOME "/.bbslogd.lock", O_CREAT | O_RDONLY, 0660); if (flock(fd, LOCK_EX | LOCK_NB) < 0) return -1; signal(SIGHUP, set_sync_flag); signal(SIGTERM, write_back_all); fd = open(getfilename(), O_WRONLY | O_CREAT | O_APPEND, 0660); i = 0; while (1) { while ((str = rcvlog(msqid, 1))) { if (filterlog(str)) continue; if (str[0] != lastch) { if (fd >= 0) { write(fd, buf, n); n = 0; i = 0; close(fd); } fd = open(getfilename(), O_WRONLY | O_CREAT | O_APPEND, 0660); lastch = str[0]; } l = strlen(str); if (l > sizeof (buf) - n) { write(fd, buf, n); sync_flag = 0; n = 0; i = 0; } memcpy(buf + n, str, l); n += l; } sleep(1); i++; if (i< 30 && !sync_flag) continue; write(fd, buf, n); n = 0; i = 0; sync_flag = 0; } }