荔园在线

荔园之美,在春之萌芽,在夏之绽放,在秋之收获,在冬之沉淀

[回到开始] [上一篇][下一篇]


发信人: 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软件 网络书店