Re: account.c 的上站人次統計問題

看板Maple (BBS架站)作者時間22年前 (2002/10/12 18:47), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串1/2 (看更多)
小弟的bbs是20000606snap 照著這篇修改 執行 /home/bbs/bin/account 時 他會出現 can not open [run/tmp] 有 touch tmp 不過情況還是一樣耶 還要修正那些地方呀 麻煩各位大大指點一下囉 ※ 引述《jasonwu (黑暗之狐)》之銘言: > ※ 引述《jasonwu (黑暗之狐)》之銘言: > > 有個小小的bug,不知道之前有沒有人提過? > > 簡而言之, > > 如果你架的 bbs 站很不幸地在 23:00 - 23:59 之間都沒人上站, > > 那你今天一整天的上站人次記錄就不會在sysop板上出現了。 > > 為解決這個小問題,我多加了如下的code: > > rename(run_file, tmp_file); > > if ((fp = fopen(tmp_file, "r")) == NULL) > > { > > /* jasonwu 20010508 : 如果目前是午夜 0 點 x 分,要記得先keeplog */ > > if (!ptime.tm_hour) > > keeplog(fn_today, NULL, "[記錄] 上站人次統計", 1); > > error(tmp_file); > > } > > if ((fpw = fopen(log_file, "a")) == NULL) > > error(log_file); > > 若有問題請大家多多指正... 謝謝... :) > 真抱歉...其實小弟發現僅這樣改並不夠, > 還是有其它問題要解決。 > 因為後面還是有一些動作應該是要每個小時都得做檢查和處理的, > 比如把一整天人次統計的檔案(@-act)換成另一個檔名(@=act)當作是昨日人次統計。 > 另外還有 @-act 這檔案理論上應該是要一個小時就一定得更新一次, > 然而實際上並沒有... 等...。 > 如果一個個把這些動作通通加在我原文加的code之下, > 顯然不是一個有效率的方法。 > 事實上,從那段code的角度上去看, > 我們可以發現 fopen(tmp_file) 的動作只是為了在一個迴圈中去計算act[]的新數值> 沒有tmp_file,act[]數值當然不會變動。 > 而act[]就是從午夜十二點開始算起到現在的各時段統計人數, > 它會在開始就由底下幾行敘述取得資料: > memset(act, 0, sizeof(act)); /* 初始化 act 陣列裡的資料皆為 0 */ > fact = open(act_file, O_RDWR | O_CREAT, 0600); > if (fact < 0) > error(act_file); > /* 不是午夜(00:xx)的話就去讀 run/var/act */ > /* 不然的話 act 的值都將會是 0 */ > if (ptime.tm_hour != 0) > { > read(fact, act, sizeof(act)); > lseek(fact, 0, SEEK_SET); > } > 所以我們可以這麼想: > 『如果 tmp_file 不存在,那就沒必要讓其去跑計算act[]的迴圈』 > 所以我們可以捨棄我原先post的做法, > 改成多加如下的code:(以黃色表示多加的內容) > ... > ... > int tmp_exist_flag; /* jasonwu 20010509:指示tmp_file是否存在的旗標 */ > ... > ... > rename(run_file, tmp_file); > if ((fp = fopen(tmp_file, "r")) == NULL) > tmp_exist_flag = 0; /* jasonwu 20010509: 設定旗標表示tmp_file並不存在 */ > else > tmp_exist_flag = 1; /* jaosnwu 20010509: 設定旗標表示tmp_file存在 */ > ... > ... > /* jasonwu 20010509 : 修正在午夜執行時tmp_file不存在的問題 */ > if(tmp_exist_flag == 1) /* tmp_file存在,才會去統計過去一小時來上站人次 */ > { > while (fgets(buf, sizeof(buf), fp)) > { > fputs(buf, fpw); > if (!memcmp(buf + 22, "ENTER", 5)) > { > hour = atoi(buf + 9); > if (hour >= 0 && hour <= 23) > act[hour]++; > continue; > } > if (!memcmp(buf + 41, "Stay:", 5)) > { > if (hour = atoi(buf + 47)) > { > act[24] += hour; > act[25]++; > } > continue; > } > } > fclose(fp); > unlink(tmp_file); > } /*別忘了右括號 */ > fclose(fpw); > 若還有問題請大家指正...謝謝... :) 引 言 過 多 ! . . . . . . . . . . . -- ※ Origin: 楓橋驛站<bbs.cs.nthu.edu.tw> ◆ From: 229047.D18-229.ncu.edu.tw
文章代碼(AID): #zf_sb00 (Maple)
文章代碼(AID): #zf_sb00 (Maple)