﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>C++博客-分享知识-随笔分类-链接目录</title><link>http://www.cppblog.com/sscchh-2000/category/1673.html</link><description>与大家一起分享知识</description><language>zh-cn</language><lastBuildDate>Mon, 19 May 2008 21:15:11 GMT</lastBuildDate><pubDate>Mon, 19 May 2008 21:15:11 GMT</pubDate><ttl>60</ttl><item><title>母亲节快到了，写点东西送给母亲</title><link>http://www.cppblog.com/sscchh-2000/archive/2006/05/12/7011.html</link><dc:creator>史传红</dc:creator><author>史传红</author><pubDate>Fri, 12 May 2006 06:10:00 GMT</pubDate><guid>http://www.cppblog.com/sscchh-2000/archive/2006/05/12/7011.html</guid><wfw:comment>http://www.cppblog.com/sscchh-2000/comments/7011.html</wfw:comment><comments>http://www.cppblog.com/sscchh-2000/archive/2006/05/12/7011.html#Feedback</comments><slash:comments>18</slash:comments><wfw:commentRss>http://www.cppblog.com/sscchh-2000/comments/commentRss/7011.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/sscchh-2000/services/trackbacks/7011.html</trackback:ping><description><![CDATA[      母亲节快到了，独自在外求学的我，想给母亲送点礼物。小时候的记忆中，母亲是一个很严厉的人，记得有两次被母亲狠狠的揍了。一次是我丢了一块手表，那时候我还上小学，就偷偷的把母亲的手表带到学校，结果给弄丢了。还有一次就是和伙伴玩，结果不知道什么原因和他打架了，又被狠狠的揍了一顿。那时候心里想，我现在还小，等长大了母亲就打不过我了。一晃10几年过去了，我还有一年就毕业了。在这段时间里，我深深体会到了母亲的爱和关怀。<br />      2000年那年，我考上了吉林大学，母亲哭了。我想母亲也是和我一样，期待着这个梦想，而真正实现了的时候，我们都抑制不了那个喜悦的心情。我想母亲一定感到很幸福，她会感到很骄傲的。可能有些人会想，考了大学有什么了不起的，现在的大学生跟民工一样，到处都是。也没有什么好骄傲的吧。可是，在这里我要告诉你，我们那个村，甚至那个乡，在我的记忆中，就出来这样一个大学生，那已经是上个世纪六七十年代的事情了，也就是在中间隔了近30年了。你可以想象那样的场景。母亲能不骄傲嘛？其实母亲的管教现在想来，不是逼着让我学习，而是让我自由的发展，说起来也怪，小时候我可是一个非常调皮的孩子，整天和伙伴们玩的很疯。到处下河捉鱼，上树掏鸟窝。凡是能玩的都玩了。这可能跟母亲的言传身教有关系的。表姐也曾问过我：“小时候大家都是一起玩的，甚至比我还用功，怎么我没有考上大学你去考上了呢？”我也开玩笑的回答：其实我玩的时候，头脑还是在思考东西呢。其实表姐也是一个很优秀的，只是由于家庭的原因，实在太穷了，上完了初中就没有上学了。说到这里，其实在我们村里，或者任何一个贫穷的农村，我们这些孩子不是笨，而是真正由于家里孩子多，又非常贫穷，又要让每个孩子都能读点书，认上几个字。所以大部分的人都只能读到初中甚至小学没有毕业就辍学了。所以我觉得母亲难能可贵的，就是她的坚持，因为在我初三那年毕业的时候，由于考试成绩不理想，要读高中还需要交五千块钱的扩招费。那个时候真是非常艰难的一步。真可以用摔锅卖铁来形容。所以我很感谢母亲在那么困难的时候能够咬牙撑过来了。当然在这里还要感谢我的干爸干妈。没有他们的大力支持我也很难走到这一步。<br />      9月份，我离开了生我养我的那个贫瘠的农村，临走的时候，我怀揣着八千块钱踏往长春的列车上。八千块钱里面现在还清楚的记得：叔叔借的两千，舅舅借的一千，表哥借的一千五，还有姨哥借的一块和姨姐借的五百。剩下的两千是亲朋好友来和喜酒给的。从此开始了我在长春的求学之路。也就是我来到长春之后的两个月左右，父亲和母亲也去了上海。目的就是打工给我挣来年的学费。要知道亲戚家里的生活也并不好，能支助我这么多钱读书实在不易了。下一年的学费当然不可能，也不好意思张口了。先开始说说我的父母吧，来到了上海，他们真的不容易。在老乡的帮助下，很快父母便开始了第一份工作。母亲在一个菜市场里面帮别人卖鸡鸭，家禽等，一个月500块钱。说起来这个可能看上去并不怎么太辛苦。但是我要说这个工作我母亲咬牙坚持了两个月最终辞去了。为什么呢？母亲每天早上4点就起床，然后到菜市场去，这个时候有一车货，由于菜市场是在二楼，母亲（还有另外一个阿姨，生活也一定不易，否则根本不可能来这个地方）他们俩就一个又一个满载家禽的篮子往二楼上面爬。这样一个多小时候之后就开始给店主卖，然后把一只又一只的家禽宰杀，然后去皮，洗干净。就这样一段时间，母亲整个人肿的不成样子了，手皮退了一层又一层。因为实在挺不住了，去医院治疗。结果辛苦挣了一点钱几乎都用在了医疗费上面了。再来说说父亲吧，父亲的第一份工作是送货，就是那个脚蹬三轮车，每天送好几次，每次有好几百斤，有时候能达到上千斤。一个月也就六七百块钱。就这样也挺了几个月便辞了。我还有一个妹妹，父母这次外出打工，不仅仅是为了我一个人的求学。因为我妹妹也高一了，父母不仅仅要供我一个人。<br />      来到了长春，一切都是那么新奇，看到了大学生活真的是太自由了。没有老师的管束。也许是我的理想，也许是这来之易的求学机会，我仍然想在高中那样，努力学习，因为我的理想是要让父母过上幸福的生活，不再那么操劳。让乡村们都能够过上幸福的生活。所以我必须努力学习，来学习到真正的本领，这样才有希望。让我意外的是，第一年结束之后，我竟然获得了奖助学金共5700块钱。还记得当时我简直不敢相信这是真的。这可是需要母亲日日夜夜拼命挣上一年啊！我不知道该说什么好，只能感谢学校对我的关怀。就这样，或许是受到了激励，或许我真的很优秀。整个大学四年我一共获得了奖助学金共26，000块钱（其中奖学金12，000）。再加上中国工商银行贷款14，000。使我顺利的完成了大学四年的学业。除了学业之外。我还用一部分钱支助我妹妹读书。另外由于爷爷奶奶年纪大了，爸妈他们又不在身边。我也给他们寄过几次生活费。还记着最多一次是500，那时候爷爷生病了，需要住院。此外由于爸妈在外打工，大姑他们给我家种地。我也寄过几百块钱。同时也算是减轻了爸妈他们的一点负担吧。整个大学生活过得很充实，更让我幸运的是，遇到了一个对我有知遇之恩的老师，也就是我现在的导师陈老师，他对我生活和学习上的帮助让我感激不尽；而且我还遇到了一个通情达理，艰苦朴素而又十分漂亮的女孩，也就是我的女朋友霖霖，这几年来真的很感谢她的理解和支持。<br />      不但我获得了这么多的幸运。我的妹妹也是幸运的。由于我在学校和国家的支助下完成了学业，我爸妈辛苦挣的钱就能够供我妹妹读书了。现在我妹妹已经快毕业了，目前在实习中，虽然每月900块钱，但也是相当不错了。而是现在还有一年就毕业了，由于比较幸运，读的是公费。每个月还能有八九百块钱的生活补助。从而能让父母他们不要那么操劳了。<br />      可是，就在前两天，我爸爸跟我说我母亲又去介绍所花了100块钱找了一份工作。母亲的工作是给一家医院洗菜，刷碗，打杂什么的。一个月700块钱，每天早上六点到晚上九点。我昨天晚上给母亲打了一个电话，等到快九点半才找到母亲的。我坚决要求母亲辞掉工作，可是母亲就说闲着浑身也是疼，还不如忙点呢。一个小时还不到2块钱，母亲还是那样的乐观。我真的不知道怎么样劝才能劝她辞掉这份工作。<br />      其实母亲的身体并不好，在我上高中的时候，母亲下地干活累出了肝炎，最后总算治好了，但是也不能太劳累。而且母亲现在还有子宫肌瘤，虽然是良性的，但是也总出血带来了身体的严重贫血。我婶婶跟我说：“你妈有病你和你妹妹怎么不让她治啊，别人有病都治，她有病留着，真是奇怪。”其实我妈也想治，不过却说：“等你俩上班挣钱了再治，现在去医院也检查了，说不要紧，而且手术费也得六七千，根本也没有钱治。”，一个人的力量真的是那么的微弱啊。我只能盼望我早点毕业，去挣钱给母亲治病。我在这里要说：“妈，我爱你，是你的坚强支撑了这个家庭，让我们感到了您伟大的母爱！”。<br />      看到了我的故事，我希望每一个向我这样的穷乡娃都能够有一颗奋斗的心，来改变我们的生活。都能够深爱着自己的母亲，能够期待着明天美好的生活...<img src ="http://www.cppblog.com/sscchh-2000/aggbug/7011.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/sscchh-2000/" target="_blank">史传红</a> 2006-05-12 14:10 <a href="http://www.cppblog.com/sscchh-2000/archive/2006/05/12/7011.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>err_开头的自定义函数</title><link>http://www.cppblog.com/sscchh-2000/archive/2006/05/09/6838.html</link><dc:creator>史传红</dc:creator><author>史传红</author><pubDate>Tue, 09 May 2006 13:39:00 GMT</pubDate><guid>http://www.cppblog.com/sscchh-2000/archive/2006/05/09/6838.html</guid><wfw:comment>http://www.cppblog.com/sscchh-2000/comments/6838.html</wfw:comment><comments>http://www.cppblog.com/sscchh-2000/archive/2006/05/09/6838.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/sscchh-2000/comments/commentRss/6838.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/sscchh-2000/services/trackbacks/6838.html</trackback:ping><description><![CDATA[
		<table cellspacing="0" cellpadding="0" width="100%" border="0">
				<tbody>
						<tr>
								<td valign="top">
										<h3 class="docSection1Title" id="162666-841">D.3 Standard Error Functions</h3>
										<p class="docText">We define our own set of error functions that are used throughout the text to<br /> handle error conditions. The reason for using our own error functions is to <br />let us write our error handling with a single line of C code, as in</p>
										<pre>
										</pre>
										<pre>if <span class="docEmphasis">(error condition)</span>
    err_sys <span class="docEmphasis">(printf format with any number of arguments)</span>;
