看板SetupBBS
标 题[转载] FB 自动程式
发信站高科大亚太之星BBS站 (Mon Feb 23 10:59:56 2004)
转信站ptt!ctu-reader!ctu-peer!Spring!news.nctu!news.nsysu!NKFUST
【 以下文字转载自 sysop 讨论区 】
【 原文由 klt 所发表 】
/*----------------------------------------------------------*/
/* autogem.c */
/*----------------------------------------------------------*/
/* target : FB diary版面文章自动送进 */
/* create : 04/02/23 */
/* update : / / */
/* author :
[email protected] */
/*----------------------------------------------------------*/
/* 说明:使用前需手动建立 里的a-z的目录(大小写不拘),
若目录已存在则不需建立。兹因功力不强,程式杂乱无章,
请见谅。
http://mis.nkfust.edu.tw/u8924355/autogem.c */
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdio.h>
#include <string.h>
#define FB "/home/fb"
#define PATHLEN 256
char fn_search[]="/.Search";
struct dirstr
{
char art[80];
char postman[80];
char title[96];
};
main()
{
int inf,i,newname,upname,has,test;
FILE *fn,*fm,*fi,*fo,*fl,*fp,*fq;
char tmp[PATHLEN],tmp2[PATHLEN],buf6[PATHLEN],buf5[PATHLEN],buf4[PATHLEN],buf
[PATHLEN],buf2[PATHLEN],buf3[PATHLEN],dpath[PATHLEN],fpath[PATHLEN],buf7[PATHLE
N];
struct dirstr writer;
sprintf(buf,"%s/0Announce%s", FB, fn_search); /* get dpath */
if((fn=fopen(buf,"r")) != NULL){
while (fgets(buf,sizeof(buf), fn) != NULL){
if (!strncmp(buf,"diary",5)){
strncpy(buf,buf+7,sizeof(buf));
sprintf(fpath,"%s/0Announce/%s",FB,buf);
snprintf(dpath,strlen(fpath),fpath);}} }
fclose(fn);
/* dpath means the /home/fb/boards/diary in real path */
sprintf(fpath,"");
sprintf(fpath,"%s/boards/diary/.DIR",FB); /* get fpath */
inf=open(fpath,O_RDONLY);
if (inf == -1){
printf("error open /boards/diary/.DIR file\n");
exit(1);}
/* Read the .DIR file */
while (read(inf, &writer,sizeof(writer))==sizeof(writer))
{
sprintf(buf,"%s/.Names",dpath);
fn=fopen(buf,"r");/* buf means the /home/fb/0Announce/groups/GROUP_7/diary/.N
ames file */
if (fn == NULL){
printf("error open 1st /groups/GROUP_7/diary/.Names file\n");
exit(1);}
while(fgets(tmp,sizeof(tmp),fn)!=NULL){
if(!strncmp(tmp,"Name=",5)){
if(writer.postman[0]==tolower(tmp[5]) || writer.postman[0]==toupper(tmp[5])
){
fgets(tmp,sizeof(tmp),fn);
snprintf(buf3,strlen(tmp),tmp);
snprintf(buf3,strlen(buf3),buf3+6);}} }
fclose(fn);
sprintf(buf2,"%s%s/.Names",dpath,buf3);/* buf2 diary/D11/.Names */
fq=fopen(buf2,"r");
if (fq == NULL){
printf("error 2nd open groups/GROUP_7/diary/D11/.Names file\n");
exit(1);}
upname=0;
newname=0;
has=0;
while(fgets(tmp2,sizeof(tmp2),fq)!=NULL){
if(!strncmp(tmp2,"Name=",5)){
upname=1; }
snprintf(tmp2,strlen(writer.postman)+1,tmp2+5);
if(!strcmp(tmp2,writer.postman)){
has=1; }}
fclose(fq);
if(!upname||!has)
{
newname=1;
sprintf(buf7,"/D%X",time(0)+getpid()+getppid()+rand());
sprintf(buf4, "%s%s%s",dpath,buf3,buf7);
mkdir(buf4,0755);
sprintf(buf4, "%s%s/.Names",dpath,buf3);
fp=fopen(buf4,"r");
if (fp == NULL){
printf("error open /D11/.Names file\n");
exit(1);}
i=1;
while(fgets(buf4,sizeof(buf4),fp)!=NULL){
if(!strncmp(buf4,"Numb=",5)){
i++;}}
fclose(fp);
sprintf(buf4, "%s%s/.Names",dpath,buf3);
fp=fopen(buf4,"a");
if (fp == NULL){
printf("error open /D11/.Names file\n");
exit(1);}
fprintf(fp,"Name=%s\n",writer.postman);
fprintf(fp,"Path=~%s\n",buf7);
fprintf(fp,"Numb=%d\n",i);
fprintf(fp,"#\n");
fclose(fp);
sprintf(buf4, "%s%s%s/.Names",dpath,buf3,buf7);
fp=fopen(buf4,"w");
if (fp == NULL){
printf("error write /D11/DAA/.Names file\n");
exit(1);}
fprintf(fp,"#\n");
fprintf(fp,"# Title=%-38s\n",writer.postman);
fprintf(fp,"#\n");
fclose(fp);
strcpy(buf4,buf7);
upname=1;
}
fm=fopen(buf2,"r");
if (fm == NULL){
printf("error 2nd open groups/GROUP_7/diary/D11/.Names file\n");
exit(1);}
while(fgets(tmp2,sizeof(tmp2),fm)!=NULL)
{
if(!strncmp(tmp2,"Name=",5)&&upname)
{
snprintf(tmp2,strlen(writer.postman)+1,tmp2+5);
if(!strcmp(writer.postman,tmp2))
{
fgets(tmp2,sizeof(tmp2),fm);
if(!newname){
snprintf(buf7,strlen(tmp2),tmp2);
snprintf(buf4,strlen(buf7),buf7+6);}
sprintf(buf2,"%s%s%s/.Names",dpath,buf3,buf4);
sprintf(buf5,"%s/boards/diary/%s",FB,writer.art);
sprintf(buf6,"%s%s%s/%s",dpath,buf3,buf4,writer.art);
fi=fopen(buf5,"r");
if(fi==NULL){
printf("Open posted file for read error!\n");
exit(1);}
fo=fopen(buf6,"w");
if(fo==NULL){
printf("Open posted file for write error!\n");
exit(1);}
while(fgets(buf5,sizeof(buf5),fi)!=NULL){
fputs(buf5,fo);}
fclose(fo);
fclose(fi);
sprintf(buf5,"%s/boards/diary/%s",FB,writer.art);
fi=fopen(buf5,"a");
if(fi==NULL){
printf("Open posted file for del error!\n");
exit(1);}
remove(buf5);
fclose(fi);
fl=fopen(buf2,"r");
if(fl==NULL){
printf("Open .Names for read numb error");}
i=1;
while(fgets(buf2,sizeof(buf2),fl)!=NULL){
if(!strncmp(buf2,"Numb=",5)){
i++;}}
fclose(fl);
sprintf(buf2,"%s%s%s/.Names",dpath,buf3,buf4);
fl=fopen(buf2,"a");
if(fl==NULL){
printf("Open /D/D/.Names for write new data error");
exit(1);}
fprintf(fl,"Name=%s\n",writer.title);
fprintf(fl,"Path=~/%s\n",writer.art);
fprintf(fl,"Numb=%d\n",i);
fprintf(fl,"#\n");
fclose(fl);
}
}
}
}
remove(fpath);
close(inf);
}
--
短暂的自由,只为了进入下一个牢笼。
永远的自由,也许要等到魂飞魄散之後。
※ 来源:‧亚太之星 bbs.nkfust.edu.tw‧[FROM: m145-184.dialup.seed]
--
※ 转载:‧亚太之星 bbs.nkfust.edu.tw‧[FROM: m145-184.dialup.seed]