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

📄 00000008.htm

📁 一份很好的linux入门资料
💻 HTM
📖 第 1 页 / 共 5 页
字号:
void&nbsp;<BR>outfile(filename,&nbsp;linenum)&nbsp;<BR>char&nbsp;*filename;&nbsp;<BR>int&nbsp;linenum;&nbsp;<BR>{&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FILE&nbsp;*fp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;char&nbsp;linebuf[&nbsp;256&nbsp;];&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(linenum&nbsp;&amp;&amp;&nbsp;(fp&nbsp;=&nbsp;fopen(filename,&quot;r&quot;))&nbsp;!=&nbsp;NULL)&nbsp;{&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;while&nbsp;(&nbsp;fgets(&nbsp;linebuf,&nbsp;256,&nbsp;fp&nbsp;)!=NULL&nbsp;&amp;&amp;&nbsp;linenum&nbsp;&gt;&nbsp;0)&nbsp;{&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;linebuf[&nbsp;strlen(linebuf)-1&nbsp;]&nbsp;=&nbsp;'\0';&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(strcmp(&nbsp;linebuf,&nbsp;&quot;.&quot;)==0)&nbsp;outs(&quot;..&quot;);&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else&nbsp;outs(linebuf);&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;linenum--;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fclose(fp);&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;outs(&quot;.&quot;);&nbsp;<BR>}&nbsp;<BR>&nbsp;<BR>&nbsp;<BR>/*&nbsp;timeout&nbsp;-&nbsp;handle&nbsp;timeouts&nbsp;*/&nbsp;<BR>static&nbsp;void&nbsp;timeout(sig)&nbsp;<BR>int&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sig;&nbsp;<BR>{&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;longjmp(timebuf,&nbsp;sig);&nbsp;<BR>}&nbsp;<BR>&nbsp;<BR>&nbsp;<BR>void&nbsp;&nbsp;&nbsp;&nbsp;rfc931(rmt_sin,&nbsp;our_sin,&nbsp;dest)&nbsp;<BR>struct&nbsp;sockaddr_in&nbsp;*rmt_sin;&nbsp;<BR>struct&nbsp;sockaddr_in&nbsp;*our_sin;&nbsp;<BR>char&nbsp;&nbsp;&nbsp;*dest;&nbsp;<BR>{&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;unsigned&nbsp;rmt_port;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;unsigned&nbsp;our_port;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;struct&nbsp;sockaddr_in&nbsp;rmt_query_sin;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;struct&nbsp;sockaddr_in&nbsp;our_query_sin;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;char&nbsp;&nbsp;&nbsp;&nbsp;user[256];&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;char&nbsp;&nbsp;&nbsp;&nbsp;buffer[512];&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;char&nbsp;&nbsp;&nbsp;*cp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;FILE&nbsp;&nbsp;&nbsp;*fp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;char&nbsp;&nbsp;&nbsp;*result&nbsp;=&nbsp;&quot;unknown&quot;;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;struct&nbsp;hostent&nbsp;*hp;&nbsp;<BR>&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;Use&nbsp;one&nbsp;unbuffered&nbsp;stdio&nbsp;stream&nbsp;for&nbsp;writing&nbsp;to&nbsp;and&nbsp;for&nbsp;reading&nbsp;from&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;the&nbsp;RFC931&nbsp;etc.&nbsp;server.&nbsp;This&nbsp;is&nbsp;done&nbsp;because&nbsp;of&nbsp;a&nbsp;bug&nbsp;in&nbsp;the&nbsp;SunOS&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;4.1.x&nbsp;stdio&nbsp;library.&nbsp;The&nbsp;bug&nbsp;may&nbsp;live&nbsp;in&nbsp;other&nbsp;stdio&nbsp;implementations,&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;too.&nbsp;When&nbsp;we&nbsp;use&nbsp;a&nbsp;single,&nbsp;buffered,&nbsp;bidirectional&nbsp;stdio&nbsp;stream&nbsp;(&quot;r+&quot;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;or&nbsp;&quot;w+&quot;&nbsp;mode)&nbsp;we&nbsp;read&nbsp;our&nbsp;own&nbsp;output.&nbsp;Such&nbsp;behaviour&nbsp;would&nbsp;make&nbsp;sense&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;with&nbsp;resources&nbsp;that&nbsp;support&nbsp;random-access&nbsp;operations,&nbsp;but&nbsp;not&nbsp;with&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;sockets.&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;((fp&nbsp;=&nbsp;fsocket(AF_INET,&nbsp;SOCK_STREAM,&nbsp;0))&nbsp;!=&nbsp;0)&nbsp;{&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;setbuf(fp,&nbsp;(char&nbsp;*)&nbsp;0);&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;Set&nbsp;up&nbsp;a&nbsp;timer&nbsp;so&nbsp;we&nbsp;won't&nbsp;get&nbsp;stuck&nbsp;while&nbsp;waiting&nbsp;for&nbsp;the&nbsp;server.&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/&nbsp;<BR>&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(setjmp(timebuf)&nbsp;==&nbsp;0)&nbsp;{&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;signal(SIGALRM,&nbsp;timeout);&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;alarm(RFC931_TIMEOUT);&nbsp;<BR>&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;&nbsp;*&nbsp;Bind&nbsp;the&nbsp;local&nbsp;and&nbsp;remote&nbsp;ends&nbsp;of&nbsp;the&nbsp;query&nbsp;socket&nbsp;to&nbsp;the&nbsp;same&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;IP&nbsp;addresses&nbsp;as&nbsp;the&nbsp;connection&nbsp;under&nbsp;investigation.&nbsp;We&nbsp;go&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;through&nbsp;all&nbsp;this&nbsp;trouble&nbsp;because&nbsp;the&nbsp;local&nbsp;or&nbsp;remote&nbsp;system&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;might&nbsp;have&nbsp;more&nbsp;than&nbsp;one&nbsp;network&nbsp;address.&nbsp;The&nbsp;RFC931&nbsp;etc.&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;client&nbsp;sends&nbsp;only&nbsp;port&nbsp;numbers;&nbsp;the&nbsp;server&nbsp;takes&nbsp;the&nbsp;IP&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;addresses&nbsp;from&nbsp;the&nbsp;query&nbsp;socket.&nbsp;<BR>&nbsp;&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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&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;our_query_sin&nbsp;=&nbsp;*our_sin;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;our_query_sin.sin_port&nbsp;=&nbsp;htons(ANY_PORT);&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rmt_query_sin&nbsp;=&nbsp;*rmt_sin;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rmt_query_sin.sin_port&nbsp;=&nbsp;htons(RFC931_PORT);&nbsp;<BR>&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(bind(fileno(fp),&nbsp;(struct&nbsp;sockaddr&nbsp;*)&nbsp;&amp;&nbsp;our_query_sin,&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sizeof(our_query_sin))&nbsp;&gt;=&nbsp;0&nbsp;&amp;&amp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;connect(fileno(fp),&nbsp;(struct&nbsp;sockaddr&nbsp;*)&nbsp;&amp;&nbsp;rmt_query_sin,&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sizeof(rmt_query_sin))&nbsp;&gt;=&nbsp;0)&nbsp;{&nbsp;<BR>&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;Send&nbsp;query&nbsp;to&nbsp;server.&nbsp;Neglect&nbsp;the&nbsp;risk&nbsp;that&nbsp;a&nbsp;13-byte&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;write&nbsp;would&nbsp;have&nbsp;to&nbsp;be&nbsp;fragmented&nbsp;by&nbsp;the&nbsp;local&nbsp;system&nbsp;and&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;cause&nbsp;trouble&nbsp;with&nbsp;buggy&nbsp;System&nbsp;V&nbsp;stdio&nbsp;libraries.&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/&nbsp;<BR>&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fprintf(fp,&nbsp;&quot;%u,%u\r\n&quot;,&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ntohs(rmt_sin-&gt;sin_port),&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ntohs(our_sin-&gt;sin_port));&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fflush(fp);&nbsp;<BR>&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;Read&nbsp;response&nbsp;from&nbsp;server.&nbsp;Use&nbsp;fgets()/sscanf()&nbsp;so&nbsp;we&nbsp;can&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;work&nbsp;around&nbsp;System&nbsp;V&nbsp;stdio&nbsp;libraries&nbsp;that&nbsp;incorrectly&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;assume&nbsp;EOF&nbsp;when&nbsp;a&nbsp;read&nbsp;from&nbsp;a&nbsp;socket&nbsp;returns&nbsp;less&nbsp;than&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;requested.&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/&nbsp;<BR>&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(fgets(buffer,&nbsp;sizeof(buffer),&nbsp;fp)&nbsp;!=&nbsp;0&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&amp;&amp;&nbsp;ferror(fp)&nbsp;==&nbsp;0&nbsp;&amp;&amp;&nbsp;feof(fp)&nbsp;==&nbsp;0&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&amp;&amp;&nbsp;sscanf(buffer,&nbsp;&quot;%u&nbsp;,&nbsp;%u&nbsp;:&nbsp;USERID&nbsp;:%*[^:]:%255s&quot;,&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&amp;rmt_port,&nbsp;&amp;our_port,&nbsp;user)&nbsp;==&nbsp;3&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&amp;&amp;&nbsp;ntohs(rmt_sin-&gt;sin_port)&nbsp;==&nbsp;rmt_port&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&amp;&amp;&nbsp;ntohs(our_sin-&gt;sin_port)&nbsp;==&nbsp;our_port)&nbsp;{&nbsp;<BR>&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;Strip&nbsp;trailing&nbsp;carriage&nbsp;return.&nbsp;It&nbsp;is&nbsp;part&nbsp;of&nbsp;the&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;protocol,&nbsp;not&nbsp;part&nbsp;of&nbsp;the&nbsp;data.&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/&nbsp;<BR>&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(cp&nbsp;=&nbsp;strchr(user,&nbsp;'\r'))&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*cp&nbsp;=&nbsp;0;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;result&nbsp;=&nbsp;user;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&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;}&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;alarm(0);&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fclose(fp);&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;STRN_CPY(dest,&nbsp;result,&nbsp;60);&nbsp;<BR>&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(strcmp(dest,&quot;unknown&quot;)==0)&nbsp;strcpy(dest,&quot;&quot;);&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;else&nbsp;strcat(&nbsp;dest,&nbsp;&quot;@&quot;&nbsp;);&nbsp;<BR>&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;hp&nbsp;=&nbsp;gethostbyaddr((char&nbsp;*)&nbsp;&amp;rmt_sin-&gt;sin_addr,&nbsp;sizeof&nbsp;(struct&nbsp;in_addr),&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rmt_sin-&gt;sin_family);&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(hp)&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;strcat(dest,&nbsp;hp-&gt;h_name);&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;else&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;strcat(dest,&nbsp;(char&nbsp;*)inet_ntoa(rmt_sin-&gt;sin_addr));&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<BR>}&nbsp;<BR>&nbsp;<BR>int&nbsp;<BR>Isspace(ch)&nbsp;<BR>char&nbsp;ch;&nbsp;&nbsp;&nbsp;&nbsp;<BR>{&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;(ch&nbsp;==&nbsp;'&nbsp;'&nbsp;||&nbsp;ch&nbsp;=='\t'&nbsp;||&nbsp;ch&nbsp;==&nbsp;10&nbsp;||&nbsp;ch&nbsp;==&nbsp;13);&nbsp;<BR>}&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<BR>char&nbsp;*&nbsp;<BR>nextwordlower(str)&nbsp;<BR>char&nbsp;**str;&nbsp;<BR>{&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;char&nbsp;*p;&nbsp;<BR>&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;while&nbsp;(Isspace(**str))&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(*str)++;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;p&nbsp;=&nbsp;(*str);&nbsp;<BR>&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;while&nbsp;(**str&nbsp;&amp;&amp;&nbsp;!Isspace(**str))&nbsp;{&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;**str&nbsp;=&nbsp;tolower(**str);&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(*str)++;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<BR>&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(**str)&nbsp;{&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;**str&nbsp;=&nbsp;'\0';&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(*str)++;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;p;&nbsp;<BR>}&nbsp;<BR>&nbsp;<BR>char&nbsp;*&nbsp;<BR>nextword(str)&nbsp;<BR>char&nbsp;**str;&nbsp;<BR>{&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;char&nbsp;*p;&nbsp;<BR>&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;while&nbsp;(Isspace(**str))&nbsp;<BR>

⌨️ 快捷键说明

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