⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 00000001.htm

📁 一份很好的linux入门资料
💻 HTM
字号:
<HTML><HEAD>  <TITLE>BBS水木清华站∶精华区</TITLE></HEAD><BODY><CENTER><H1>BBS水木清华站∶精华区</H1></CENTER>发信人:&nbsp;ylsdd&nbsp;(1245),&nbsp;信区:&nbsp;Linux&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<BR>标&nbsp;&nbsp;题:&nbsp;Faint&nbsp;0.1&nbsp;文件&nbsp;cover.c&nbsp;<BR>发信站:&nbsp;BBS&nbsp;水木清华站&nbsp;(Wed&nbsp;Feb&nbsp;23&nbsp;07:09:46&nbsp;2000)&nbsp;<BR>&nbsp;<BR>#include&nbsp;&lt;sys/stat.h&gt;&nbsp;<BR>#include&nbsp;&lt;unistd.h&gt;&nbsp;<BR>#include&nbsp;&lt;sys/param.h&gt;&nbsp;<BR>#include&nbsp;&lt;signal.h&gt;&nbsp;<BR>#include&nbsp;&lt;fcntl.h&gt;&nbsp;<BR>#include&nbsp;&lt;errno.h&gt;&nbsp;<BR>#include&nbsp;&lt;termios.h&gt;&nbsp;<BR>#include&nbsp;&lt;sys/time.h&gt;&nbsp;<BR>#include&nbsp;&lt;sys/types.h&gt;&nbsp;<BR>#define&nbsp;TIMEIDLE&nbsp;200&nbsp;<BR>#define&nbsp;TIMEDELAY&nbsp;6&nbsp;<BR>&nbsp;<BR>int&nbsp;setup_daemon(void)&nbsp;<BR>{&nbsp;&nbsp;int&nbsp;i;&nbsp;<BR>&nbsp;&nbsp;&nbsp;for(i=0;i&lt;NOFILE;i++)&nbsp;&nbsp;close(i);&nbsp;<BR>&nbsp;&nbsp;&nbsp;switch(fork())&nbsp;<BR>&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;case&nbsp;-1:&nbsp;return&nbsp;-1;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;default:&nbsp;exit(0);&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;0:&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;setsid();&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;switch(fork())&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;case-1:&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;default:&nbsp;exit(0);&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;0:&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;umask(0);&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;0;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<BR>&nbsp;&nbsp;&nbsp;}&nbsp;<BR>}&nbsp;<BR>&nbsp;<BR>main(int&nbsp;argc,&nbsp;char&nbsp;**argv)&nbsp;<BR>{&nbsp;&nbsp;int&nbsp;fdin[2],&nbsp;fdout[2];&nbsp;<BR>&nbsp;&nbsp;&nbsp;int&nbsp;fdr0,&nbsp;fdw0,&nbsp;fdr1,&nbsp;fdw1,&nbsp;fdlock,&nbsp;fdlog,&nbsp;i,&nbsp;try;&nbsp;<BR>&nbsp;&nbsp;&nbsp;time_t&nbsp;timenow;&nbsp;<BR>&nbsp;&nbsp;&nbsp;struct&nbsp;tm&nbsp;*tmptr;&nbsp;<BR>&nbsp;&nbsp;&nbsp;fd_set&nbsp;rdfds,&nbsp;exfds;&nbsp;<BR>&nbsp;&nbsp;&nbsp;struct&nbsp;timeval&nbsp;timeout;&nbsp;<BR>&nbsp;&nbsp;&nbsp;char&nbsp;buf[1024],&nbsp;ch;&nbsp;<BR>&nbsp;&nbsp;&nbsp;char&nbsp;fnlock[40],&nbsp;fnin[40],&nbsp;fnout[40],&nbsp;fnlog[40];&nbsp;<BR>&nbsp;<BR>&nbsp;&nbsp;&nbsp;if(argc&lt;2)&nbsp;return;&nbsp;<BR>&nbsp;&nbsp;&nbsp;if(sscanf(argv[1],&quot;%d&quot;,&amp;i)!=1)&nbsp;return;&nbsp;<BR>&nbsp;&nbsp;&nbsp;if(i&gt;99||i&lt;0)&nbsp;return;&nbsp;<BR>&nbsp;&nbsp;&nbsp;sprintf(fnlock,&quot;ctrl/%02dcover.lock&quot;,i);&nbsp;<BR>&nbsp;&nbsp;&nbsp;sprintf(fnin,&quot;ctrl/%02din.fifo&quot;,i);&nbsp;<BR>&nbsp;&nbsp;&nbsp;sprintf(fnout,&quot;ctrl/%02dout.fifo&quot;,i);&nbsp;<BR>&nbsp;&nbsp;&nbsp;timenow=time(NULL);&nbsp;<BR>&nbsp;&nbsp;&nbsp;tmptr=localtime(&amp;timenow);&nbsp;<BR>&nbsp;&nbsp;&nbsp;sprintf(fnlog,&quot;log/%02d%04d%02d%02d%02d%02d%02d.log&quot;,&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;i,&nbsp;tmptr-&gt;tm_year+1900,&nbsp;tmptr-&gt;tm_mon,&nbsp;tmptr-&gt;tm_mday,&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tmptr-&gt;tm_hour,&nbsp;tmptr-&gt;tm_min,&nbsp;tmptr-&gt;tm_sec);&nbsp;<BR>&nbsp;&nbsp;&nbsp;setup_daemon();&nbsp;<BR>&nbsp;&nbsp;&nbsp;if(pipe(fdin)==-1)&nbsp;exit(1);&nbsp;<BR>&nbsp;&nbsp;&nbsp;if(pipe(fdout)==-1)&nbsp;exit(1);&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;fdlock=open(fnlock,O_RDONLY|O_CREAT,S_IRUSR|S_IWUSR);&nbsp;<BR>&nbsp;&nbsp;&nbsp;if(fdlock&lt;0)&nbsp;exit(1);&nbsp;<BR>&nbsp;&nbsp;&nbsp;if(flock(fdlock,LOCK_EX|LOCK_NB)&lt;0)&nbsp;exit(1);&nbsp;<BR>&nbsp;&nbsp;&nbsp;switch(fork())&nbsp;<BR>&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;case&nbsp;-1:&nbsp;exit(1);&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;0:&nbsp;close(fdin[1]);&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dup(fdout[1]);&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;close(fdout[0]);&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;close(fdout[1]);&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;close(fdlock);&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;execvp(argv[2],&nbsp;&amp;argv[2]);&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;exit(1);&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;default:&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;close(fdin[0]);&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fdw0=fdin[1];&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;close(fdout[1]);&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fdr1=fdout[0];&nbsp;<BR>&nbsp;&nbsp;&nbsp;}&nbsp;<BR>&nbsp;<BR>&nbsp;&nbsp;&nbsp;signal(SIGPIPE,&nbsp;SIG_IGN);&nbsp;<BR>&nbsp;&nbsp;&nbsp;fdw1=-1;&nbsp;<BR>&nbsp;&nbsp;&nbsp;fdr0=open(fnin,O_RDWR|O_NDELAY);&nbsp;<BR>&nbsp;&nbsp;&nbsp;if(fdr0&lt;0)&nbsp;exit(1);&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;fdlog=open(fnlog,O_WRONLY|O_CREAT|O_EXCL,S_IRUSR|S_IWUSR);&nbsp;<BR>&nbsp;&nbsp;&nbsp;if(fdlog&lt;0)&nbsp;exit(1);&nbsp;<BR>&nbsp;&nbsp;&nbsp;for(i=2,&nbsp;ch='&nbsp;';i&lt;argc;i++)&nbsp;<BR>&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;write(fdlog,&nbsp;argv[i],&nbsp;strlen(argv[i]));&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;write(fdlog,&nbsp;&amp;ch,&nbsp;1);&nbsp;<BR>&nbsp;&nbsp;&nbsp;}&nbsp;<BR>&nbsp;&nbsp;&nbsp;ch='\n';&nbsp;<BR>&nbsp;&nbsp;&nbsp;write(fdlog,&amp;ch,1);&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;timeout.tv_sec=TIMEIDLE;&nbsp;<BR>&nbsp;&nbsp;&nbsp;timeout.tv_usec=0;&nbsp;<BR>&nbsp;&nbsp;&nbsp;try=1;&nbsp;<BR>&nbsp;&nbsp;&nbsp;ch=12;&nbsp;<BR>&nbsp;&nbsp;&nbsp;while(1)&nbsp;<BR>&nbsp;&nbsp;&nbsp;{&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(fdw1&lt;0&amp;&amp;try==1)&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;fdw1=open(fnout,O_WRONLY|O_NDELAY);&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;try=0;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FD_ZERO(&amp;rdfds);&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FD_ZERO(&amp;exfds);&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FD_SET(fdr1,&amp;rdfds);&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FD_SET(fdr1,&amp;exfds);&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FD_SET(fdr0,&amp;rdfds);&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(select(1+((fdr0&gt;fdr1)?fdr0:fdr1),&amp;rdfds,NULL,&amp;exfds,&amp;timeout)&lt;=0)&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;timeout.tv_sec=TIMEIDLE;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;timeout.tv_usec=0;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;write(fdw0,&amp;ch,1);&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;continue;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(FD_ISSET(fdr1,&amp;rdfds))&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;i=read(fdr1,buf,1024);&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(i&gt;0)&nbsp;&nbsp;while(write(fdlog,buf,i)&lt;0)&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;if(errno==EINTR)&nbsp;continue;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else&nbsp;exit(1);&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(fdw1&gt;=0&amp;&amp;i&gt;0)&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;while(write(fdw1,buf,i)&lt;0)&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;if(errno==EINTR)&nbsp;continue;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;close(fdw1);&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fdw1=-1;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(FD_ISSET(fdr1,&amp;exfds))&nbsp;exit(1);&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(FD_ISSET(fdr0,&amp;rdfds))&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;i=read(fdr0,buf,1024);&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(i&gt;0)&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;while(write(fdw0,buf,i)&lt;0)&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;if(errno!=EINTR)&nbsp;exit(1);&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;timeout.tv_sec=TIMEIDLE;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;timeout.tv_usec=0;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;try=1;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<BR>&nbsp;&nbsp;&nbsp;}&nbsp;<BR>}&nbsp;<BR>/*----------------End&nbsp;of&nbsp;File&nbsp;cover.c---------------------*/&nbsp;<BR>&nbsp;<BR>--&nbsp;<BR>要是不能说糊话,&nbsp;还不如死了算了&nbsp;<BR>&nbsp;<BR>※&nbsp;来源:·BBS&nbsp;水木清华站&nbsp;smth.org·[FROM:&nbsp;162.105.21.92]&nbsp;<BR><CENTER><H1>BBS水木清华站∶精华区</H1></CENTER></BODY></HTML>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -