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

📄 00000028.htm

📁 一份很好的linux入门资料
💻 HTM
字号:
<HTML><HEAD>  <TITLE>BBS水木清华站∶精华区</TITLE></HEAD><BODY><CENTER><H1>BBS水木清华站∶精华区</H1></CENTER>发信人:&nbsp;althea&nbsp;(稻草人),&nbsp;信区:&nbsp;Linux&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<BR>标&nbsp;&nbsp;题:&nbsp;[part&nbsp;2]&nbsp;epserver.c&nbsp;<BR>发信站:&nbsp;BBS&nbsp;水木清华站&nbsp;(Fri&nbsp;Dec&nbsp;29&nbsp;23:46:59&nbsp;2000)&nbsp;<BR>&nbsp;<BR>#include&nbsp;&lt;unistd.h&gt;&nbsp;<BR>#include&nbsp;&lt;sys/socket.h&gt;&nbsp;<BR>#include&nbsp;&lt;sys/un.h&gt;&nbsp;<BR>#include&nbsp;&lt;stdio.h&gt;&nbsp;<BR>#include&nbsp;&lt;stdlib.h&gt;&nbsp;<BR>#include&nbsp;&lt;errno.h&gt;&nbsp;<BR>#include&nbsp;&lt;signal.h&gt;&nbsp;<BR>&nbsp;<BR>#define&nbsp;MAX_NAME_LENGTH&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;64&nbsp;<BR>#define&nbsp;DISPLAY_LENGTH&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;64&nbsp;<BR>&nbsp;<BR>char&nbsp;socket_file_name[MAX_NAME_LENGTH];&nbsp;<BR>&nbsp;<BR>int&nbsp;make_named_socket&nbsp;(const&nbsp;char&nbsp;*filename)&nbsp;<BR>{&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;struct&nbsp;sockaddr_un&nbsp;name;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;sock;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;size_t&nbsp;size;&nbsp;<BR>&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;Create&nbsp;the&nbsp;socket.&nbsp;*/&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;sock&nbsp;=&nbsp;socket&nbsp;(PF_LOCAL,&nbsp;SOCK_DGRAM,&nbsp;0);&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(sock&nbsp;&lt;&nbsp;0)&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;perror&nbsp;(&quot;socket&quot;);&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;exit&nbsp;(EXIT_FAILURE);&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<BR>&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;Bind&nbsp;a&nbsp;name&nbsp;to&nbsp;the&nbsp;socket.&nbsp;*/&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;name.sun_family&nbsp;=&nbsp;AF_LOCAL;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;strncpy&nbsp;(name.sun_path,&nbsp;filename,&nbsp;sizeof&nbsp;(name.sun_path));&nbsp;<BR>&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;size&nbsp;=&nbsp;SUN_LEN&nbsp;(&amp;name);&nbsp;<BR>&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(bind&nbsp;(sock,&nbsp;(struct&nbsp;sockaddr&nbsp;*)&nbsp;&amp;name,&nbsp;size)&nbsp;&lt;&nbsp;0)&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;perror&nbsp;(&quot;bind&quot;);&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;exit&nbsp;(EXIT_FAILURE);&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<BR>&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;sock;&nbsp;<BR>}&nbsp;<BR>&nbsp;<BR>void&nbsp;delete_socket&nbsp;(int&nbsp;sig)&nbsp;<BR>{&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;signal&nbsp;(sig,&nbsp;SIG_DFL);&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;unlink&nbsp;(socket_file_name);&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;kill&nbsp;(getpid&nbsp;(),&nbsp;sig);&nbsp;<BR>}&nbsp;<BR>&nbsp;<BR>void&nbsp;handle_signals&nbsp;()&nbsp;<BR>{&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;signal&nbsp;(SIGHUP,&nbsp;delete_socket);&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;signal&nbsp;(SIGINT,&nbsp;delete_socket);&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;signal&nbsp;(SIGQUIT,&nbsp;delete_socket);&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;signal&nbsp;(SIGILL,&nbsp;delete_socket);&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;signal&nbsp;(SIGTRAP,&nbsp;delete_socket);&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;signal&nbsp;(SIGABRT,&nbsp;delete_socket);&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;signal&nbsp;(SIGFPE,&nbsp;delete_socket);&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;signal&nbsp;(SIGSEGV,&nbsp;delete_socket);&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;signal&nbsp;(SIGTERM,&nbsp;delete_socket);&nbsp;<BR>}&nbsp;<BR>&nbsp;<BR>&nbsp;<BR>int&nbsp;main&nbsp;()&nbsp;<BR>{&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;status,&nbsp;socket,&nbsp;nbytes;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;char&nbsp;display_name[DISPLAY_LENGTH];&nbsp;<BR>&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;snprintf&nbsp;(socket_file_name,&nbsp;MAX_NAME_LENGTH,&nbsp;&quot;/tmp/ep-%d&quot;,&nbsp;(int)&nbsp;geteuid());&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;handle_signals&nbsp;();&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;socket&nbsp;=&nbsp;make_named_socket(socket_file_name);&nbsp;<BR>&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;while&nbsp;(1)&nbsp;{&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;((nbytes&nbsp;=&nbsp;read&nbsp;(socket,&nbsp;display_name,&nbsp;DISPLAY_LENGTH))&nbsp;&lt;&nbsp;0)&nbsp;{&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(nbytes&nbsp;==&nbsp;EINTR)&nbsp;continue;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;perror&nbsp;(&quot;read&quot;);&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;exit&nbsp;(EXIT_FAILURE);&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<BR>&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;write&nbsp;(STDOUT_FILENO,&nbsp;display_name,&nbsp;nbytes);&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<BR>&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;0;&nbsp;<BR>}&nbsp;<BR>&nbsp;<BR>&nbsp;<BR>&nbsp;<BR>--&nbsp;<BR>Look&nbsp;Ma,&nbsp;this&nbsp;man&nbsp;can&nbsp;twist&nbsp;his&nbsp;fingers&nbsp;as&nbsp;if&nbsp;they&nbsp;were&nbsp;made&nbsp;of&nbsp;rubber,&nbsp;<BR>isn't&nbsp;that&nbsp;amazing?&nbsp;--&nbsp;Not&nbsp;really,&nbsp;he's&nbsp;been&nbsp;using&nbsp;emacs&nbsp;for&nbsp;years...!&nbsp;<BR>&nbsp;<BR>&nbsp;<BR>※&nbsp;来源:·BBS&nbsp;水木清华站&nbsp;smth.org·[FROM:&nbsp;162.105.203.100]&nbsp;<BR><CENTER><H1>BBS水木清华站∶精华区</H1></CENTER></BODY></HTML>

⌨️ 快捷键说明

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