📄 00000002.htm
字号:
<HTML><HEAD> <TITLE>BBS水木清华站∶精华区</TITLE></HEAD><BODY><CENTER><H1>BBS水木清华站∶精华区</H1></CENTER>发信人: ylsdd (1245), 信区: Linux <BR>标 题: Faint 0.1 文件 loadbbs.c <BR>发信站: BBS 水木清华站 (Wed Feb 23 07:10:30 2000) <BR> <BR>#include <sys/stat.h> <BR>#include <unistd.h> <BR>#include <stdio.h> <BR>#include <signal.h> <BR>#include <fcntl.h> <BR>#include <termios.h> <BR>#include <sys/types.h> <BR>#define CTRL_l 12 <BR>struct termios tsave; <BR>void scan_mode() <BR>{ struct termios tbuf; <BR> if(!isatty(0)) exit(1); <BR> if(tcgetattr(0,&tbuf)==-1) exit(1); <BR> tsave=tbuf; <BR> tbuf.c_lflag&=~(ECHO|ICANON|ISIG); <BR> tbuf.c_cc[VMIN]=tbuf.c_cc[VTIME] =0; <BR> if(tcsetattr(0,TCSANOW,&tbuf)==-1) exit(1); <BR>} <BR>void restore_mode(int i) <BR>{ tcsetattr(0,TCSANOW,&tsave); <BR> if(i>=0) exit(1); <BR>} <BR>main(int argn, char **argv) <BR>{ int i, mode=0; <BR> char buf[1024], inputch; <BR> char fnw[40], fnr[40], fnlock[40]; <BR> int fdw, fdr, fdlock; <BR> fd_set rdfds; <BR> <BR> if(argn<2) return -1; <BR> if(sscanf(argv[1],"%d",&i)!=1) return -1; <BR> sprintf(fnlock, "ctrl/%02dloadbbs.lock",i); <BR> sprintf(fnw, "ctrl/%02din.fifo",i); <BR> sprintf(fnr, "ctrl/%02dout.fifo",i); <BR> if(argn>2) switch(fork()) <BR> { case -1: return -1; <BR> case 0: execvp("./cover", &argv[0]); printf("error"); return -1; <BR> default: break; <BR> } <BR> fdlock=open(fnlock,O_CREAT|O_RDONLY,S_IRUSR|S_IWUSR); <BR> if(fdlock<0) exit(1); <BR> if(flock(fdlock,LOCK_EX|LOCK_NB)<0) exit(1); <BR> fdr=open(fnr,O_RDONLY|O_NDELAY); <BR> fdw=open(fnw,O_WRONLY); <BR> scan_mode(); <BR> signal(SIGPIPE, restore_mode); <BR> inputch=CTRL_l; <BR> write(fdw,&inputch,1); <BR> while(1) <BR> { FD_ZERO(&rdfds); <BR> FD_SET(0,&rdfds); <BR> FD_SET(fdr,&rdfds); <BR> if(select(fdr+1,&rdfds,NULL,NULL,NULL)) <BR> { <BR> if(FD_ISSET(fdr,&rdfds)) <BR> { i=read(fdr,buf,1024); <BR> if(i>0) write(1,buf,i); <BR> } <BR> if(FD_ISSET(0,&rdfds)) <BR> { i=read(0,&inputch,1); <BR> if(i==1&&mode==0&&inputch==29) <BR> { <BR> printf("\n\033[1;4m<loadbbs: press 'c' to abort, " <BR> "press any key else to continue>:\033[0m"); <BR> fflush(stdout); <BR> mode=1; <BR> } <BR> else if(i==1&&mode==0) write(fdw,&inputch,1); <BR> else if(i==1&&mode==1) <BR> { switch(inputch) <BR> { case 'c': printf("\033[2J\033[1;1H"); <BR> restore_mode(0); <BR> default: <BR> mode=0; <BR> inputch=CTRL_l; <BR> write(fdw,&inputch,1); <BR> } <BR> } <BR> } <BR> } <BR> } <BR>} <BR> <BR>-- <BR>要是不能说糊话, 还不如死了算了 <BR> <BR>※ 来源:·BBS 水木清华站 smth.org·[FROM: 162.105.21.92] <BR><CENTER><H1>BBS水木清华站∶精华区</H1></CENTER></BODY></HTML>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -