SetupBBS 板


/*-------------------------------------------------------*/ /* util/account.c ( NTHU CS MapleBBS Ver 2.36 ) */ /*-------------------------------------------------------*/ /* target : 上站人次统计、系统资料备份 */ /* create : 95/03/29 */ /* update : 95/12/15 */ /*-------------------------------------------------------*/ #include "bbs.h" #include <time.h> #include <sys/ipc.h> #include <sys/shm.h> #include "record.c" #define MAX_LINE 16 #define ADJUST_M 6 /* adjust back 5 minutes */ /* Ptt about share memory */ struct UCACHE *uidshm; struct FILMCACHE *ptt; struct FROMCACHE *fcache; static void attach_err(shmkey, name) int shmkey; char *name; { fprintf(stderr, "[%s error] key = %x\n", name, shmkey); exit(1); } static void * attach_shm(shmkey, shmsize) int shmkey, shmsize; { void *shmptr; int shmid; shmid = shmget(shmkey, shmsize, 0); if (shmid < 0) { shmid = shmget(shmkey, shmsize, IPC_CREAT | 0600); if (shmid < 0) attach_err(shmkey, "shmget"); shmptr = (void *) shmat(shmid, NULL, 0); if (shmptr == (void *) -1) attach_err(shmkey, "shmat"); memset(shmptr, 0, shmsize); } else { shmptr = (void *) shmat(shmid, NULL, 0); if (shmptr == (void *) -1) attach_err(shmkey, "shmat"); } return shmptr; } void resolve_ucache() { if (uidshm == NULL) { uidshm = attach_shm(UIDSHM_KEY, sizeof(*uidshm)); } } void reset_garbage() { if (ptt == NULL) { ptt = attach_shm(FILMSHM_KEY, sizeof(*ptt)); if (ptt->touchtime == 0) ptt->touchtime = 1; } ptt->uptime =0; } void resolve_fcache() { if (fcache == NULL) { fcache = attach_shm(FROMSHM_KEY, sizeof(*fcache)); if (fcache->touchtime == 0) fcache->touchtime = 1; } fcache->uptime =0; } void keeplog(fpath, board, title) char *fpath; char *board; char *title; { fileheader fhdr; char genbuf[256]; char *flog; if(!board) board = "Record"; sprintf(genbuf, "boards/%s", board); stampfile(genbuf, &fhdr); f_mv(fpath, genbuf); strcpy(fhdr.title, title); strcpy(fhdr.owner, "[历史的今天]"); sprintf(genbuf, "boards/%s/.DIR", board); rec_add(genbuf, &fhdr, sizeof(fhdr)); } void outs(fp, buf, mode) FILE *fp; char buf[], mode; { static char state = '0'; if (state != mode) fprintf(fp, "%cm", state = mode); if (buf[0]) { fprintf(fp, buf); buf[0] = 0; } } void gzip(source, target, stamp) char *source, *target, *stamp; { char buf[128]; sprintf(buf, "/bin/gzip -9n adm/%s%s", target, stamp); f_mv(source, &buf[14]); system(buf); } main() { int hour, max, item, total, i, j,mo,da,max_user=0,max_login=0,max_reg=0,mahour,k; char *act_file = ".act"; char *log_file = "usies"; char buf[256],buf1[256], *p; FILE *fp,*fp1; int act[27]; /* 次数/累计时间/pointer */ time_t now; struct tm *ptime; chdir(BBSHOME); now = time(NULL) - ADJUST_M * 60; /* back to ancent */ ptime = localtime(&now); memset(act, 0, sizeof(act)); printf("次数/累计时间\n"); if ((ptime->tm_hour != 0) && (fp = fopen(act_file, "r"))) { fread(act, sizeof(act), 1, fp); fclose(fp); } if ((fp = fopen(log_file, "r")) == NULL) { printf("cann't open usies\n"); if (fp = fopen(act_file, "w")) { memset(act, 0, sizeof(act)); fwrite(act, sizeof(act), 1, fp); fclose(fp); } return 1; } if (act[26]) fseek(fp, (off_t)(act[26]), 0); while (fgets(buf, 256, fp)) { hour = atoi(buf + 9); if (hour < 0 || hour > 23) { continue; } if (!strncmp(buf + 22, "ENTER", 5)) { act[hour]++; continue; } if (p = (char *) strstr(buf + 40, "Stay:")) { if (hour = atoi(p + 5)) { act[24] += hour; act[25]++; } continue; } } act[26] = ftell(fp); fclose(fp); for (i = max = total = 0; i < 24; i++) { total += act[i]; if (act[i] > max) { max_user = max = act[i]; mahour = i; } } item = max / MAX_LINE + 1; if (!ptime->tm_hour) keeplog("etc/today", "Record", "[尘埃纪录] 上站人次统计"); if ((fp = fopen("etc/today", "w")) == NULL) { printf("cann't open etc/today\n"); return 1; } fprintf(fp, "\t\t\tm3;46m 每小时上站人次统计 [%02d/%02d/%02d] 0m\n\n", ptime->tm_year % 100, ptime->tm_mon + 1, ptime->tm_mday); for (i = MAX_LINE + 1; i > 0; i--) { strcpy(buf, " "); for (j = 0; j < 24; j++) { max = item * i; hour = act[j]; if (hour && (max > hour) && (max - item <= hour)) { outs(fp, buf, '7'); fprintf(fp, "%-3d", hour); } else if (max <= hour) { outs(fp, buf, '6'); fprintf(fp, "█ "); } else strcat(buf, " "); } fprintf(fp, "\n"); } fprintf(fp, " 3m" "0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23\n\n" "\t3m总共上站人次:7m%-9d3m平均使用人数:7m%-5d3m平均使用时间:7m %d 3m分m \n" ,total, total/24,act[24]/act[25]+1); fclose(fp); if (fp = fopen(act_file, "w")) { fwrite(act, sizeof(act), 1, fp); fclose(fp); } /* -------------------------------------------------------------- */ sprintf(buf, "-%02d%02d%02d", ptime->tm_year % 100, ptime->tm_mon + 1, ptime->tm_mday); now += ADJUST_M * 60; /* back to future */ /* Ptt 历史事件处理 */ if(fp = fopen("etc/history.data","r")) { /*最多同时上线*/ if(fscanf(fp,"%d %d %d %d",&max_login,&max,&max_reg,&k)) { int a; resolve_fcache(); printf("此时段最多同时上线:%d 过去:%d",a=fcache->max_user,k); // fclose(fp); if(a > k) { time_t now = time(0); ptime=localtime(&fcache->max_time); // ptime=localtime(&now); if(fp1=fopen("etc/history", "a")) { fprintf(fp1, "◎ 【%02d/%02d/%02d %02d:%02d】" "2m同时在站内人数m首次达到 ;36m%dm 人次\n", ptime->tm_mon+1, ptime->tm_mday, ptime->tm_year % 100, ptime->tm_hour,ptime->tm_min,a); fclose(fp1); } fclose(fp); // 如果 a < k,那会关档两次, 所以移到这边 hialan if(fp=fopen("etc/history.data","w")) { fprintf(fp,"%d %d %d %d",max_login,max,max_reg,a); } } } fclose(fp); } ptime = localtime(&now); if(ptime->tm_hour) { printf("多个节日处理\n"); /* Ptt 多个节日处理 */ if(fp1 = fopen("etc/today_is","r")); { char tod[20][100]; for(i=0;fgets(tod[i],20,fp1) && i<100;i++); fclose(fp1); fp1 = fopen("etc/today_is","w"); for(j=1;j<=i;j++) { fputs(tod[j%i],fp1); } fclose(fp1); } /* Ptt reset Ptt's share memory */ reset_garbage(); } if(!ptime->tm_hour) { keeplog(BBSHOME"/.note", "Record", "[尘埃纪录] 心情留言版"); keeplog(BBSHOME"/log/GNP","Record","[金融中心] 生产毛额统计"); keeplog(BBSHOME"/log/counter/上站人次","Record","[系统报告] 本日人数计数器"); keeplog("usies", "Security", "[系统报告] 使用者上线纪录"); keeplog("usboard", "Security", "[系统报告] 看板使用纪录"); keeplog(BBSHOME"/log/article_score.log", "Security", "[系统报告] 文章评分纪录"); keeplog(BBSHOME"/log/bighome", "Security", "[系统报告] 超过 500K 的 userhome"); keeplog(BBSHOME"/log/bigboard", "Security", "[系统报告] 超过 3000K 的 board"); keeplog(BBSHOME"/log/board.log", "Record", "[系统报告] 看板使用纪录"); keeplog(BBSHOME"/log/personal.log", "Record", "[系统报告] 个人板使用纪录"); keeplog(BBSHOME"/log/admin.log", "Security","[系统报告] 今日系统纪录"); keeplog(BBSHOME"/log/func.log", "Security","[系统报告] 今日功\能使用纪录"); keeplog(BBSHOME"/log/bm_check", "Record","[系统报告] 板主到站纪录"); keeplog(BBSHOME"/log/bank.log", "Security","[金融中心] 金钱流动纪录"); keeplog(BBSHOME"/log/board_edit", "Security","[系统报告] 看板更动纪录"); system("rm -f log/dlog"); // gzip("usies", "usies", buf); system("/bin/cp etc/today etc/yesterday"); /*每日上站人数归零*/ system("/bin/cp -f ~log/counter/上站人次.new ~/log/counter/上站人次"); system("rm -f note.dat"); gzip(log_file, "usies", buf); /* Ptt 历史事件处理 */ now = time(NULL) - ADJUST_M * 60; /* back to ancent */ ptime = localtime(&now); resolve_ucache(); if(fp = fopen("etc/history.data","r")) { /* 单日最多次人次,同时上线,注册*/ if(fscanf(fp,"%d %d %d %d",&max_login,&max,&max_reg,&k)) { fp1 = fopen("etc/history","r+"); fseek(fp1,(off_t)0,2); if ( max_user > max ) { fprintf(fp1,"◇ 【%02d/%02d/%02d %02d】 " ";32m单一小时上线人次m首次达到 ;35m%dm 人次 \n" ,ptime->tm_mon+1,ptime->tm_mday,ptime->tm_year % 100,mahour,max_user); max = max_user; } if ( total > max_login ) { fprintf(fp1,"◆ 【%02d/%02d/%02d】 " ";32m单日上线人次m首次达到;33m %dm 人次 \n" ,ptime->tm_mon+1,ptime->tm_mday,ptime->tm_year % 100,total); max_login = total; } if ( uidshm->number > max_reg + max_reg/10) { fprintf(fp1,"★ 【%02d/%02d/%02d】 " ";32m总注册人数m提升到;31m %dm 人 \n" ,ptime->tm_mon+1,ptime->tm_mday,ptime->tm_year % 100,uidshm->number); max_reg = uidshm->number; } fclose(fp1); } fclose(fp); fp = fopen("etc/history.data","w"); fprintf(fp,"%d %d %d %d",max_login,max,max_reg,k); fclose(fp); } now += ADJUST_M * 60; /* back to future */ ptime = localtime(&now); /* Ptt 节日处理 */ i=0; if(fp1 = fopen("etc/today_is","w")) { if(fp = fopen("etc/feast","r")) { while (fscanf(fp,"%d %d %s\n",&mo,&da,buf1) != EOF) { if(ptime->tm_mday == da && ptime->tm_mon + 1 == mo) { i =1; fprintf(fp1,"%-14s\n",buf1); } } fclose(fp); } if(i==0) { if(fp = fopen("etc/today_boring","r")) { while (fgets(buf1,250,fp)) { if(strlen(buf)>3) { buf1[strlen(buf1)-1]=0; fprintf(fp1,"%-14s\n",buf1); } } fclose(fp); } else { fprintf(fp1,"本日节日徵求中"); } } fclose(fp1); } /* Ptt 欢迎画面处理 */ /* if(fp = fopen("etc/Welcome.date","r")) { char temp[50]; while (fscanf(fp,"%d %d %s\n",&mo,&da,buf1) != EOF) { if(ptime->tm_mday == da && ptime->tm_mon + 1 == mo) { strcpy(temp,buf1); sprintf(buf1,"cp -f etc/Welcomes/%s etc/Welcome",temp); system(buf1); break; } } fclose(fp); } */ if (ptime->tm_wday == 0) { keeplog("log/week", "Record", "[尘埃纪录] 本周热门话题"); keeplog("log/trade.log", "Record","[金融中心] 商品贩卖状况"); keeplog("log/race.log", "LocalGame","[游乐场] 本周赛马纪录"); keeplog("log/pip.log", "LocalGame","[游乐场] 本周电子鸡饲养纪录"); keeplog("log/bingo.log", "LocalGame","[游乐场] 本周宾果纪录"); keeplog("log/stock.log", "LocalGame","[游乐场] 本周股市纪录"); keeplog("log/gp.log", "LocalGame","[游乐场] 本周金扑克纪录"); keeplog("log/dice.log", "LocalGame","[游乐场] 本周西八拉纪录"); keeplog("log/marie.log", "LocalGame","[游乐场] 本周小玛丽纪录"); keeplog("log/nine.log", "LocalGame","[游乐场] 本周九九纪录"); keeplog("log/ab.log", "LocalGame","[游乐场] 本周猜数字纪录"); keeplog("log/bj.log", "LocalGame","[游乐场] 本周黑杰克纪录"); keeplog("log/chessmj.log", "LocalGame","[游乐场] 本周象棋麻将纪录"); keeplog("log/seven.log", "LocalGame","[游乐场] 本周赌城七张纪录"); gzip("bbslog", "bntplink", buf); gzip("innd/bbslog", "innbbsd", buf); gzip("log/bbsmail.log", "mailog", buf); } if (ptime->tm_mday == 1) { keeplog("log/month", "Record", "[尘埃纪录] 本月热门话题"); keeplog("log/topboard", "Record", "[尘埃纪录] 本月看板排行"); keeplog("log/toppersonal", "Record", "[尘埃纪录] 本月个人板排行"); } if (ptime->tm_yday == 1) keeplog("log/year", "Record", "[尘埃纪录] 年度热门话题"); } else if (ptime->tm_hour == 3 && ptime->tm_wday == 6) { char *fn1 = "tmp"; char *fn2 = "suicide"; f_mv(fn1, fn2); mkdir(fn1, 0755); sprintf(buf, "/bin/gtar cfz adm/%s-%02d%02d%02d.tgz %s", fn2, ptime->tm_year % 100, ptime->tm_mon + 1, ptime->tm_mday, fn2); system(buf); sprintf(buf, "/bin/rm -fr %s", fn2); system(buf); } } -- (wuliwala.twbbs.org) 打从(61-216-179-100.dynamic.hinet.net)来po这篇文章 █…拥挤的乐园…█▇▆▅▄▃▂▁▁ 你 最 美 丽 的 邂 逅







