<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>喜欢FreeBSD</title><link>http://blog.jztele.com/hifreebsd/</link><description>在FreeBSD中记下的</description><managingEditor>hihee的博客</managingEditor><dc:language>zh-SG</dc:language><generator>.Text Version 0.958.2004.214</generator><item><dc:creator>hihee的博客</dc:creator><title>sockaddr 与 sockaddr_in 小结</title><link>http://blog.jztele.com/hifreebsd/archive/2008/07/22/14216.html</link><pubDate>Mon, 21 Jul 2008 17:47:00 GMT</pubDate><guid>http://blog.jztele.com/hifreebsd/archive/2008/07/22/14216.html</guid><wfw:comment>http://blog.jztele.com/hifreebsd/comments/14216.html</wfw:comment><comments>http://blog.jztele.com/hifreebsd/archive/2008/07/22/14216.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://blog.jztele.com/hifreebsd/comments/commentRss/14216.html</wfw:commentRss><trackback:ping>http://blog.jztele.com/hifreebsd/services/trackbacks/14216.html</trackback:ping><description>&lt;div style="FONT-SIZE: 10pt"&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style="FONT-SIZE: 10pt"&gt;struct sockaddr {&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; unsigned short sa_family; /* 地址族, AF_xxx */&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; char sa_data[14]; /* 14字节的协议地址*/&lt;br&gt;&amp;nbsp;&amp;nbsp; };&lt;br&gt;&amp;nbsp;&amp;nbsp; &lt;br&gt;上面是通用的socket地址，具体到Internet socket，用下面的结构，二者可以进行类型转换&lt;br&gt;&amp;nbsp;&amp;nbsp; &lt;br&gt;struct sockaddr_in {&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; short int sin_family; /* 地址族 */&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; unsigned short int sin_port; /* 端口号 */&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; struct in_addr sin_addr; /* Internet地址 */&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; unsigned char sin_zero[8]; /* 与struct sockaddr一样的长度 */&lt;br&gt;&amp;nbsp;&amp;nbsp; };&lt;br&gt;&amp;nbsp;&amp;nbsp; &lt;br&gt;&amp;nbsp;&amp;nbsp; struct in_addr就是32位IP地址。&lt;br&gt;&amp;nbsp;&amp;nbsp; &lt;br&gt;&amp;nbsp;&amp;nbsp; struct in_addr {&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; unsigned long s_addr;&lt;br&gt;&amp;nbsp;&amp;nbsp; }; (这种好记)&lt;/div&gt;
&lt;div style="FONT-SIZE: 10pt"&gt;也有&lt;br&gt;struct in_addr {&amp;nbsp;&amp;nbsp;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;union {&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;struct { u_char s_b1,s_b2,s_b3,s_b4;} S_un_b;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;struct { u_short s_w1,s_w2;} S_un_w;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;u_long S_addr;&amp;nbsp;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;} S_un;&lt;br&gt;};&lt;/div&gt;
&lt;div style="FONT-SIZE: 10pt"&gt;&lt;br&gt;利用u_long htonl(u_long hostlong);将主机字节序转换为TCP/IP网络字节序.&lt;br&gt;利用u_short htons(u_short hostshort);将主机字节序转换为TCP/IP网络字节序.&lt;/div&gt;
&lt;div style="FONT-SIZE: 10pt"&gt;inet_addr()是将一个点分制的IP地址(如192.168.0.1)转换为上述结构中需要的32位IP地址(0xC0A80001)。&lt;/div&gt;
&lt;div style="FONT-SIZE: 10pt"&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style="FONT-SIZE: 10pt"&gt;通常的用法是：&lt;br&gt;int sockfd;&lt;br&gt;struct sockaddr_in my_addr;&lt;br&gt;sockfd = socket(AF_INET, SOCK_STREAM, 0); /* 做一些错误检查! */&lt;/div&gt;
&lt;div style="FONT-SIZE: 10pt"&gt;my_addr.sin_family = AF_INET; /* 主机字节序 */&lt;br&gt;my_addr.sin_port = htons(MYPORT); /* short, 网络字节序 */&lt;br&gt;my_addr.sin_addr.s_addr = inet_addr("192.168.0.1");&lt;/div&gt;
&lt;div style="FONT-SIZE: 10pt"&gt;bzero(&amp;amp;(my_addr.sin_zero), 8); /* zero the rest of the struct */&lt;br&gt;/* 不要忘了为bind()做错误检查: */&lt;br&gt;bind(sockfd, (struct sockaddr *)&amp;amp;my_addr, sizeof(struct sockaddr));&lt;/div&gt;
&lt;div style="FONT-SIZE: 10pt"&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style="FONT-SIZE: 10pt"&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style="FONT-SIZE: 10pt"&gt;&amp;nbsp;&lt;/div&gt;
&lt;img src ="http://blog.jztele.com/hifreebsd/aggbug/14216.html" width = "1" height = "1" /&gt;</description></item><item><dc:creator>hihee的博客</dc:creator><title>inet_addr 函数处理ip地址需要注意的问题</title><link>http://blog.jztele.com/hifreebsd/archive/2008/07/22/14215.html</link><pubDate>Mon, 21 Jul 2008 17:41:00 GMT</pubDate><guid>http://blog.jztele.com/hifreebsd/archive/2008/07/22/14215.html</guid><wfw:comment>http://blog.jztele.com/hifreebsd/comments/14215.html</wfw:comment><comments>http://blog.jztele.com/hifreebsd/archive/2008/07/22/14215.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://blog.jztele.com/hifreebsd/comments/commentRss/14215.html</wfw:commentRss><trackback:ping>http://blog.jztele.com/hifreebsd/services/trackbacks/14215.html</trackback:ping><description>&lt;div style="FONT-SIZE: 10pt"&gt;inet_addr函数处理IP地址需要注意的问题&lt;br&gt;xuefeifei 发表于 2006-3-28 15:39:00&lt;/div&gt;
&lt;div style="FONT-SIZE: 10pt"&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style="FONT-SIZE: 10pt"&gt;现在我们很幸运，因为我们有很多的函数来方便地操作 IP 地址。&lt;/div&gt;
&lt;div style="FONT-SIZE: 10pt"&gt;没有 必要用手工计算它们，也没有必要用"&amp;lt;&amp;lt;"操作来储存成长整字型。 &lt;/div&gt;
&lt;div style="FONT-SIZE: 10pt"&gt;首先，假设你已经有了一个sockaddr_in结构体ina，你有一个IP地址"132.241.5.10" 要储存在其中，&lt;/div&gt;
&lt;div style="FONT-SIZE: 10pt"&gt;你就要用到函数inet_addr(),将IP地址从 点数格式转换成无符号长整型。使用方法如下：&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ina.sin_addr.s_addr = inet_addr("132.241.5.10");&lt;br&gt;注意，inet_addr()返回的地址已经是网络字节格式，所以你无需再调用 函数htonl()。&lt;br&gt;我们现在发现上面的代码片断不是十分完整的，因为它没有错误检查。 &lt;/div&gt;
&lt;div style="FONT-SIZE: 10pt"&gt;显而易见，当inet_addr()发生错误时返回-1。记住这些二进制数字？(无符 号数)-1仅仅和IP地址255.255.255.255相符合！&lt;/div&gt;
&lt;div style="FONT-SIZE: 10pt"&gt;这可是广播地址！大错特 错！记住要先进行错误检查。&lt;br&gt;好了，现在你可以将IP地址转换成长整型了。有没有其相反的方法呢？ 它可以将一个in_addr结构体输出成点数格式？这样的话，你就要用到函数 inet_ntoa()("ntoa"的含义是"network to ascii")，就像这样： &lt;br&gt;printf("%s",inet_ntoa(ina.sin_addr));&lt;br&gt;它将输出IP地址。需要注意的是inet_ntoa()将结构体in-addr作为一 个参数，不是长整形。&lt;/div&gt;
&lt;div style="FONT-SIZE: 10pt"&gt;同样需要注意的是它返回的是一个指向一个字符的 指针。它是一个由inet_ntoa()控制的静态的固定的指针，&lt;/div&gt;
&lt;div style="FONT-SIZE: 10pt"&gt;所以每次调用 inet_ntoa()，它就将覆盖上次调用时所得的IP地址。例如：&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/div&gt;
&lt;div style="FONT-SIZE: 10pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;char *a1, *a2;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;a1 = inet_ntoa(ina1.sin_addr); /* 这是198.92.129.1 */&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;a2 = inet_ntoa(ina2.sin_addr); /* 这是132.241.5.10 */&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;printf("address 1: %s ",a1);&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;printf("address 2: %s ",a2);&lt;br&gt;输出如下：&lt;br&gt;&lt;/div&gt;
&lt;div style="FONT-SIZE: 10pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;address 1: 132.241.5.10&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;address 2: 132.241.5.10&lt;br&gt;假如你需要保存这个IP地址，使用strcopy()函数来指向你自己的字符指针。&lt;/div&gt;
&lt;div style="FONT-SIZE: 10pt"&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style="FONT-SIZE: 10pt"&gt;&amp;nbsp; 转自 &lt;a href="http://www.blog.edu.cn/user2/36539/archives/2006/1197635.shtml"&gt;http://www.blog.edu.cn/user2/36539/archives/2006/1197635.shtml&lt;/a&gt;&amp;nbsp;&lt;/div&gt;
&lt;img src ="http://blog.jztele.com/hifreebsd/aggbug/14215.html" width = "1" height = "1" /&gt;</description></item><item><dc:creator>hihee的博客</dc:creator><title>getopt  详解</title><link>http://blog.jztele.com/hifreebsd/archive/2008/07/20/14161.html</link><pubDate>Sat, 19 Jul 2008 18:30:00 GMT</pubDate><guid>http://blog.jztele.com/hifreebsd/archive/2008/07/20/14161.html</guid><wfw:comment>http://blog.jztele.com/hifreebsd/comments/14161.html</wfw:comment><comments>http://blog.jztele.com/hifreebsd/archive/2008/07/20/14161.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://blog.jztele.com/hifreebsd/comments/commentRss/14161.html</wfw:commentRss><trackback:ping>http://blog.jztele.com/hifreebsd/services/trackbacks/14161.html</trackback:ping><description>&lt;p style="FONT-SIZE: 10pt"&gt;getopt&amp;nbsp; 详解&lt;/p&gt;
&lt;p style="FONT-SIZE: 10pt"&gt;getopt()函数声明如下：&lt;br&gt;#include &amp;lt;unistd.h&amp;gt;&lt;/p&gt;
&lt;p style="FONT-SIZE: 10pt"&gt;int getopt(int argc, char * const argv[], const char *optstring);&lt;/p&gt;
&lt;p style="FONT-SIZE: 10pt"&gt;extern char *optarg;&lt;br&gt;extern int optind, opterr, optopt;&lt;br&gt;该函数的argc和argv参数通常直接从main()的参数直接传递而来。optstring是选项字母组成的字串。如果该字串里的任一字符后面有冒号，那么这个选项就要求有选项参数。&lt;br&gt;当给定getopt()命令参数的数量 (argc)、指向这些参数的数组 (argv) 和选项字串 (optstring) 后，getopt() 将返回第一个选项，并设置一些全局变量。使用相同的参数再次调用该函数时，它将返回下一个选项，并设置相应的全局变量。如果不再有可识别的选项，将返回 -1，此任务就完成了。&lt;/p&gt;
&lt;p style="FONT-SIZE: 10pt"&gt;GNU提供的getopt()函数，它会扫描整个命令行来寻找选项。当调用GNU getopt()函数并处理命令行参数的时候，它重新排列argv中的元素，这样当重排结束时，所有选项都被移动到前面并且那些继续检查argv [optind]至argv[argc-1]中剩余参数的代码仍正常工作，但在任何情况下，碰到特殊参数'--'就结束对选项的扫描。&lt;/p&gt;
&lt;p style="FONT-SIZE: 10pt"&gt;&lt;br&gt;getopt() 所设置的全局变量包括：&lt;br&gt;?&amp;nbsp;char *optarg——当前选项参数字串（如果有）。 &lt;br&gt;?&amp;nbsp;int optind——argv的当前索引值。当getopt()在while循环中使用时，循环结束后，剩下的字串视为操作数，在argv[optind]至argv[argc-1]中可以找到。 &lt;br&gt;?&amp;nbsp;int opterr——这个变量非零时，getopt()函数为&amp;#8220;无效选项&amp;#8221;和&amp;#8220;缺少参数选项，并输出其错误信息。&lt;br&gt;?&amp;nbsp;int optopt——当发现无效选项字符之时，getopt()函数或返回'?'字符，或返回':'字符，并且optopt包含了所发现的无效选项字符。&lt;/p&gt;
&lt;p style="FONT-SIZE: 10pt"&gt;getopt()对错误命令行参数信息的输出行为&lt;/p&gt;
&lt;p style="FONT-SIZE: 10pt"&gt;不正确的调用程序在所难免，这种错误要么是命令行选项无效，要么是缺少选项参数。&lt;br&gt;正常情况下，getopt()会为这两种情况输出自己的出错信息，并且返回'?'。&lt;/p&gt;
&lt;p style="FONT-SIZE: 10pt"&gt;如果不希望输出任何错误信息，或更希望输出自定义的错误信息。&lt;br&gt;可以采用以下两种方法来更改getopt()函数的出错信息输出行为：&lt;br&gt;1.&amp;nbsp;在调用getopt()之前，将opterr设置为0，这样就可以在getopt()函数发现错误的时候强制它不输出任何消息。 &lt;br&gt;2.&amp;nbsp;如果optstring参数的第一个字符是冒号，那么getopt()函数就会保持沉默，并根据错误情况返回不同字符，如下： &lt;br&gt;o&amp;nbsp;&amp;#8220;无效选项&amp;#8221; —— getopt()返回'?'，并且optopt包含了无效选项字符（这是正常的行为）。 &lt;br&gt;o&amp;nbsp;&amp;#8220;缺少选项参数&amp;#8221; —— getopt()返回':'，如果optstring的第一个字符不是冒号，那么getopt()返回'?'，这会使得这种情况不能与无效选项的情况区分开。&lt;/p&gt;
&lt;p style="FONT-SIZE: 10pt"&gt;#include &amp;lt;stdio.h&amp;gt;&lt;br&gt;#include &amp;lt;unistd.h&amp;gt;&lt;/p&gt;
&lt;p style="FONT-SIZE: 10pt"&gt;int main (int argc, char **argv)&lt;br&gt;{&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; int oc;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /*选项字符 */&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; char ec;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /*无效的选项字符*/&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; char *b_opt_arg;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /*选项参数字串 */&lt;/p&gt;
&lt;p style="FONT-SIZE: 10pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; while((oc = getopt(argc, argv, ":ngl:")) != -1)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; switch(oc)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; case 'n':&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; printf("My name is Lyong.\n");&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; break;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; case 'g':&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; printf("Her name is Xxiong.\n");&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; break;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; case 'l':&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; b_opt_arg = optarg;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; printf("Our love is %s\n", optarg);&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; break;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; case '?':&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ec = (char)optopt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; printf("无效的选项字符 \' %c \'!\n", ec);&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; break;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; case ':':&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; printf("缺少选项参数!\n");&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; break;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; return 0;&lt;br&gt;}&lt;/p&gt;
&lt;p style="FONT-SIZE: 10pt"&gt;&amp;nbsp;&lt;/p&gt;
&lt;img src ="http://blog.jztele.com/hifreebsd/aggbug/14161.html" width = "1" height = "1" /&gt;</description></item><item><dc:creator>hifreebsd@tom.com的博客</dc:creator><title>用C实现读取行数,并根据行数删除文件的前n行</title><link>http://blog.jztele.com/hifreebsd/archive/2008/07/19/14132.html</link><pubDate>Fri, 18 Jul 2008 17:51:00 GMT</pubDate><guid>http://blog.jztele.com/hifreebsd/archive/2008/07/19/14132.html</guid><wfw:comment>http://blog.jztele.com/hifreebsd/comments/14132.html</wfw:comment><comments>http://blog.jztele.com/hifreebsd/archive/2008/07/19/14132.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://blog.jztele.com/hifreebsd/comments/commentRss/14132.html</wfw:commentRss><trackback:ping>http://blog.jztele.com/hifreebsd/services/trackbacks/14132.html</trackback:ping><description>&lt;p style="FONT-SIZE: 10pt"&gt;#include &amp;lt;unistd.h&amp;gt;&lt;br&gt;#include &amp;lt;stdio.h&amp;gt;&lt;br&gt;#include &amp;lt;signal.h&amp;gt;&lt;br&gt;#include &amp;lt;stdlib.h&amp;gt;&lt;br&gt;#include &amp;lt;sys/types.h&amp;gt;&lt;br&gt;#define INPUT_FILE "/home/chen/temp/temp/input.txt"&lt;/p&gt;
&lt;p style="FONT-SIZE: 10pt"&gt;int main()&lt;br&gt;{&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; FILE *in;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; char buffer[1024];&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; pid_t pid;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; int delete_num;&amp;nbsp;// 欲删除的行数&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; char fro_to[20];&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; int status;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; unsigned long lines = 0;&lt;/p&gt;
&lt;p style="FONT-SIZE: 10pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; in = fopen(INPUT_FILE, "r");&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (NULL == in)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; printf("fopen error!\n");&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/p&gt;
&lt;p style="FONT-SIZE: 10pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; while(NULL != fgets(buffer, sizeof(buffer), in))&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; lines++;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/p&gt;
&lt;p style="FONT-SIZE: 10pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // 输出文件的总行数&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; printf("The file \"%s\" has %ld lines.\n", INPUT_FILE, lines);&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (0 == lines) return 0;&lt;/p&gt;
&lt;p style="FONT-SIZE: 10pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; printf("You want to delete fomr 1 to __:");&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; scanf("%d", &amp;amp;delete_num);&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; sprintf(fro_to, "1, %dd", delete_num);&lt;/p&gt;
&lt;p style="FONT-SIZE: 10pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; while (delete_num &amp;gt; 0 &amp;amp;&amp;amp; delete_num &amp;lt;lines + 1 )&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; pid = fork();&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (-1 == pid)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; perror("fork failed!\n");&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return(1);&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else if (0 == pid)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* pid为0，子进程 */&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; execlp("sed", "sed", "-i", fro_to, "input.txt",(char *)0);&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; perror("execl failed!\n");&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; _exit(2);&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* pid大于0，父进程 */&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; break;&lt;/p&gt;
&lt;p style="FONT-SIZE: 10pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; wait(&amp;amp;status);&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; printf("ok, successfull!\n");&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return(0);&lt;br&gt;}&lt;/p&gt;
&lt;p style="FONT-SIZE: 10pt"&gt;&amp;nbsp;&lt;/p&gt;
&lt;img src ="http://blog.jztele.com/hifreebsd/aggbug/14132.html" width = "1" height = "1" /&gt;</description></item><item><dc:creator>hifreebsd@tom.com的博客</dc:creator><title>base64编码</title><link>http://blog.jztele.com/hifreebsd/archive/2008/07/10/13734.html</link><pubDate>Wed, 09 Jul 2008 16:54:00 GMT</pubDate><guid>http://blog.jztele.com/hifreebsd/archive/2008/07/10/13734.html</guid><wfw:comment>http://blog.jztele.com/hifreebsd/comments/13734.html</wfw:comment><comments>http://blog.jztele.com/hifreebsd/archive/2008/07/10/13734.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://blog.jztele.com/hifreebsd/comments/commentRss/13734.html</wfw:commentRss><trackback:ping>http://blog.jztele.com/hifreebsd/services/trackbacks/13734.html</trackback:ping><description>&lt;div style="FONT-SIZE: 10pt"&gt;我总算是看懂了,&amp;nbsp; 转自&lt;a href="http://baike.baidu.com/view/469071.htm"&gt;http://baike.baidu.com/view/469071.htm&lt;/a&gt;&lt;/div&gt;
&lt;div style="FONT-SIZE: 10pt"&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style="FONT-SIZE: 10pt"&gt;base64 Base64是网络上最常见的用于传输8Bit字节代码的编码方式之一，&lt;/div&gt;
&lt;div style="FONT-SIZE: 10pt"&gt;大家可以查看RFC2045～RFC2049，上面有MIME的详细规范。&lt;/div&gt;
&lt;div style="FONT-SIZE: 10pt"&gt;Base64要求把每三个8Bit的字节转换为四个6Bit的字节（3*8 = 4*6 = 24），&lt;/div&gt;
&lt;div style="FONT-SIZE: 10pt"&gt;然后把6Bit再添两位高位0，组成四个8Bit的字节，也就是说，转换后的字符串理论上将要比原来的长1/3。&lt;/div&gt;
&lt;div style="FONT-SIZE: 10pt"&gt;这样说会不会太抽象了？不怕，我们来看一个例子：&lt;/div&gt;
&lt;div style="FONT-SIZE: 10pt"&gt;转换前 aaaaaabb ccccdddd eeffffff&amp;nbsp;&amp;nbsp; &lt;br&gt;转换后 00aaaaaa 00bbcccc 00ddddee 00ffffff &lt;/div&gt;
&lt;div style="FONT-SIZE: 10pt"&gt;应该很清楚了吧？上面的三个字节是原文，下面的四个字节是转换后的Base64编码，其前两位均为0。&lt;/div&gt;
&lt;div style="FONT-SIZE: 10pt"&gt;转换后，我们用一个码表来得到我们想要的字符串（也就是最终的Base64编码），&lt;/div&gt;
&lt;div style="FONT-SIZE: 10pt"&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style="FONT-SIZE: 10pt"&gt;这个表是这样的：（摘自RFC2045）&lt;/div&gt;
&lt;div style="FONT-SIZE: 10pt"&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Table 1: The Base64 Alphabet&lt;/div&gt;
&lt;div style="FONT-SIZE: 10pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Value Encoding&amp;nbsp; Value Encoding&amp;nbsp; Value Encoding&amp;nbsp; Value Encoding&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0 A&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 17 R&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 34 i&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 51 z&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1 B&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 18 S&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 35 j&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 52 0&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2 C&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 19 T&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 36 k&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 53 1&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 3 D&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 20 U&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 37 l&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 54 2&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 4 E&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 21 V&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;38 m&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 55 3&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 5 F&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 22 W&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 39 n&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 56 4&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 6 G&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 23 X&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 40 o&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;57 5&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 7 H&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 24 Y&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;41 p&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;58 6&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 8 I&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; 25 Z&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;42 q&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 59 7&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 9 J&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 26 a&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; 43 r&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;60 8&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 10 K&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 27 b&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 44 s&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;61 9&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 11 L&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 28 c&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 45 t&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;62 +&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 12 M&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 29 d&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 46 u&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;63 /&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 13 N&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 30 e&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 47 v&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 14 O&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 31 f&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 48 w&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; (pad) =&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 15 P&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 32 g&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;49 x&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 16 Q&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 33 h&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 50 y&lt;/div&gt;
&lt;div style="FONT-SIZE: 10pt"&gt;&lt;br&gt;让我们再来看一个实际的例子，加深印象！&lt;/div&gt;
&lt;div style="FONT-SIZE: 10pt"&gt;转换前 10101101&amp;nbsp;&amp;nbsp;&amp;nbsp; 10111010&amp;nbsp;&amp;nbsp; &amp;nbsp;01110110&amp;nbsp;&amp;nbsp; &lt;br&gt;转换后 00101011&amp;nbsp;&amp;nbsp;&amp;nbsp; 00011011&amp;nbsp;&amp;nbsp;&amp;nbsp; 00101001&amp;nbsp; &amp;nbsp;00110110 &lt;br&gt;十进制 43 27 41 54 &lt;br&gt;对应码表中的值 r b p 2 &lt;/div&gt;
&lt;div style="FONT-SIZE: 10pt"&gt;&lt;br&gt;所以上面的24位编码，编码后的Base64值为 rbp2&lt;br&gt;解码同理，把 rbq2 的二进制位连接上再重组得到三个8位值，得出原码。&lt;br&gt;（解码只是编码的逆过程，在此我就不多说了，另外有关MIME的RFC还是有很多的，如果需要详细情况请自行查找。）&lt;/div&gt;
&lt;div style="FONT-SIZE: 10pt"&gt;用更接近于编程的思维来说，编码的过程是这样的：&lt;/div&gt;
&lt;div style="FONT-SIZE: 10pt"&gt;第一个字符通过右移2位获得第一个目标字符的Base64表位置，根据这个数值取到表上相应的字符，就是第一个目标字符。&lt;br&gt;然后将第一个字符左移4位加上第二个字符右移4位，即获得第二个目标字符。&lt;br&gt;再将第二个字符左移2位加上第三个字符右移6位，获得第三个目标字符。&lt;br&gt;最后取第三个字符的右6位即获得第四个目标字符。&lt;/div&gt;
&lt;div style="FONT-SIZE: 10pt"&gt;在以上的每一个步骤之后，再把结果与 0x3F 进行 AND 位操作，就可以得到编码后的字符了。&lt;/div&gt;
&lt;div style="FONT-SIZE: 10pt"&gt;可是等等&amp;#8230;&amp;#8230;聪明的你可能会问到，原文的字节数量应该是3的倍数啊，如果这个条件不能满足的话，那该怎么办呢？&lt;/div&gt;
&lt;div style="FONT-SIZE: 10pt"&gt;我们的解决办法是这样的：原文的字节不够的地方可以用全0来补足，转换时Base64编码用=号来代替。&lt;/div&gt;
&lt;div style="FONT-SIZE: 10pt"&gt;这就是为什么有些Base64编码会以一个或两个等号结束的原因，但等号最多只有两个。因为：&lt;/div&gt;
&lt;div style="FONT-SIZE: 10pt"&gt;余数 = 原文字节数 MOD 3&lt;/div&gt;
&lt;div style="FONT-SIZE: 10pt"&gt;所以余数任何情况下都只可能是0，1，2这三个数中的一个。&lt;/div&gt;
&lt;div style="FONT-SIZE: 10pt"&gt;如果余数是0的话，就表示原文字节数正好是3的倍数（最理想的情况啦）。&lt;/div&gt;
&lt;div style="FONT-SIZE: 10pt"&gt;如果是1的话，为了让Base64编码是4的倍数，就要补2个等号；&lt;/div&gt;
&lt;div style="FONT-SIZE: 10pt"&gt;同理，如果是2的话，就要补1个等号。&lt;/div&gt;
&lt;div style="FONT-SIZE: 10pt"&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style="FONT-SIZE: 10pt"&gt;&amp;nbsp;&lt;/div&gt;
&lt;img src ="http://blog.jztele.com/hifreebsd/aggbug/13734.html" width = "1" height = "1" /&gt;</description></item><item><dc:creator>hifreebsd@tom.com的博客</dc:creator><title>char (*p)[10] 与 char p[10]  区别</title><link>http://blog.jztele.com/hifreebsd/archive/2008/07/08/13639.html</link><pubDate>Tue, 08 Jul 2008 05:31:00 GMT</pubDate><guid>http://blog.jztele.com/hifreebsd/archive/2008/07/08/13639.html</guid><wfw:comment>http://blog.jztele.com/hifreebsd/comments/13639.html</wfw:comment><comments>http://blog.jztele.com/hifreebsd/archive/2008/07/08/13639.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://blog.jztele.com/hifreebsd/comments/commentRss/13639.html</wfw:commentRss><trackback:ping>http://blog.jztele.com/hifreebsd/services/trackbacks/13639.html</trackback:ping><description>&lt;div style="FONT-SIZE: 10pt"&gt;看了还不错, 转贴 &lt;a href="http://hi.baidu.com/jk_cau/blog/item/619858351ab4488ea61e129f.html"&gt;http://hi.baidu.com/jk_cau/blog/item/619858351ab4488ea61e129f.html&lt;/a&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style="FONT-SIZE: 10pt"&gt;查看文章&amp;nbsp;&amp;nbsp; &lt;/div&gt;
&lt;div style="FONT-SIZE: 10pt"&gt;char (*p)[10] 与 char p[10]&lt;br&gt;2008-06-17 16:10&lt;br&gt;1、char p[10]&lt;/div&gt;
&lt;div style="FONT-SIZE: 10pt"&gt;p是数组类型。它指代数组。属于char [10]类型，（不是char *类型，和指针不要简单的混为一谈哦）。&lt;/div&gt;
&lt;div style="FONT-SIZE: 10pt"&gt;2、char (*p)[10]&lt;/div&gt;
&lt;div style="FONT-SIZE: 10pt"&gt;p是指向一个char [10]型数组的指针。因此，若有char q[10]，则p是指向q的指针。因此，有p=&amp;amp;q。&lt;/div&gt;
&lt;div style="FONT-SIZE: 10pt"&gt;注：p=q 报错。因为p是指向数组的指针类型（指向 char [10]类型的指针 ----char (*)[10]），而q是数组类型(char [10])，类型明显不符。因此用p=&amp;amp;q。（对比理解：int a＝5；int *pa；pa＝a；（error）pa＝&amp;amp;a;(right)）。&lt;/div&gt;
&lt;div style="FONT-SIZE: 10pt"&gt;例子：&lt;/div&gt;
&lt;div style="FONT-SIZE: 10pt"&gt;#include "stdafx.h"&lt;br&gt;#include "iostream"&lt;br&gt;using namespace std;&lt;/div&gt;
&lt;div style="FONT-SIZE: 10pt"&gt;&lt;br&gt;int main()&lt;br&gt;{&lt;br&gt;char (*p)[10];&lt;br&gt;char q[10]="hello,guy";&lt;br&gt;p=&amp;amp;q;&lt;br&gt;cout&amp;lt;&amp;lt;sizeof(p)&amp;lt;&amp;lt;" "&amp;lt;&amp;lt;sizeof(q)&amp;lt;&amp;lt;endl;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br&gt;cout&amp;lt;&amp;lt;q&amp;lt;&amp;lt;endl;&lt;br&gt;cout&amp;lt;&amp;lt;p&amp;lt;&amp;lt;endl;&lt;br&gt;cout&amp;lt;&amp;lt;*p&amp;lt;&amp;lt;endl;&lt;br&gt;cout&amp;lt;&amp;lt;*q&amp;lt;&amp;lt;endl;&lt;br&gt;cout&amp;lt;&amp;lt;**p&amp;lt;&amp;lt;endl;&lt;br&gt;return 0;&lt;br&gt;}&lt;/div&gt;
&lt;div style="FONT-SIZE: 10pt"&gt;***********************************************&lt;/div&gt;
&lt;div style="FONT-SIZE: 10pt"&gt;4 10&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //sizeof(q):sizeof(char)*10&lt;br&gt;hello,guy&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //q指代的是整个数组，因为q是数组类型，不是指针类型&lt;br&gt;0012FF70&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //p指向数组，p中的数据是数组的首地址。&lt;br&gt;hello,guy&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //*p即是q（p=&amp;amp;q）&lt;br&gt;h&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //*q，似乎比较特殊（有点说不清了，呵呵），是数组第一个元素。&lt;br&gt;h&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //**p即是*q。&lt;br&gt;Press any key to continue&lt;/div&gt;
&lt;img src ="http://blog.jztele.com/hifreebsd/aggbug/13639.html" width = "1" height = "1" /&gt;</description></item><item><dc:creator>hihee的博客</dc:creator><title>毕业</title><link>http://blog.jztele.com/hifreebsd/archive/2008/07/08/13638.html</link><pubDate>Tue, 08 Jul 2008 05:27:00 GMT</pubDate><guid>http://blog.jztele.com/hifreebsd/archive/2008/07/08/13638.html</guid><wfw:comment>http://blog.jztele.com/hifreebsd/comments/13638.html</wfw:comment><comments>http://blog.jztele.com/hifreebsd/archive/2008/07/08/13638.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://blog.jztele.com/hifreebsd/comments/commentRss/13638.html</wfw:commentRss><trackback:ping>http://blog.jztele.com/hifreebsd/services/trackbacks/13638.html</trackback:ping><description>&lt;div style="FONT-SIZE: 10pt"&gt;我已毕业了, 28号离开了焦作,&lt;br&gt;真不知道什么时候能再回去呀.&lt;br&gt;宿舍几个各奔南北去了;&lt;/div&gt;
&lt;div style="FONT-SIZE: 10pt"&gt;李建,振豪,国元,罗军,阿基,长久,我,&lt;/div&gt;
&lt;div style="FONT-SIZE: 10pt"&gt;----来自406的一群小伙子, 还有戴正旺,小娟,&lt;/div&gt;
&lt;div style="FONT-SIZE: 10pt"&gt;还有薛艳,安晋超,石作敏&lt;/div&gt;
&lt;div style="FONT-SIZE: 10pt"&gt;各奔南北了.&lt;/div&gt;
&lt;div style="FONT-SIZE: 10pt"&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style="FONT-SIZE: 10pt"&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;img src ="http://blog.jztele.com/hifreebsd/aggbug/13638.html" width = "1" height = "1" /&gt;</description></item><item><dc:creator>hifreebsd@tom.com的博客</dc:creator><title>栈的顺序存储结构及运算实现</title><link>http://blog.jztele.com/hifreebsd/archive/2008/06/09/12629.html</link><pubDate>Sun, 08 Jun 2008 17:20:00 GMT</pubDate><guid>http://blog.jztele.com/hifreebsd/archive/2008/06/09/12629.html</guid><wfw:comment>http://blog.jztele.com/hifreebsd/comments/12629.html</wfw:comment><comments>http://blog.jztele.com/hifreebsd/archive/2008/06/09/12629.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://blog.jztele.com/hifreebsd/comments/commentRss/12629.html</wfw:commentRss><trackback:ping>http://blog.jztele.com/hifreebsd/services/trackbacks/12629.html</trackback:ping><description>&lt;div style="FONT-SIZE: 10pt"&gt;平常写一写，就当作练习吧。&lt;/div&gt;
&lt;div style="FONT-SIZE: 10pt"&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style="FONT-SIZE: 10pt"&gt;typedef int ElemType;&lt;br&gt;typedef struct&lt;br&gt;{&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ElemType elem[MAXSIZE];&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;int top;&lt;br&gt;}SeqStack;&lt;/div&gt;
&lt;div style="FONT-SIZE: 10pt"&gt;// 栈初始化&lt;br&gt;void Init_SeqStack(SeqStack *s)&lt;br&gt;{&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;s-&amp;gt;top = -1;&amp;nbsp;&lt;br&gt;}&lt;/div&gt;
&lt;div style="FONT-SIZE: 10pt"&gt;// 判断栈是否空&lt;br&gt;int Empty_SeqStack(SeqStack)&lt;br&gt;{&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if (s-&amp;gt;top == -1) return true;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;else&lt;/div&gt;
&lt;div style="FONT-SIZE: 10pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;/div&gt;
&lt;div style="FONT-SIZE: 10pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return true;&lt;/div&gt;
&lt;div style="FONT-SIZE: 10pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br&gt;}&lt;/div&gt;
&lt;div style="FONT-SIZE: 10pt"&gt;// 入栈&lt;br&gt;int Push_SeqStack(SeqStack *s)&lt;br&gt;{&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if (s-&amp;gt;top == MAXSIZE -1) return OVERFLOW; // 上溢&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;else&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;s-&amp;gt;top++;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;// 栈顶指针加1&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;s-&amp;gt;elem[s-&amp;gt;top] = x; &amp;nbsp;&amp;nbsp; // 存入栈顶值&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return OK;&amp;nbsp;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br&gt;}&lt;/div&gt;
&lt;div style="FONT-SIZE: 10pt"&gt;// 出栈&lt;br&gt;int Pop_SeqStack(SeqStack *s, ElemType *y)&lt;br&gt;{&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if (Empty_SeqStack(s)) return OVERFLOW; // 空栈&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;else&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*y = s-&amp;gt;elem[s-&amp;gt;top];&amp;nbsp;&amp;nbsp; // 取得栈顶值&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;s-&amp;gt;top--;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // 栈顶指针减1&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return OK;&amp;nbsp;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br&gt;}&lt;/div&gt;
&lt;div style="FONT-SIZE: 10pt"&gt;// 取栈顶元素&lt;br&gt;ElemType Top_SeqStack(SeqStack *s)&lt;br&gt;{&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if (Empty_SeqStack(s)) return OVERFLOW; // 空栈&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;else&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return (s-&amp;gt;elem[s-&amp;gt;top]);&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br&gt;}&lt;br&gt;&lt;/div&gt;
&lt;img src ="http://blog.jztele.com/hifreebsd/aggbug/12629.html" width = "1" height = "1" /&gt;</description></item><item><dc:creator>hifreebsd@tom.com的博客</dc:creator><title>把slax linux装进U盘。</title><link>http://blog.jztele.com/hifreebsd/archive/2008/06/01/12345.html</link><pubDate>Sat, 31 May 2008 16:21:00 GMT</pubDate><guid>http://blog.jztele.com/hifreebsd/archive/2008/06/01/12345.html</guid><wfw:comment>http://blog.jztele.com/hifreebsd/comments/12345.html</wfw:comment><comments>http://blog.jztele.com/hifreebsd/archive/2008/06/01/12345.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://blog.jztele.com/hifreebsd/comments/commentRss/12345.html</wfw:commentRss><trackback:ping>http://blog.jztele.com/hifreebsd/services/trackbacks/12345.html</trackback:ping><description>&lt;div style="FONT-SIZE: 10pt"&gt;今天，把DOS装进126m人U盘了，其实我把U盘格式成fat（不是fat32呀），&lt;br&gt;选的是USB-ZIP模式，真不错，也不怕没光驱了，然后我把MaxDOS也拷进去，&lt;br&gt;也可以用maxdos。&lt;/div&gt;
&lt;div style="FONT-SIZE: 10pt"&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style="FONT-SIZE: 10pt"&gt;我还把1G的U盘，装了个slax linux，还不错，才200M不到，里面挺全的，&lt;br&gt;不过救急就够了，以后慢慢玩玩，不过没有MAKE，GCC，看来有空给装上去。&lt;/div&gt;
&lt;img src ="http://blog.jztele.com/hifreebsd/aggbug/12345.html" width = "1" height = "1" /&gt;</description></item><item><dc:creator>djalion(亮)的博客</dc:creator><title>做毕业设计时用django写了在线聊天。</title><link>http://blog.jztele.com/hifreebsd/archive/2008/05/25/11995.html</link><pubDate>Sat, 24 May 2008 18:27:00 GMT</pubDate><guid>http://blog.jztele.com/hifreebsd/archive/2008/05/25/11995.html</guid><wfw:comment>http://blog.jztele.com/hifreebsd/comments/11995.html</wfw:comment><comments>http://blog.jztele.com/hifreebsd/archive/2008/05/25/11995.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://blog.jztele.com/hifreebsd/comments/commentRss/11995.html</wfw:commentRss><trackback:ping>http://blog.jztele.com/hifreebsd/services/trackbacks/11995.html</trackback:ping><description>&lt;div style="FONT-SIZE: 10pt"&gt;用django写了个简易的在线聊天，用的是sqlite数据库，&lt;/div&gt;
&lt;div style="FONT-SIZE: 10pt"&gt;以前看过php, 知道如何写在线聊天。&lt;/div&gt;
&lt;div style="FONT-SIZE: 10pt"&gt;其实就是frameset那边设置一下，自己把它认为一下子打开了几个网页，&lt;/div&gt;
&lt;div style="FONT-SIZE: 10pt"&gt;但是同时打开时，在浏览器的地址栏上我们只能看到其中一个，&lt;/div&gt;
&lt;div style="FONT-SIZE: 10pt"&gt;另外几个子frame 的地址把其认为是在后台打开，同时也得到urls.py中设置一下，&lt;/div&gt;
&lt;div style="FONT-SIZE: 10pt"&gt;frame中的src设置成相对的路径就行了。&lt;/div&gt;
&lt;div style="FONT-SIZE: 10pt"&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style="FONT-SIZE: 10pt"&gt;因为学校的网络真的不好，经常几天上不了网，&lt;/div&gt;
&lt;div style="FONT-SIZE: 10pt"&gt;因此这次想到了用网页进行在线聊天，非常简单的聊天，只能传送文字。&lt;/div&gt;
&lt;div style="FONT-SIZE: 10pt"&gt;不过我也不打算继续深入做这个在线聊天,一时间不够，二来精力有限呀。&lt;/div&gt;
&lt;div style="FONT-SIZE: 10pt"&gt;但愿以后有空，抽出时间继续做下去。&lt;/div&gt;
&lt;div style="FONT-SIZE: 10pt"&gt;唉，如果早两年写出来就好了。&lt;/div&gt;
&lt;div style="FONT-SIZE: 10pt"&gt;&amp;nbsp;&lt;/div&gt;
&lt;img src ="http://blog.jztele.com/hifreebsd/aggbug/11995.html" width = "1" height = "1" /&gt;</description></item></channel></rss>