</pre>
										<pre>
										</pre>
										<p class="docText">instead of</p>
										<pre>
										</pre>
										<pre>if <span class="docEmphasis">(error condition)</span> {
    char buff [2002];
    snprintf(buff, sizeof (buff), <span class="docEmphasis">printf format <br />    with any number of arguments)</span>;
    perror(buff);
    exit (1);
}
</pre>
										<pre>
										</pre>
										<p class="docText">Our error functions use the variable-length argument list facility from <tt>ANSI C</tt>. <br />See Section 7.3 of [Kernighan and Ritchie 1988] for additional details.</p>
										<p class="docText">
												<a class="docLink" href="mk:@MSITStore:E:\study_magizine\UNIX%20Network%20Programming%20Volume[1].1%20The%20Sockets%20Networking%20API.chm::/0131411551_app04lev1sec3.html#app04fig03">
														<font color="#002c99">Figure D.3</font>
												</a>lists the differences between the various error functions. <br />If the global integer <tt>daemon_proc</tt> is nonzero, the message is passed to<br /><tt>syslog</tt> with the indicated level; otherwise, the error is output to standard error.<br />Figure D.3. Summary of our standard error functions.<br /><img id="132235130214" height="138" alt="graphics/xdfig03.gif" src="mk:@MSITStore:E:\study_magizine\UNIX%20Network%20Programming%20Volume[1].1%20The%20Sockets%20Networking%20API.chm::/FILES/xdfig03.gif" width="367" border="0" /></p>
										<p class="docText">
												<a class="docLink" href="mk:@MSITStore:E:\study_magizine\UNIX%20Network%20Programming%20Volume[1].1%20The%20Sockets%20Networking%20API.chm::/0131411551_app04lev1sec3.html#app04fig04">
														<font color="#002c99">Figure D.4</font>
												</a>shows the first five functions from <a class="docLink" href="mk:@MSITStore:E:\study_magizine\UNIX%20Network%20Programming%20Volume[1].1%20The%20Sockets%20Networking%20API.chm::/0131411551_app04lev1sec3.html#app04fig03"><font color="#002c99">Figure D.3</font></a>.</p>
										<h5 class="docExampleTitle">
												<a name="app04fig04">
												</a>Figure D.4 Our standard error functions.</h5>
										<p class="docText">
												<span class="docEmphasis">lib/error.c</span>
										</p>
										<pre> 1 #include    "unp.h"
 2 #include    &lt;stdarg.h&gt;          /* ANSI C header file */
 3 #include    &lt;syslog.h&gt;          /* for syslog() */

 4 int     daemon_proc;            /* set nonzero by daemon_init() */

 5 static void err_doit(int, int, const char *, va_list);

 6 /* Nonfatal error related to system call
 7  * Print message and return */

 8 void
 9 err_ret(const char *fmt, ...)
