作者BioStar.bbs@micro.bio.ncue.edu.tw (澎湖小雲雀) 看板: plan
標題Re: [文件] 精華區的篇數上限和容量上限
時間擎天崗 (Tue, 08 Jul 2003 23:53:02 +0800 (CST)) Updated: 2005/10/07
(6) 顯示精華區使用量
如果能告訴板主與使用者精華區用了多少......
讓 gem_checksize() 除了檢查精華區是否過大... 還能回報檢查到的大小...
讓他們能隨時注意... 不要在不知覺的情形就超過上限...
: maple/gem.c:gem_totalsize() 新增於 gem_help() 之前
static int
gem_totalsize(xo)
XO *xo;
{
int i, total_n, total_k;
char *ptr, *str, fpath[64];
struct stat st;
struct dirent *de;
DIR *dirp;
if (!(xo->key & GEM_W_BIT))
return XO_NONE;
if (*xo->dir == 'g' && *(xo->dir + 4) == 'b') /* 看板精華區 */
{
strcpy(fpath, xo->dir);
if (!(str = strchr(fpath + 8, '/')))
return XO_NONE;
strcpy(str + 1, fn_dir);
}
else if (*xo->dir == 'u') /* 個人精華區 */
{
usr_fpath(fpath, cuser.userid, "gem/" FN_DIR);
}
else /* (A)nnounce */
{
strcpy(fpath, "gem/.DIR");
}
if (!stat(fpath, &st))
total_n = st.st_size;
else
total_n = 0;
if (!total_n) /* .DIR 開啟失敗或 size=0 表示沒有精華區 */
return 0;
total_k = 0;
ptr = (char *) strchr(fpath, '.');
/* 看板精華區及 (A)nnounce 要檢查 32 個子目錄,
個人精華區只需檢查 1 個子目錄 */
for (i = (*xo->dir == 'g') ? 31 : 0; i >= 0; i--)
{
*ptr = radix32[i];
*(ptr + 1) = '\0';
if (!(dirp = opendir(fpath)))
continue;
*(ptr + 1) = '/';
while (de = readdir(dirp))
{
str = de->d_name;
if (*str <= ' ' || *str == '.')
continue;
strcpy(ptr + 2, str);
if (!stat(fpath, &st))
{
if (*str == 'F')
total_n += st.st_size;
else if (*str == 'A')
total_k += st.st_size;
}
}
closedir(dirp);
}
sprintf(fpath, "精華區檔案數:%d,總大小:%dKB",
total_n / sizeof(HDR), total_k >> 10);
vmsg(fpath);
return XO_FOOT;
}
: maple/gem.c:gem_cb[]
+ 's', gem_totalsize, /* 按鍵自訂 */
'h', gem_help
=======================================================
統計的結果和進入作業系統中用 du 統計的結果不同......
通常 du 統計結果較大......
原因如下 :
1) 記得砍掉精華區的東西時... 檔案並未真實砍掉...
好像只有 unlink 而已... 變成"滄海拾遺"......
只有用 gem-check 才會真的清掉......
2) F 開頭的檔案只列入檔案數目統計......
A 開頭的檔案只列入總大小的計算......
du 是統計所有檔案... 結果就會比較大...
--
| Origin | 彰化師大生物系 吟風‧眺月‧擎天崗 micro.bio.ncue.edu.tw
| Author | 211-20-172-91.HINET-IP.hinet.net精華選讀←離開[主題上]主題下(k)上篇(j)下篇S/a搜尋 G串列 TAB精華 ↑↓捲 Pg/Space翻