like.gif 您可能会有兴趣的文章
icon.png[问题/行为] 猫晚上进房间会不会有憋尿问题
icon.pngRe: [闲聊] 选了错误的女孩成为魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一张
icon.png[心得] EMS高领长版毛衣.墨小楼MC1002
icon.png[分享] 丹龙隔热纸GE55+33+22
icon.png[问题] 清洗洗衣机
icon.png[寻物] 窗台下的空间
icon.png[闲聊] 双极の女神1 木魔爵
icon.png[售车] 新竹 1997 march 1297cc 白色 四门
icon.png[讨论] 能从照片感受到摄影者心情吗
icon.png[狂贺] 贺贺贺贺 贺!岛村卯月!总选举NO.1
icon.png[难过] 羡慕白皮肤的女生
icon.png阅读文章
icon.png[黑特]
icon.png[问题] SBK S1安装於安全帽位置
icon.png[分享] 旧woo100绝版开箱!!
icon.pngRe: [无言] 关於小包卫生纸
icon.png[开箱] E5-2683V3 RX480Strix 快睿C1 简单测试
icon.png[心得] 苍の海贼龙 地狱 执行者16PT
icon.png[售车] 1999年Virage iO 1.8EXi
icon.png[心得] 挑战33 LV10 狮子座pt solo
icon.png[闲聊] 手把手教你不被桶之新手主购教学
icon.png[分享] Civic Type R 量产版官方照无预警流出
icon.png[售车] Golf 4 2.0 银色 自排
icon.png[出售] Graco提篮汽座(有底座)2000元诚可议
icon.png[问题] 请问补牙材质掉了还能再补吗?(台中半年内
icon.png[问题] 44th 单曲 生写竟然都给重复的啊啊!
icon.png[心得] 华南红卡/icash 核卡
icon.png[问题] 拔牙矫正这样正常吗
icon.png[赠送] 老莫高业 初业 102年版
icon.png[情报] 三大行动支付 本季掀战火
icon.png[宝宝] 博客来Amos水蜡笔5/1特价五折
icon.pngRe: [心得] 新鲜人一些面试分享
icon.png[心得] 苍の海贼龙 地狱 麒麟25PT
icon.pngRe: [闲聊] (君の名は。雷慎入) 君名二创漫画翻译
icon.pngRe: [闲聊] OGN中场影片:失踪人口局 (英文字幕)
icon.png[问题] 台湾大哥大4G讯号差
icon.png[出售] [全国]全新千寻侘草LED灯, 水草
伺服器连线错误,造成您的不便还请多多包涵!
「赞助商连结」






like.gif 您可能会有兴趣的文章
icon.png[问题/行为] 猫晚上进房间会不会有憋尿问题
icon.pngRe: [闲聊] 选了错误的女孩成为魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一张
icon.png[心得] EMS高领长版毛衣.墨小楼MC1002
icon.png[分享] 丹龙隔热纸GE55+33+22
icon.png[问题] 清洗洗衣机
icon.png[寻物] 窗台下的空间
icon.png[闲聊] 双极の女神1 木魔爵
icon.png[售车] 新竹 1997 march 1297cc 白色 四门
icon.png[讨论] 能从照片感受到摄影者心情吗
icon.png[狂贺] 贺贺贺贺 贺!岛村卯月!总选举NO.1
icon.png[难过] 羡慕白皮肤的女生
icon.png阅读文章
icon.png[黑特]
icon.png[问题] SBK S1安装於安全帽位置
icon.png[分享] 旧woo100绝版开箱!!
icon.pngRe: [无言] 关於小包卫生纸
icon.png[开箱] E5-2683V3 RX480Strix 快睿C1 简单测试
icon.png[心得] 苍の海贼龙 地狱 执行者16PT
icon.png[售车] 1999年Virage iO 1.8EXi
icon.png[心得] 挑战33 LV10 狮子座pt solo
icon.png[闲聊] 手把手教你不被桶之新手主购教学
icon.png[分享] Civic Type R 量产版官方照无预警流出
icon.png[售车] Golf 4 2.0 银色 自排
icon.png[出售] Graco提篮汽座(有底座)2000元诚可议
icon.png[问题] 请问补牙材质掉了还能再补吗?(台中半年内
icon.png[问题] 44th 单曲 生写竟然都给重复的啊啊!
icon.png[心得] 华南红卡/icash 核卡
icon.png[问题] 拔牙矫正这样正常吗
icon.png[赠送] 老莫高业 初业 102年版
icon.png[情报] 三大行动支付 本季掀战火
icon.png[宝宝] 博客来Amos水蜡笔5/1特价五折
icon.pngRe: [心得] 新鲜人一些面试分享
icon.png[心得] 苍の海贼龙 地狱 麒麟25PT
icon.pngRe: [闲聊] (君の名は。雷慎入) 君名二创漫画翻译
icon.pngRe: [闲聊] OGN中场影片:失踪人口局 (英文字幕)
icon.png[问题] 台湾大哥大4G讯号差
icon.png[出售] [全国]全新千寻侘草LED灯, 水草

请输入看板名称,例如:Boy-Girl站内搜寻

TOP