10 {
11     va_list ap;

12     va_start(ap, fmt);
13     err_doit(1, LOG_INFO, fmt, ap);
14     va_end(ap);
15     return;
16 }

17 /* Fatal error related to system call
18  * Print message and terminate */

19 void
20 err_sys(const char *fmt, ...)
21 {
22     va_list ap;

23     va_start(ap, fmt);
24     err_doit(1, LOG_ERR, fmt, ap);
25     va_end(ap);
26     exit(1);
27 }

28 /* Fatal error related to system call
29  * Print message, dump core, and terminate */

30 void
31 err_dump(const char *fmt, ...)
32 {
33     va_list ap;

34     va_start(ap, fmt);
35     err_doit(1, LOG_ERR, fmt, ap);
36     va_end(ap);
37     abort();                    /* dump core and terminate */
38     exit(1);                    /* shouldn't get here */
39 }

40 /* Nonfatal error unrelated to system call
41  * Print message and return */

42 void
43 err_msg(const char *fmt, ...)
44 {
45     va_list ap;

46     va_start(ap, fmt);
47     err_doit(0, LOG_INFO, fmt, ap);
48     va_end(ap);
49     return;
50 }

51 /* Fatal error unrelated to system call
52  * Print message and terminate */

53 void
54 err_quit(const char *fmt, ...)
55 {
56     va_list ap;

57     va_start(ap, fmt);
58     err_doit(0, LOG_ERR, fmt, ap);

59     va_end(ap);
60     exit(1);
61 }

