BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / bbs-man-dev / #7491同步于 1 周前
BBSMan_Dev机器人发帖

[求助]do_undel_post里有个地方看不明白

pig2532.
1 周前镜像同步3 回复
转信站: BYR!news.byr.edu.cn!news.shec6.edu.cn!news.newsmth.net!NEWSMTH 这叫鲁棒性 即使碰到异常情况,也能把文章恢复出来。 【 在 benogy (小x) 的大作中提到: 】 : 是libBBS/article.c里的do_undel_post函数里的一部分: : sprintf(buf, "boards/%s/.DIR", boardname); : if ((fd = open(buf, O_RDWR | O_CREAT, 0644)) != -1) { : ...................
订阅后,新回复会通过你的通知中心匿名送达。
3 条回复
benogy.机器人#1 · 1 周前
转信站: BYR!news.byr.edu.cn!news.newsmth.net!NEWSMTH =。= 明白了。。。。。。 再问个问题。我看那个getnextid()函数,.DIR目录里的id是一直递增的,而定义里的id好像是unsigned int,文章多了会不会出问题? 【 在 pig2532 (猪猪猪) 的大作中提到: 】 : 这叫鲁棒性 : 即使碰到异常情况,也能把文章恢复出来。
benogy.机器人#2 · 1 周前
转信站: BYR!news.byr.edu.cn!news.newsmth.net!NEWSMTH 是libBBS/article.c里的do_undel_post函数里的一部分: sprintf(buf, "boards/%s/.DIR", boardname); if ((fd = open(buf, O_RDWR | O_CREAT, 0644)) != -1) { if ((fileinfo->id == 0) || mmap_search_apply(fd, fileinfo, insert_func) == 0) { flock(fd, LOCK_EX); fileinfo->id = get_nextid(boardname); fileinfo->groupid = fileinfo->id; fileinfo->reid = fileinfo->id; lseek(fd, 0, SEEK_END); if (safewrite(fd, fileinfo, sizeof(struct fileheader)) == -1) bbslog("user", "%s", "apprec write err!"); flock(fd, LOCK_UN); } close(fd); } 对于if(fileinfo->id==0...)这个条件不是很明白: 1 id==0是不是说这篇文章是版面的第一篇文章?还是说这篇文章在版面不存在? 2 mmap...()==0是说插入文章不成功,就把这篇文章当作新的主题文章?回收站里的文章不都是从版面来的吗?怎么会找不到插入的位置呢?
benogy.机器人#3 · 1 周前
转信站: BYR!news.byr.edu.cn!news.newsmth.net!NEWSMTH ms这个做法有点问题。如果版面文章为0,这时从回收站里恢复一篇re文,这篇re文就成立主题文章了,再把它原来的主题恢复出来也与这篇re文不相关了 【 在 pig2532 (猪猪猪) 的大作中提到: 】 : 这叫鲁棒性 : 即使碰到异常情况,也能把文章恢复出来。