- 主题:有没有统计已注册用户数的代码?
嗯,我一开始就是每次遍历的,只是因为总觉得这样做太暴力了,也算是个隐性的瓶颈
所以就想写到共享内存。alluser看过的,觉得也和进站时手工遍历差不多的样子
by the way,什么时候会flush啊?update_user的时候会吗?系统在什么时候杀掉那些
生命力为0的ID啊? //3x~~
【 在 atppp (Big Mouse) 的大作中提到: 】
: 对了你在flush_ucache里面更新这个的话,那就只有定时更新。
: 如果你要进站时实时显示当前注册用户数,list.c里面貌似已经有一个allusers()函数了,
: 只不过每次都要遍历比较费罢了...小站就无所谓了...
: ...................
--
FROM 211.151.95.*
原来如此,谢谢~
【 在 etnlegend (etn|若即若离·神话再续) 的大作中提到: 】
: 看看 miscd 的 killd...
--
FROM 211.151.95.*
好像还是有问题
struct UCACHE {
ucache_hashtable hashtable;
ucache_hashtable hashusage;
int hashhead[UCACHE_HASHSIZE + 1];
int next[MAXUSERS];
time_t uptime;
int number;
#ifdef HAVE_CUSTOM_USER_TITLE
char user_title[255][USER_TITLE_LEN]; //定义用户的称号字符串。
#endif
struct userec passwd[MAXUSERS];
int idnumber; //自己加的
};
然后
static void countidnumber(void)
{
int i,idnum=0;
for (i=0;i<MAXUSERS;i++)
if (uidshm->passwd[i].userid[0])
idnum++;
uidshm->idnumber = idnum;
}
int getidnumber(void)
{
int i,fd;
fd = ucache_lock();
i = uidshm->idnumber;
ucache_unlock(fd);
return i;
}
在flush_ucache的return前加上countidnumber();
在load_ucache的ucache_unlock(fd)前加上countidnumber();
然后BBS又上不了了。本地telnet 127.0.0.1显示
Trying 127.0.0.1...
Connected to localhost.flstu.
Escape character is '^]'.
Error! shmget error! key = x.
Connection closed by foreign host.
【 在 cometcaptor (参宿四[☆]一闪一闪亮晶晶) 的大作中提到: 】
: 原来如此,谢谢~
--
FROM 211.151.95.*
我是重启后把bbs目录删掉,然后重新
make clean,make,make install,make install-home然后启动的....
【 在 atppp (Big Mouse) 的大作中提到: 】
: 把所有程序关掉
: 清共享内存
: root执行ipcs确认清干净了 <- 这一步的结果你可以贴上来给大家看看
: ...................
--
FROM 211.151.95.*
我知道我错在哪里了……我把src里的ucache.c改了却傻了吧叽忘了改libBBS里的ucache.c
.....巨寒....
【 在 atppp (Big Mouse) 的大作中提到: 】
: 看error log里面有没有啥东西...
--
FROM 211.151.95.*
好像没有……我把ucache.c覆盖掉libBBS里的就能登录了。
但是我telnet 127.0.0.1会提示我“因为某些系统原因不能注册新账号”
【 在 atppp (Big Mouse) 的大作中提到: 】
: 这两个文件不是符号连接在一起的么。。。
--
FROM 211.151.95.*
好复杂……我先把整个代码打个包重新config和make一下试试
【 在 atppp (Big Mouse) 的大作中提到: 】
: 你daemon/下面的程序有没有重新连接
--
FROM 211.151.95.*
用的是FreeBSD 6.0,但是代码是在win里用Dev-C++改的……可能是这个问题。
【 在 atppp (Big Mouse) 的大作中提到: 】
: 另外你怎么会这两个文件没连在一起的,src/ucache.c就是指向libBBS/ucache.c
: 的符号连接,如果不是的话那就是你系统有毛病了或者你用的编辑器之类的吃屎了
--
FROM 211.151.95.*
把libBBS里的文件复制了一下,终于OK了……谢谢at3p~~~~
【 在 atppp (Big Mouse) 的大作中提到: 】
: daemon/下面的程序是静态连接libBBS/下面的库的,所以你修改了libBBS/下面的文件
: 就需要重新连接daemon/下面的程序
: 特别是miscd是负责new新帐号的
: ...................
--
FROM 211.151.95.*
还有个问题,我如果要在update_user里把idnumber+1是不是也要ucache_lock
【 在 cometcaptor (参宿四[☆]一闪一闪亮晶晶) 的大作中提到: 】
: 把libBBS里的文件复制了一下,终于OK了……谢谢at3p~~~~
--
FROM 211.151.95.*