62 /* Print message and return to caller
63  * Caller specifies "errnoflag" and "level" */

64 static void
65 err_doit(int errnoflag, int level, const char *fmt, va_list ap)
66 {
67     int     errno_save, n;
68     char    buf[MAXLINE + 1];

69     errno_save = errno;         /* value caller might want printed */
70 #ifdef HAVE_VSNPRINTF
71     vsnprintf(buf, MAXLINE, fmt, ap);   * safe */
72 #else
73     vsprintf(buf, fmt, ap);     /* not safe */
74 #endif
75     n = strlen(buf);
76     if (errnoflag)
77         snprintf(buf + n, MAXLINE - n, ": %s", strerror(errno_save));
78     strcat(buf, "\n");

79     if (daemon_proc) {
80         syslog(level, buf);
81     } else {
82         fflush(stdout);         /* in case stdout and stderr are the same */
83         fputs(buf, stderr);
84         fflush(stderr);
85     }
86     return;
87 }
</pre>
										<ul>
										</ul>
								</td>
						</tr>
				</tbody>
		</table>
		<td>
		</td>
		<table cellspacing="0" cellpadding="0" width="100%" border="0">
				<tbody>
						<tr>
								<td class="tt1">
										<font color="#002c99">
										</font>
								</td>
								<td class="tt1" valign="top" align="right">
								</td>
						</tr>
				</tbody>
		</table>
