荔园在线
荔园之美,在春之萌芽,在夏之绽放,在秋之收获,在冬之沉淀
[回到开始]
[上一篇][下一篇]
发信人: bstone (Live my life!), 信区: Linux
标 题: Faint 0.1 文件 loadbbs.c
发信站: BBS 荔园晨风站 (Wed Feb 23 14:04:59 2000), 站内信件
发信人: ylsdd (1245), 信区: Linux
标 题: Faint 0.1 文件 loadbbs.c
发信站: BBS 水木清华站 (Wed Feb 23 07:10:30 2000)
#include <sys/stat.h>
#include <unistd.h>
#include <stdio.h>
#include <signal.h>
#include <fcntl.h>
#include <termios.h>
#include <sys/types.h>
#define CTRL_l 12
struct termios tsave;
void scan_mode()
{ struct termios tbuf;
if(!isatty(0)) exit(1);
if(tcgetattr(0,&tbuf)==-1) exit(1);
tsave=tbuf;
tbuf.c_lflag&=~(ECHO|ICANON|ISIG);
tbuf.c_cc[VMIN =tbuf.c_cc[VTIME] =0;
if(tcsetattr(0,TCSANOW,&tbuf)==-1) exit(1);
}
void restore_mode(int i)
void restore_mode(int i)
{ tcsetattr(0,TCSANOW,&tsave);
if(i>=0) exit(1);
}
main(int argn, char **argv)
{ int i, mode=0;
char buf[1024], inputch;
char fnw[40], fnr[40], fnlock[40];
int fdw, fdr, fdlock;
fd_set rdfds;
if(argn<2) return -1;
if(sscanf(argv[1],"%d",&i)!=1) return -1;
sprintf(fnlock, "ctrl/%02dloadbbs.lock",i);
sprintf(fnw, "ctrl/%02din.fifo",i);
sprintf(fnr, "ctrl/%02dout.fifo",i);
if(argn>2) switch(fork())
{ case -1: return -1;
case 0: execvp("./cover", &argv[0]); printf("error"); return -1;
default: break;
}
fdlock=open(fnlock,O_CREAT|O_RDONLY,S_IRUSR|S_IWUSR);
if(fdlock<0) exit(1);
if(fdlock<0) exit(1);
if(flock(fdlock,LOCK_EX|LOCK_NB)<0) exit(1);
fdr=open(fnr,O_RDONLY|O_NDELAY);
fdw=open(fnw,O_WRONLY);
scan_mode();
signal(SIGPIPE, restore_mode);
inputch=CTRL_l;
write(fdw,&inputch,1);
while(1)
{ FD_ZERO(&rdfds);
FD_SET(0,&rdfds);
FD_SET(fdr,&rdfds);
if(select(fdr+1,&rdfds,NULL,NULL,NULL))
{
if(FD_ISSET(fdr,&rdfds))
{ i=read(fdr,buf,1024);
if(i>0) write(1,buf,i);
}
if(FD_ISSET(0,&rdfds))
{ i=read(0,&inputch,1);
if(i==1&&mode==0&&inputch==29)
{
printf("\n\033[1;4m<loadbbs: press 'c' to abort, "
printf("\n\033[1;4m<loadbbs: press 'c' to abort, "
"press any key else to continue>:\033[0m");
fflush(stdout);
mode=1;
}
else if(i==1&&mode==0) write(fdw,&inputch,1);
else if(i==1&&mode==1)
{ switch(inputch)
{ case 'c': printf("\033[2J\033[1;1H");
restore_mode(0);
default:
mode=0;
inputch=CTRL_l;
write(fdw,&inputch,1);
}
}
}
}
}
}
--
要是不能说糊话, 还不如死了算了
fflush(stdout);
※ 来源:·BBS 水木清华站 smth.org·[FROM: 162.105.21.92]
--
☆ 来源:.BBS 荔园晨风站 bbs.szu.edu.cn.[FROM: bbs@192.168.28.23]
[回到开始]
[上一篇][下一篇]
荔园在线首页 友情链接:深圳大学 深大招生 荔园晨风BBS S-Term软件 网络书店