回精華區
作者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翻