<img src ="http://www.cppblog.com/sscchh-2000/aggbug/6838.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/sscchh-2000/" target="_blank">史传红</a> 2006-05-09 21:39 <a href="http://www.cppblog.com/sscchh-2000/archive/2006/05/09/6838.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>unp.h文件内容</title><link>http://www.cppblog.com/sscchh-2000/archive/2006/05/09/6836.html</link><dc:creator>史传红</dc:creator><author>史传红</author><pubDate>Tue, 09 May 2006 12:43:00 GMT</pubDate><guid>http://www.cppblog.com/sscchh-2000/archive/2006/05/09/6836.html</guid><wfw:comment>http://www.cppblog.com/sscchh-2000/comments/6836.html</wfw:comment><comments>http://www.cppblog.com/sscchh-2000/archive/2006/05/09/6836.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.cppblog.com/sscchh-2000/comments/commentRss/6836.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/sscchh-2000/services/trackbacks/6836.html</trackback:ping><description><![CDATA[
		<pre>  1 /* Our own header. Tabs are set for 4 spaces, not 8 */
 
  2 #ifndef __unp_h
  3 #define __unp_h

  4 #include    "../config.h"      /* configuration options for current OS */
  5                            /* "../config.h" is generated by configure */

  6 /* If anything changes in the following list of #includes, must change
  7    acsite.m4 also, for configure's tests. */

  8 #include    &lt;sys/types.h&gt;       /* basic system data types */
  9 #include    &lt;sys/socket.h&gt;      /* basic socket definitions */
 10 #include    &lt;sys/time.h&gt;        /* timeval{} for select() */
 11 #include    &lt;time.h&gt;            /* timespec{} for pselect() */
 12 #include    &lt;netinet/in.h&gt;      /* sockaddr_in{} and other Internet defns */
 13 #include    &lt;arpa/inet.h&gt;       /* inet(3) functions */
 14 #include    &lt;errno.h&gt;
 15 #include    &lt;fcntl.h&gt;           /* for nonblocking */
 16 #include    &lt;netdb.h&gt;
 17 #include    &lt;signal.h&gt;
 18 #include    &lt;stdio.h&gt;
 19 #include    &lt;stdlib.h&gt;
 20 #include    &lt;string.h&gt;
 21 #include    &lt;sys/stat.h&gt;        /* for S_xxx file mode constants */
 22 #include    &lt;sys/uio.h&gt;         /* for iovec{} and readv/writev */
 23 #include    &lt;unistd.h&gt;
 24 #include    &lt;sys/wait.h&gt;
 25 #include    &lt;sys/un.h&gt;          /* for Unix domain sockets */

 26 #ifdef  HAVE_SYS_SELECT_H
 27 # include   &lt;sys/select.h&gt;      /* for convenience */
 28 #endif

 29 #ifdef  HAVE_SYS_SYSCTL_H
 30 # include   &lt;sys/sysctl.h&gt;
 31 #endif

 32 #ifdef  HAVE_POLL_H
 33 # include  &lt;poll.h&gt;             /* for convenience */
 34 #endif

 35 #ifdef  HAVE_SYS_EVENT_H
 36 # include   &lt;sys/event.h&gt;       /* for kqueue */
 37 #endif

 38 #ifdef  HAVE_STRINGS_H
 39 # include   &lt;strings.h&gt;         /* for convenience */
 40 #endif

 41 /* Three headers are normally needed for socket/file ioctl's:
 42  * &lt;sys/ioctl.h&gt;, &lt;sys/filio.h&gt;, and &lt;sys/sockio.h&gt;.
 43  */
 44 #ifdef  HAVE_SYS_IOCTL_H
 45 # include   &lt;sys/ioctl.h&gt;
 46 #endif
 47 #ifdef  HAVE_SYS_FILIO_H
 48 # include   &lt;sys/filio.h&gt;
 49 #endif
 50 #ifdef  HAVE_SYS_SOCKIO_H
 51 # include   &lt;sys/sockio.h&gt;
 52 #endif

 53 #ifdef  HAVE_PTHREAD_H
 54 # include   &lt;pthread.h&gt;
 55 #endif

 56 #ifdef  HAVE_NET_IF_DL_H
 57 # include    &lt;net/if_dl.h&gt;
 58 #endif

 59 #ifdef  HAVE_NETINET_SCTP_H
 60 #include     &lt;netinet/sctp.h&gt;
 61 #endif

 62 /* OSF/1 actually disables recv() and send() in &lt;sys/socket.h&gt; */
 63 #ifdef  __osf__
 64 #undef  recv
 65 #undef  send
 66 #define recv(a,b,c,d)   recvfrom(a,b,c,d,0,0)
 67 #define send(a,b,c,d)   sendto(a,b,c,d,0,0)
 68 #endif

 69 #ifndef INADDR_NONE
 70 #define INADDR_NONE 0xffffffff  /* should have been in &lt;netinet/in.h&gt; */
 71 #endif

 72 #ifndef SHUT_RD                 /* these three POSIX names are new */
 73 #define SHUT_RD     0           /* shutdown for reading */
 74 #define SHUT_WR     1           /* shutdown for writing */
 75 #define SHUT_RDWR   2           /* shutdown for reading and writing */
 76 #endif

 77 #ifndef INET_ADDRSTRLEN
 78 #define INET_ADDRSTRLEN     16  /* "ddd.ddd.ddd.ddd\0"
 79                                    1234567890123456 */
 80 #endif

 81 /* Define following even if IPv6 not supported, so we can always allocate
 82    an adequately sized buffer without #ifdefs in the code. */
 83 #ifndef INET6_ADDRSTRLEN
 84 #define INET6_ADDRSTRLEN    46  /* max size of IPv6 address string:
 85                    "xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx" or
 86                    "xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:ddd.ddd.ddd.ddd\0"
 87                     1234567890123456789012345678901234567890123456 */
 88 #endif

 89 /* Define bzero() as a macro if it's not in standard C library. */
 90 #ifndef HAVE_BZERO
 91 #define bzero(ptr,n)        memset (ptr, 0, n)
 92 #endif

 93 /* Older resolvers do not have gethostbyname2() */
 94 #ifndef HAVE_GETHOSTBYNAME2
 95 #define gethostbyname2(host,family)     gethostbyname((host))
 96 #endif

 97 /* The structure returned by recvfrom_flags() */
 98 struct unp_in_pktinfo {
 99     struct in_addr ipi_addr;    /* dst IPv4 address */
100     int     ipi_ifindex;        /* received interface index */
101 };

