荔园在线
荔园之美,在春之萌芽,在夏之绽放,在秋之收获,在冬之沉淀
[回到开始]
[上一篇][下一篇]
发信人: yanglc@bbs.pku.edu.cn (终于来暖气了~~人生就剩这么点追求了), 信区:
InstallBBS
标 题: 合并两个版面的程序
发信站: 北大未名站 (Thu Nov 7 22:02:08 2002)
转信站: SZU!news.tiaozhan.com!news.happynet.org!PKU
用法:merge oldbrd newbrd
将oldbrd合并到newbrd中,名称区分大小写
比如 merge sysop syssecurity,将sysop的文章合并到syssecurity
#include "bbs.h"
int dashf(char *fname){
struct stat st;
return(stat(fname, &st) == 0 && S_ISREG(st.st_mode));
}
void merge(char *brd1, char *brd2, char *fname){
int fdr, fdw, size, now;
char buf[STRLEN], buf2[STRLEN];
struct fileheader fh;
size = sizeof(struct fileheader);
sprintf(buf, "%s/boards/%s/%s", BBSHOME, brd1, fname);
fdr = open(buf, O_RDONLY);
sprintf(buf, "%s/boards/%s/%s", BBSHOME, brd2, fname);
fdw = open(buf, O_WRONLY | O_CREAT, 0644);
if(fdr == -1 || fdw == -1)
return;
flock(fdw, LOCK_EX);
lseek(fdw, 0, SEEK_END);
while(read(fdr, &fh, size) == size){
now = atoi(fh.filename + 2);
do{
buf[0] = fh.filename[0];
buf[1] = '\0';
sprintf(buf2, "%s.%d.A", buf, now);
sprintf(buf, "%s/boards/%s/%s", BBSHOME, brd2, buf2);
now++;
}while(dashf(buf));
sprintf(buf2, "%s/boards/%s/%s", BBSHOME, brd1, fh.filename);
link(buf2, buf);
buf[0] = fh.filename[0];
buf[1] = '\0';
sprintf(fh.filename, "%s.%d.A", buf, now - 1);
write(fdw, &fh, size);
}
flock(fdw, LOCK_UN);
close(fdw);
close(fdr);
}
main(int argc, char **argv){
merge(argv[1], argv[2], ".DIR");
merge(argv[1], argv[2], ".DIGEST");
merge(argv[1], argv[2], ".DELETEDDIR");
//这里视实际情况添加或者删除
}
--
__ __ _ ___ __ ____ ___ ____
(_ \/ _) /O\ ( \ ) / __)_( ) / __)
\ / _/ _ \_ | \ | ( (_/ _)| |__( (__
(__) (__/ \__)(__|\__) \____/ (_____)\____)
※ 来源:·北大未名站 bbs.pku.edu.cn·[FROM: 162.105.67.39]
[回到开始]
[上一篇][下一篇]
荔园在线首页 友情链接:深圳大学 深大招生 荔园晨风BBS S-Term软件 网络书店