Henry's Notebook
Many strange things
搜索
菜单
导航
首页
最近更改
随机页面
帮助
Henry's Home
个人资料
个人资料
创建账户
登录
消息
目前您没有通知。请访问您的
讨论页
以查看过去消息。
页面工具
内容页面
讨论
查看源代码
历史
首页
»
页面s
查看“BBS 会话信息”的源代码
←
BBS 会话信息
页面上次由
HenryHu
编辑于12年前
因为以下原因,您没有权限编辑本页:
您所请求的操作仅限于该用户组的用户使用:emailconfirmed
您可以查看与复制此页面的源代码。
BBS的用户相关的东西。这块非常复杂,分成好几个部分。 == UTMP == === UTMPHEAD === <source lang="c"> struct UTMPHEAD { int next[USHM_SIZE]; int hashhead[UTMP_HASHSIZE + 1]; /* use UCACHE_HASHSIZE/32 */ int number; int listhead; int list_prev[USHM_SIZE]; /* sorted list prev ptr */ int list_next[USHM_SIZE]; /* sorted list next ptr */ time_t uptime; }; static struct UTMPHEAD *utmphead; </source> utmphead其实指向一块shared memory,key = UTMP_SHMKEY UTMPHEAD结构/数据由UtmpHead类处理,全都为GetXXX/SetXXX形式。 == utmp.c == ; get_utmpshm_addr() * Utmp.utmpshm ; longlock [(int signo)] * inside Utmp.Lock() ; utmp_lock * Utmp.Lock() ; utmp_unlock [(int fd)] * Utmp.Unlock() ; utmp_setreadonly [(int readonly)] * UtmpHead.SetReadOnly() ; detach_utmp 仅在WWW中使用。 ; resolve_utmp * Utmp.Init() ; utmp_hash [(const char *userid)] * Utmp.Hash() logloop ; getnewutmpent [(struct user_info *up)] * Utmp.GetNewUtmpEntry() ; getnewutmpent2 [(struct user_info *up)] 仅在WWW中使用。 rebuild_list [(struct user_info *up, char *arg, int p)] apply_ulist [(APPLY_UTMP_FUNC fptr, void *arg)] apply_ulist_addr [(APPLY_UTMP_FUNC fptr, void *arg)] apply_utmpuid [(APPLY_UTMP_FUNC fptr, int uid, void *arg)] apply_utmp [(APPLY_UTMP_FUNC fptr, int maxcount,const char *userid, void *arg)] search_ulist [(struct user_info *uentp, int (*fptr) (int, struct user_info *), int farg)] ; clear_utmp2 [(int uent)] * Utmp.Clear() clear_utmp [(int uent, int useridx, int pid)] ; get_utmp_number * UtmpHead.GetNumber() get_utmpent [(int utmpnum)] get_utmpent_num [(struct user_info *uent)] cmpfuid [(const void*a,const void*b)] getfriendstr [(struct userec* user,struct user_info* puinfo)] myfriend [(int uid, char *fexp)] hisfriend [(int uid,struct user_info* him)] == ucache.c == ; ucache_lock ; ucache_unlock [(int fd)] ucache_hashinit ucache_hash_deep [(const char *userid)] ucache_hash [(const char *userid)] fillucache [(struct userec *uentp, int *number, int *prev)] flush_ucache load_ucache ; resolve_ucache * UCache.Init() detach_ucache getuserid [(char *userid, int uid)] setuserid_internal [(int num, const char *userid)] setuserid2 [(int num, const char *userid)] setuserid [(int num, const char *userid)] searchnewuser ; searchuser [(const char *userid)] * UCache.SearchUser() ; getuser [(const char *userid, struct userec **user)] * UCache.GetUser() getuserid2 [(int uid)] u_namearray [(char buf[][IDLEN + 1], int *pnum, char *tag)] getnewuserid3 [(char *userid)] getnewuserid2 [(char *userid)] ; getuserbynum [(int num)] * UCache.GetUserByUid() getnewuserid [(char *userid)] update_user [(struct userec *user, int num, int all)] apply_users [(int (*fptr) (struct userec *, char *), char *arg)] get_giveupinfo [(char* userid,int* basicperm,int s[10][2])] save_giveupinfo [(struct userec* lookupuser,int lcount,int s[10][2])] setcachehomefile [(char* path,const char* user,int unum,char* file)] init_cachedata [(const char* userid,int unum)] flush_cachedata [(const char* userid)] clean_cachedata [(const char* userid,int unum)] do_after_login [(struct userec* user,int unum,int mode)] do_after_logout [(struct userec* user,struct user_info* userinfo,int unum,int mode)] === 自定义User Title相关 === load_user_title flush_user_title get_user_title [(unsigned char titleidx)] set_user_title [(unsigned char titleidx,char* newtitle)] === WWW相关 === longlock [(int signo)] www_guest_lock www_guest_unlock [(int fd)] resolve_guest_table
返回至
BBS 会话信息
。