102 /* We need the newer CMSG_LEN() and CMSG_SPACE() macros, but few
103    implementations support them today. These two macros really need
104     an ALIGN() macro, but each implementation does this differently. */
105 #ifndef CMSG_LEN
106 #define CMSG_LEN(size)      (sizeof(struct cmsghdr) + (size))
107 #endif
108 #ifndef CMSG_SPACE
109 #define CMSG_SPACE(size)    (sizeof(struct cmsghdr) + (size))
110 #endif

111 /* POSIX requires the SUN_LEN() macro, but not all implementations define
112    it (yet). Note that this 4.4BSD macro works regardless whether there is
113    a length field or not. */
114 #ifndef SUN_LEN
115 # define    SUN_LEN (su) \
116     (sizeof (*(su)) - sizeof ((su)-&gt;sun_path) + strlen((su)-&gt;sun_path))
117 #endif

118 /* POSIX renames "Unix domain" as "local IPC."
119    Not all systems define AF_LOCAL and PF_LOCAL (yet). */
120 #ifndef AF_LOCAL
121 #define AF_LOCAL    AF_UNIX
122 #endif
123 #ifndef PF_LOCAL
124 #define PF_LOCAL    PF_UNIX
125 #endif

126 /* POSIX requires that an #include of &lt;poll.h&gt; define INFTIM, but many
127    systems still define it in &lt;sys/stropts.h&gt;. We don't want to include
128    all the STREAMS stuff if it's not needed, so we just define INFTIM here.
129    This is the standard value, but there's no guarantee it is -1. */
130 #ifndef INFTIM
131 #define INFTIM          (-1)     /* infinite poll timeout */
132 #ifdef HAVE_POLL_H
133 #define INFTIM_UNPH              /* tell unpxti.h we defined it */
134 #endif
135 #endif

136 /* Following could be derived from SOMAXCONN in &lt;sys/socket.h&gt;, but many
137    kernels still #define it as 5, while actually supporting many more */
138 #define LISTENQ     1024         /* 2nd argument to listen () */

139 /* Miscellaneous constants */
140 #define MAXLINE     4096         /* max text line length */
141 #define BUFFSIZE    8192         /* buffer size for reads and writes */

142 /* Define some port number that can be used for our examples */
143 #define SERV_PORT        9877    /* TCP and UDP */
144 #define SERV_PORT_STR   "9877"   /* TCP and UDP */
145 #define UNIXSTR_PATH    "/tmp/unix.str" /* Unix domain stream */
146 #define UNIXDG_PATH     "/tmp/unix.dg"  /* Unix domain datagram */

147 /* Following shortens all the typecasts of pointer arguments: */
148 #define SA struct sockaddr

149 #define HAVE_STRUCT_SOCKADDR_STORAGE
150 #ifndef HAVE_STRUCT_SOCKADDR_STORAGE
151 /*
152  * RFC 3493: protocol-independent placeholder for socket addresses
153  */
154 #define __SS_MAXSIZE    128
155 #define __SS_ALIGNSIZE  (sizeof(int64_t))
156 #ifdef HAVE_SOCKADDR_SA_LEN
157 #define __SS_PAD1SIZE   (__SS_ALIGNSIZE - sizeof(u_char) - sizeof(sa_family_t))
158 #else
159 #define __SS_PAD1SIZE   (__SS_ALIGNSIZE - sizeof(sa_family_t))
160 #endif
161 #define __SS_PAD2SIZE   (__SS_MAXSIZE - 2*__SS_ALIGNSIZE)

162 struct sockaddr_storage {
163 #ifdef HAVE_SOCKADDR_SA_LEN
164     u_char  ss_len;
165 #endif
166     sa_family_t ss_family;
167     char    __ss_pad1[__SS_PAD1SIZE];
168     int64_t __ss_align;
169     char    __ss_pad2[__SS_PAD2SIZE];
170 };
171 #endif

172 #define FILE_MODE   (S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH)
173                     /* default file access permissions for new files */
174 #define DIR_MODE    (FILE_MODE | S_IXUSR | S_IXGRP | S_IXOTH)
175                     /* default permissions for new directories */

176 typedef void Sigfunc (int);     /* for signal handlers */

177 #define min(a,b)    ((a) &lt; (b) ? (a) : (b))
178 #define max(a,b)    ((a) &gt; (b) ? (a) : (b))

179 #ifndef HAVE_ADDRINFO_STRUCT
180 # include   "../lib/addrinfo.h"
181 #endif

182 #ifndef HAVE_IF_NAMEINDEX_STRUCT
183 struct if_nameindex {
184     unsigned int if_index;      /* 1, 2, ... */
185     char *if_name;              /* null-terminated name: "le0", ... */
186 };
187 #endif

188 #ifndef HAVE_TIMESPEC_STRUCT
189 struct timespec {
190     time_t tv_sec;              /* seconds */
191     long     tv_nsec;           /* and nanoseconds */
192 };
193 #endif
</pre>
<img src ="http://www.cppblog.com/sscchh-2000/aggbug/6836.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/sscchh-2000/" target="_blank">史传红</a> 2006-05-09 20:43 <a href="http://www.cppblog.com/sscchh-2000/archive/2006/05/09/6836.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>