<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom"><title type="text">博客园_hbb0b0</title><subtitle type="text"/><id>http://feed.cnblogs.com/blog/u/51239/rss</id><updated>2012-03-02T09:55:39Z</updated><author><name>b0b0</name><uri>http://www.cnblogs.com/hbb0b0/</uri></author><generator>feed.cnblogs.com</generator><link rel="alternate" type="text/html" href="http://www.cnblogs.com/hbb0b0/"/><link rel="self" type="application/atom+xml" href="http://feed.cnblogs.com/blog/u/51239/rss"/><entry><id>http://www.cnblogs.com/hbb0b0/archive/2011/09/12/2174034.html</id><title type="text">Log4net多程序集使用独立的配置文件</title><summary type="text">多程序集在相同的进程中使用独立的配置文件。 在平时的软件开发中常常会使用一些第三方的库，第三方的库与我们的程序都使用log4net来做日志记录，在默认的情况下我们使用相同的配置来使用log4net的的配置文件。但是在很多情况下，我们需要的日志配置与第三方类库的日志配置信息需要是独立的。在这种情况下如何解决此问题？ 解决方案结构如下： 应用程序SimpleApp与SharedModule使用相同的配置，第三方类库SimpleModule使用独立的配置。 SimpleApp EntryPoint的源代码 #region Copyright &amp; License // // ...</summary><published>2011-09-12T06:52:00Z</published><updated>2011-09-12T06:52:00Z</updated><author><name>b0b0</name><uri>http://www.cnblogs.com/hbb0b0/</uri></author><link rel="alternate" href="http://www.cnblogs.com/hbb0b0/archive/2011/09/12/2174034.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/hbb0b0/archive/2011/09/12/2174034.html"/><content type="html">&lt;p&gt;&lt;strong&gt;&amp;nbsp;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;多程序集在相同的进程中使用独立的配置文件。&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;在平时的软件开发中常常会使用一些第三方的库，第三方的库与我们的程序都使用log4net来做日志记录，在默认的情况下我们使用相同的配置来使用log4net的的配置文件。但是在很多情况下，我们需要的日志配置与第三方类库的日志配置信息需要是独立的。在这种情况下如何解决此问题？&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;解决方案结构如下：&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;应用程序SimpleApp与SharedModule使用相同的配置，第三方类库SimpleModule使用独立的配置。&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/hbb0b0/201109/201109121451327222.gif"&gt;&lt;img title="clip_image002" style="border-right: 0px; border-top: 0px; display: inline; border-left: 0px; border-bottom: 0px" alt="clip_image002" src="http://images.cnblogs.com/cnblogs_com/hbb0b0/201109/201109121451339207.gif" border="0" height="244" width="156" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;SimpleApp EntryPoint的源代码&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;#&lt;strong&gt;region &lt;/strong&gt;Copyright &amp;amp; License&lt;/p&gt;  &lt;p&gt;//&lt;/p&gt;  &lt;p&gt;// Copyright 2001-2005 The Apache Software Foundation&lt;/p&gt;  &lt;p&gt;//&lt;/p&gt;  &lt;p&gt;// Licensed under the Apache License, Version 2.0 (the "License");&lt;/p&gt;  &lt;p&gt;// you may not use this file except in compliance with the License.&lt;/p&gt;  &lt;p&gt;// You may obtain a copy of the License at&lt;/p&gt;  &lt;p&gt;//&lt;/p&gt;  &lt;p&gt;// http://www.apache.org/licenses/LICENSE-2.0&lt;/p&gt;  &lt;p&gt;//&lt;/p&gt;  &lt;p&gt;// Unless required by applicable law or agreed to in writing, software&lt;/p&gt;  &lt;p&gt;// distributed under the License is distributed on an "AS IS" BASIS,&lt;/p&gt;  &lt;p&gt;// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.&lt;/p&gt;  &lt;p&gt;// See the License for the specific language governing permissions and&lt;/p&gt;  &lt;p&gt;// limitations under the License.&lt;/p&gt;  &lt;p&gt;//&lt;/p&gt;  &lt;p&gt;#&lt;strong&gt;endregion&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;// Configure logging for this assembly using the 'SimpleApp.exe.log4net' file&lt;/p&gt;  &lt;p&gt;//配置log4net监视的配置文件后缀为log4net的文件&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;[assembly: log4net.Config.XmlConfigurator(ConfigFileExtension="log4net", Watch=true)]&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;// The following alias attribute can be used to capture the logging &lt;/p&gt;  &lt;p&gt;// repository for the 'SimpleModule' assembly. Without specifying this &lt;/p&gt;  &lt;p&gt;// attribute the logging configuration for the 'SimpleModule' assembly&lt;/p&gt;  &lt;p&gt;// will be read from the 'SimpleModule.dll.log4net' file. When this&lt;/p&gt;  &lt;p&gt;// attribute is specified the configuration will be shared with this&lt;/p&gt;  &lt;p&gt;// assemby's configuration.&lt;/p&gt;  &lt;p&gt;//[assembly: log4net.Config.AliasRepository("SimpleModule")]&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;namespace &lt;/strong&gt;SimpleApp&lt;/p&gt;  &lt;p&gt;{&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;using &lt;/strong&gt;System;&lt;/p&gt;  &lt;p&gt;/// &amp;lt;&lt;strong&gt;summary&lt;/strong&gt;&amp;gt;&lt;/p&gt;  &lt;p&gt;/// Summary description for Class1.&lt;/p&gt;  &lt;p&gt;/// &amp;lt;&lt;strong&gt;/summary&lt;/strong&gt;&amp;gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;public &lt;/strong&gt;class EntryPoint&lt;/p&gt;  &lt;p&gt;{&lt;/p&gt;  &lt;p&gt;// Create a logger for use in this class&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;private &lt;/strong&gt;static readonly log4net.ILog log = log4net.LogManager.&lt;strong&gt;GetLogger&lt;/strong&gt;(System.Reflection.MethodBase.&lt;strong&gt;GetCurrentMethod&lt;/strong&gt;().DeclaringType);&lt;/p&gt;  &lt;p&gt;/// &amp;lt;&lt;strong&gt;summary&lt;/strong&gt;&amp;gt;&lt;/p&gt;  &lt;p&gt;/// The main entry point for the application.&lt;/p&gt;  &lt;p&gt;/// &amp;lt;&lt;strong&gt;/summary&lt;/strong&gt;&amp;gt;&lt;/p&gt;  &lt;p&gt;[STAThread]&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;public &lt;/strong&gt;static void &lt;strong&gt;Main&lt;/strong&gt;(string[] args)&lt;/p&gt;  &lt;p&gt;{&lt;/p&gt;  &lt;p&gt;args=&lt;strong&gt;new &lt;/strong&gt;string[] {"3","7"};&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;if &lt;/strong&gt;(log.IsInfoEnabled) log.&lt;strong&gt;Info&lt;/strong&gt;(args);&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;if &lt;/strong&gt;(args.Length != 2)&lt;/p&gt;  &lt;p&gt;{&lt;/p&gt;  &lt;p&gt;log.&lt;strong&gt;Error&lt;/strong&gt;("Must supply 2 command line arguments");&lt;/p&gt;  &lt;p&gt;}&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;else&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;/strong&gt;{&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;int &lt;/strong&gt;left = &lt;strong&gt;int&lt;/strong&gt;.&lt;strong&gt;Parse&lt;/strong&gt;(args[0]);&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;int &lt;/strong&gt;right = &lt;strong&gt;int&lt;/strong&gt;.&lt;strong&gt;Parse&lt;/strong&gt;(args[1]);&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;int &lt;/strong&gt;result = 0;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;if &lt;/strong&gt;(log.IsDebugEnabled) log.&lt;strong&gt;Debug&lt;/strong&gt;("Adding [" + left + "] to [" + right + "]");&lt;/p&gt;  &lt;p&gt;result = (&lt;strong&gt;new &lt;/strong&gt;SimpleModule.&lt;strong&gt;Math&lt;/strong&gt;()).&lt;strong&gt;Add&lt;/strong&gt;(left, right);&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;if &lt;/strong&gt;(log.IsDebugEnabled) log.&lt;strong&gt;Debug&lt;/strong&gt;("Result [" + result + "]");&lt;/p&gt;  &lt;p&gt;Console.Out.&lt;strong&gt;WriteLine&lt;/strong&gt;(result);&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;if &lt;/strong&gt;(log.IsDebugEnabled) log.&lt;strong&gt;Debug&lt;/strong&gt;("Subtracting [" + right + "] from [" + left + "]");&lt;/p&gt;  &lt;p&gt;result = (&lt;strong&gt;new &lt;/strong&gt;SharedModule.&lt;strong&gt;Math&lt;/strong&gt;()).&lt;strong&gt;Subtract&lt;/strong&gt;(left, right);&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;if &lt;/strong&gt;(log.IsDebugEnabled) log.&lt;strong&gt;Debug&lt;/strong&gt;("Result [" + result + "]");&lt;/p&gt;  &lt;p&gt;Console.Out.&lt;strong&gt;WriteLine&lt;/strong&gt;(result);&lt;/p&gt;  &lt;p&gt;}&lt;/p&gt;  &lt;p&gt;Console.&lt;strong&gt;Read &lt;/strong&gt;();&lt;/p&gt;  &lt;p&gt;}&lt;/p&gt;  &lt;p&gt;}&lt;/p&gt;  &lt;p&gt;}&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;SimpleApp.exe.log4net 配置&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&amp;lt;?xml version="1.0" encoding="utf-8" ?&amp;gt;&lt;/p&gt;  &lt;p&gt;&amp;lt;!-- This section contains the log4net configuration settings --&amp;gt;&lt;/p&gt;  &lt;p&gt;&amp;lt;log4net&amp;gt;&lt;/p&gt;  &lt;p&gt;&amp;lt;!-- Define some output appenders --&amp;gt;&lt;/p&gt;  &lt;p&gt;&amp;lt;appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender" &amp;gt;&lt;/p&gt;  &lt;p&gt;&amp;lt;layout type="log4net.Layout.PatternLayout"&amp;gt;&lt;/p&gt;  &lt;p&gt;&amp;lt;conversionPattern value="[SimpleAppConfig] %date [%thread] %-5level %logger - %message%newline" /&amp;gt;&lt;/p&gt;  &lt;p&gt;&amp;lt;/layout&amp;gt;&lt;/p&gt;  &lt;p&gt;&amp;lt;/appender&amp;gt;&lt;/p&gt;  &lt;p&gt;&amp;lt;appender name="LogFileAppender" type="log4net.Appender.FileAppender"&amp;gt;&lt;/p&gt;  &lt;p&gt;&amp;lt;file value="log-file.txt" /&amp;gt;&lt;/p&gt;  &lt;p&gt;&amp;lt;!-- Example using environment variables in params --&amp;gt;&lt;/p&gt;  &lt;p&gt;&amp;lt;!-- &amp;lt;file value="${TMP}\log-file.txt" /&amp;gt; --&amp;gt;&lt;/p&gt;  &lt;p&gt;&amp;lt;appendToFile value="true" /&amp;gt;&lt;/p&gt;  &lt;p&gt;&amp;lt;!-- An alternate output encoding can be specified --&amp;gt;&lt;/p&gt;  &lt;p&gt;&amp;lt;!-- &amp;lt;encoding value="unicodeFFFE" /&amp;gt; --&amp;gt;&lt;/p&gt;  &lt;p&gt;&amp;lt;layout type="log4net.Layout.PatternLayout"&amp;gt;&lt;/p&gt;  &lt;p&gt;&amp;lt;header value="[Header]&amp;#13;&amp;#10;" /&amp;gt;&lt;/p&gt;  &lt;p&gt;&amp;lt;footer value="[Footer]&amp;#13;&amp;#10;" /&amp;gt;&lt;/p&gt;  &lt;p&gt;&amp;lt;conversionPattern value="%date [%thread] %-5level %logger [%ndc] &amp;amp;lt;%property{auth}&amp;amp;gt; - %message%newline" /&amp;gt;&lt;/p&gt;  &lt;p&gt;&amp;lt;/layout&amp;gt;&lt;/p&gt;  &lt;p&gt;&amp;lt;!-- Alternate layout using XML&lt;/p&gt;  &lt;p&gt;&amp;lt;layout type="log4net.Layout.XMLLayout" /&amp;gt; --&amp;gt;&lt;/p&gt;  &lt;p&gt;&amp;lt;/appender&amp;gt;&lt;/p&gt;  &lt;p&gt;&amp;lt;!-- Setup the root category, add the appenders and set the default level --&amp;gt;&lt;/p&gt;  &lt;p&gt;&amp;lt;root&amp;gt;&lt;/p&gt;  &lt;p&gt;&amp;lt;level value="DEBUG" /&amp;gt;&lt;/p&gt;  &lt;p&gt;&amp;lt;appender-ref ref="ConsoleAppender" /&amp;gt;&lt;/p&gt;  &lt;p&gt;&amp;lt;appender-ref ref="LogFileAppender" /&amp;gt;&lt;/p&gt;  &lt;p&gt;&amp;lt;/root&amp;gt;&lt;/p&gt;  &lt;p&gt;&amp;lt;/log4net&amp;gt; &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;SimpleModule 项目&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Math.cs 代码&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;#&lt;strong&gt;region &lt;/strong&gt;Copyright &amp;amp; License&lt;/p&gt;  &lt;p&gt;//&lt;/p&gt;  &lt;p&gt;// Copyright 2001-2005 The Apache Software Foundation&lt;/p&gt;  &lt;p&gt;//&lt;/p&gt;  &lt;p&gt;// Licensed under the Apache License, Version 2.0 (the "License");&lt;/p&gt;  &lt;p&gt;// you may not use this file except in compliance with the License.&lt;/p&gt;  &lt;p&gt;// You may obtain a copy of the License at&lt;/p&gt;  &lt;p&gt;//&lt;/p&gt;  &lt;p&gt;// http://www.apache.org/licenses/LICENSE-2.0&lt;/p&gt;  &lt;p&gt;//&lt;/p&gt;  &lt;p&gt;// Unless required by applicable law or agreed to in writing, software&lt;/p&gt;  &lt;p&gt;// distributed under the License is distributed on an "AS IS" BASIS,&lt;/p&gt;  &lt;p&gt;// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.&lt;/p&gt;  &lt;p&gt;// See the License for the specific language governing permissions and&lt;/p&gt;  &lt;p&gt;// limitations under the License.&lt;/p&gt;  &lt;p&gt;//&lt;/p&gt;  &lt;p&gt;#&lt;strong&gt;endregion&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;// We want this assembly to have a seperate logging repository to the &lt;/p&gt;  &lt;p&gt;// rest of the application. We will configure this repository seperatly.&lt;/p&gt;  &lt;p&gt;//设定配置文件文件使用独立配置&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;[assembly: log4net.Config.Repository("SimpleModule")]&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;// Configure logging for this assembly using the 'SimpleModule.dll.log4net' file&lt;/p&gt;  &lt;p&gt;//配置log4net监视的配置文件后缀为log4net的文件&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;[assembly: log4net.Config.XmlConfigurator(ConfigFileExtension="log4net", Watch=true)]&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;namespace &lt;/strong&gt;SimpleModule&lt;/p&gt;  &lt;p&gt;{&lt;/p&gt;  &lt;p&gt;/// &amp;lt;&lt;strong&gt;summary&lt;/strong&gt;&amp;gt;&lt;/p&gt;  &lt;p&gt;/// Summary description for Math.&lt;/p&gt;  &lt;p&gt;/// &amp;lt;&lt;strong&gt;/summary&lt;/strong&gt;&amp;gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;public &lt;/strong&gt;class Math&lt;/p&gt;  &lt;p&gt;{&lt;/p&gt;  &lt;p&gt;// Create a logger for use in this class&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;private &lt;/strong&gt;static readonly log4net.ILog log = log4net.LogManager.&lt;strong&gt;GetLogger&lt;/strong&gt;(System.Reflection.MethodBase.&lt;strong&gt;GetCurrentMethod&lt;/strong&gt;().DeclaringType);&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;public &lt;/strong&gt;&lt;strong&gt;Math&lt;/strong&gt;()&lt;/p&gt;  &lt;p&gt;{&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;if &lt;/strong&gt;(log.IsDebugEnabled) log.&lt;strong&gt;Debug&lt;/strong&gt;("Constructor");&lt;/p&gt;  &lt;p&gt;}&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;public &lt;/strong&gt;&lt;strong&gt;int &lt;/strong&gt;&lt;strong&gt;Add&lt;/strong&gt;(&lt;strong&gt;int &lt;/strong&gt;left, &lt;strong&gt;int &lt;/strong&gt;right)&lt;/p&gt;  &lt;p&gt;{&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;int &lt;/strong&gt;result = left + right;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;if &lt;/strong&gt;(log.IsInfoEnabled) log.&lt;strong&gt;Info&lt;/strong&gt;("" + left + " + " + right + " = " + result);&lt;/p&gt;  &lt;p&gt;return result;&lt;/p&gt;  &lt;p&gt;}&lt;/p&gt;  &lt;p&gt;}&lt;/p&gt;  &lt;p&gt;}&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;SimpleModule.dll.log4net 配置&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&amp;lt;?xml version="1.0" encoding="utf-8" ?&amp;gt;&lt;/p&gt;  &lt;p&gt;&amp;lt;!-- This section contains the log4net configuration settings --&amp;gt;&lt;/p&gt;  &lt;p&gt;&amp;lt;log4net&amp;gt;&lt;/p&gt;  &lt;p&gt;&amp;lt;!-- Define some output appenders --&amp;gt;&lt;/p&gt;  &lt;p&gt;&amp;lt;appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender" &amp;gt;&lt;/p&gt;  &lt;p&gt;&amp;lt;!--&amp;lt;file value="SimpleModule.txt" /&amp;gt;--&amp;gt;&lt;/p&gt;  &lt;p&gt;&amp;lt;layout type="log4net.Layout.PatternLayout"&amp;gt;&lt;/p&gt;  &lt;p&gt;&amp;lt;conversionPattern value="[hbb0b0SimpleModuleConfig] %date [%thread] %-5level %logger - %message%newline" /&amp;gt;&lt;/p&gt;  &lt;p&gt;&amp;lt;/layout&amp;gt;&lt;/p&gt;  &lt;p&gt;&amp;lt;/appender&amp;gt;&lt;/p&gt;  &lt;p&gt;&amp;lt;!-- Setup the root category, add the appenders and set the default priority --&amp;gt;&lt;/p&gt;  &lt;p&gt;&amp;lt;root&amp;gt;&lt;/p&gt;  &lt;p&gt;&amp;lt;level value="DEBUG" /&amp;gt;&lt;/p&gt;  &lt;p&gt;&amp;lt;appender-ref ref="ConsoleAppender" /&amp;gt;&lt;/p&gt;  &lt;p&gt;&amp;lt;/root&amp;gt;&lt;/p&gt;  &lt;p&gt;&amp;lt;/log4net&amp;gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;程序输出&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/hbb0b0/201109/201109121451334780.gif"&gt;&lt;img title="clip_image004" style="border-right: 0px; border-top: 0px; display: inline; border-left: 0px; border-bottom: 0px" alt="clip_image004" src="http://images.cnblogs.com/cnblogs_com/hbb0b0/201109/201109121451339796.gif" border="0" height="135" width="244" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/hbb0b0/aggbug/2174034.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/hbb0b0/archive/2011/09/12/2174034.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/hbb0b0/archive/2011/09/09/2172819.html</id><title type="text">gdb输入输出重定向</title><summary type="text">gdb中也可以使用重定向控制程序输出，如run &gt; outfile；tty命令可以指定输入输出的终端设备，如：tty /dev 也可以使用输入重定向。 1 gdb linklist 2 run &lt;linklist.in linklist.in 作为输入文件，启动程序。</summary><published>2011-09-09T12:47:00Z</published><updated>2011-09-09T12:47:00Z</updated><author><name>b0b0</name><uri>http://www.cnblogs.com/hbb0b0/</uri></author><link rel="alternate" href="http://www.cnblogs.com/hbb0b0/archive/2011/09/09/2172819.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/hbb0b0/archive/2011/09/09/2172819.html"/><content type="html">&lt;p&gt;gdb中也可以使用重定向控制程序输出，如run &amp;gt; outfile；tty命令可以指定输入输出的终端设备，如：tty /dev   &lt;br /&gt;也可以使用输入重定向。    &lt;br /&gt;1&amp;nbsp; gdb linklist &lt;/p&gt;  &lt;p&gt;2 run &amp;lt;linklist.in &lt;/p&gt;  &lt;p&gt;linklist.in 作为输入文件，启动程序。&lt;/p&gt;&lt;img src="http://www.cnblogs.com/hbb0b0/aggbug/2172819.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/hbb0b0/archive/2011/09/09/2172819.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/hbb0b0/archive/2011/09/09/2172815.html</id><title type="text">C 链表实现</title><summary type="text">#include&lt;stdio.h&gt; #include&lt;stdlib.h&gt; #define show_func_info() printf ("------------%s----------\n", __func__); typedef struct node { int data; struct node *next; } Node; int delete_node (Node * head, int data); void show_linklist (Node * const head); v...</summary><published>2011-09-09T12:42:00Z</published><updated>2011-09-09T12:42:00Z</updated><author><name>b0b0</name><uri>http://www.cnblogs.com/hbb0b0/</uri></author><link rel="alternate" href="http://www.cnblogs.com/hbb0b0/archive/2011/09/09/2172815.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/hbb0b0/archive/2011/09/09/2172815.html"/><content type="html">&lt;div id="codeSnippetWrapper"&gt;   &lt;div id="codeSnippet" style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; overflow: visible; width: 100%; color: black; direction: ltr; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; text-align: left; border-bottom-style: none"&gt;     #include&amp;lt;stdio.h&amp;gt;&lt;!--CRLF--&gt;    #include&amp;lt;stdlib.h&amp;gt;&lt;!--CRLF--&gt;    &lt;span style="color: #cc6633"&gt;#define&lt;/span&gt;  show_func_info()  printf (&lt;span style="color: #006080"&gt;"------------%s----------\n"&lt;/span&gt;, __func__);&lt;!--CRLF--&gt;    &lt;span style="color: #0000ff"&gt;typedef&lt;/span&gt; &lt;span style="color: #0000ff"&gt;struct&lt;/span&gt; node&lt;!--CRLF--&gt;    {&lt;!--CRLF--&gt;      &lt;span style="color: #0000ff"&gt;int&lt;/span&gt; data;&lt;!--CRLF--&gt;      &lt;span style="color: #0000ff"&gt;struct&lt;/span&gt; node *next;&lt;!--CRLF--&gt;    } Node;&lt;!--CRLF--&gt;    &amp;nbsp;&lt;!--CRLF--&gt;    &lt;span style="color: #0000ff"&gt;int&lt;/span&gt; delete_node (Node * head, &lt;span style="color: #0000ff"&gt;int&lt;/span&gt; data);&lt;!--CRLF--&gt;    &lt;span style="color: #0000ff"&gt;void&lt;/span&gt; show_linklist (Node * &lt;span style="color: #0000ff"&gt;const&lt;/span&gt; head);&lt;!--CRLF--&gt;    &lt;span style="color: #0000ff"&gt;void&lt;/span&gt; clear_linklist (Node * head);&lt;!--CRLF--&gt;    Node *init_linklist ();&lt;!--CRLF--&gt;    &lt;span style="color: #0000ff"&gt;int&lt;/span&gt; insertafter_linklist (Node * &lt;span style="color: #0000ff"&gt;const&lt;/span&gt; *head, &lt;span style="color: #0000ff"&gt;int&lt;/span&gt; data);&lt;!--CRLF--&gt;    &lt;span style="color: #0000ff"&gt;int&lt;/span&gt; insert_linklist (Node * &lt;span style="color: #0000ff"&gt;const&lt;/span&gt; *head, &lt;span style="color: #0000ff"&gt;int&lt;/span&gt; data);&lt;!--CRLF--&gt;    &lt;span style="color: #008000"&gt;//反转链表&lt;/span&gt;&lt;!--CRLF--&gt;    Node **reverse_linklist (Node * *head);&lt;!--CRLF--&gt;    &lt;span style="color: #008000"&gt;//获取链表程度&lt;/span&gt;&lt;!--CRLF--&gt;    &lt;span style="color: #0000ff"&gt;int&lt;/span&gt; getlen_linklist (Node * &lt;span style="color: #0000ff"&gt;const&lt;/span&gt; head);&lt;!--CRLF--&gt;    &lt;span style="color: #0000ff"&gt;int&lt;/span&gt;&lt;!--CRLF--&gt;    main (&lt;span style="color: #0000ff"&gt;int&lt;/span&gt; argc, &lt;span style="color: #0000ff"&gt;char&lt;/span&gt; *argv[])&lt;!--CRLF--&gt;    {&lt;!--CRLF--&gt;    &amp;nbsp;&lt;!--CRLF--&gt;      Node *&lt;span style="color: #0000ff"&gt;const&lt;/span&gt; head = init_linklist ();&lt;!--CRLF--&gt;      printf (&lt;span style="color: #006080"&gt;"head(%p)\n"&lt;/span&gt;, head);&lt;!--CRLF--&gt;      &lt;span style="color: #0000ff"&gt;int&lt;/span&gt; data = 0;&lt;!--CRLF--&gt;      &lt;span style="color: #0000ff"&gt;while&lt;/span&gt; (scanf (&lt;span style="color: #006080"&gt;"%d"&lt;/span&gt;, &amp;amp;data) == 1)&lt;!--CRLF--&gt;        {&lt;!--CRLF--&gt;          printf (&lt;span style="color: #006080"&gt;"current data=%d\n"&lt;/span&gt;, data);&lt;!--CRLF--&gt;          insertafter_linklist (&amp;amp;head, data);&lt;!--CRLF--&gt;        }&lt;!--CRLF--&gt;      show_linklist (head);&lt;!--CRLF--&gt;      &lt;span style="color: #008000"&gt;//清除缓冲区&lt;/span&gt;&lt;!--CRLF--&gt;      &lt;span style="color: #008000"&gt;//方法1&lt;/span&gt;&lt;!--CRLF--&gt;      &lt;span style="color: #0000ff"&gt;while&lt;/span&gt; ((getchar ()) == &lt;span style="color: #006080"&gt;'\n'&lt;/span&gt;);&lt;!--CRLF--&gt;    &amp;nbsp;&lt;!--CRLF--&gt;      printf (&lt;span style="color: #006080"&gt;"insert node\n"&lt;/span&gt;);&lt;!--CRLF--&gt;    &amp;nbsp;&lt;!--CRLF--&gt;      &lt;span style="color: #0000ff"&gt;while&lt;/span&gt; (scanf (&lt;span style="color: #006080"&gt;"%d"&lt;/span&gt;, &amp;amp;data) == 1)&lt;!--CRLF--&gt;        {&lt;!--CRLF--&gt;          printf (&lt;span style="color: #006080"&gt;"insert data=%d\n"&lt;/span&gt;, data);&lt;!--CRLF--&gt;          insert_linklist (&amp;amp;head, data);&lt;!--CRLF--&gt;    &amp;nbsp;&lt;!--CRLF--&gt;        }&lt;!--CRLF--&gt;      show_linklist (head);&lt;!--CRLF--&gt;      Node *&lt;span style="color: #0000ff"&gt;const&lt;/span&gt; newhead = *reverse_linklist (&amp;amp;head);&lt;!--CRLF--&gt;      show_linklist (newhead);&lt;!--CRLF--&gt;      clear_linklist (head);&lt;!--CRLF--&gt;      clear_linklist (newhead);&lt;!--CRLF--&gt;      &lt;span style="color: #008000"&gt;//show_linklist(head);&lt;/span&gt;&lt;!--CRLF--&gt;    &amp;nbsp;&lt;!--CRLF--&gt;      &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; 0;&lt;!--CRLF--&gt;    }&lt;!--CRLF--&gt;    &amp;nbsp;&lt;!--CRLF--&gt;    &lt;span style="color: #0000ff"&gt;int&lt;/span&gt;&lt;!--CRLF--&gt;    delete_node (Node * head, &lt;span style="color: #0000ff"&gt;int&lt;/span&gt; data)&lt;!--CRLF--&gt;    {&lt;!--CRLF--&gt;      &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; 0;&lt;!--CRLF--&gt;    }&lt;!--CRLF--&gt;    &amp;nbsp;&lt;!--CRLF--&gt;    &lt;span style="color: #0000ff"&gt;void&lt;/span&gt;&lt;!--CRLF--&gt;    clear_linklist (Node * &lt;span style="color: #0000ff"&gt;const&lt;/span&gt; head)&lt;!--CRLF--&gt;    {&lt;!--CRLF--&gt;      Node *current = head;&lt;!--CRLF--&gt;      printf (&lt;span style="color: #006080"&gt;"------------%s----------\n"&lt;/span&gt;, __func__);&lt;!--CRLF--&gt;      &lt;span style="color: #0000ff"&gt;while&lt;/span&gt; (current-&amp;gt;next != NULL)&lt;!--CRLF--&gt;        {&lt;!--CRLF--&gt;    &amp;nbsp;&lt;!--CRLF--&gt;    &amp;nbsp;&lt;!--CRLF--&gt;          printf (&lt;span style="color: #006080"&gt;"free(%p)\n"&lt;/span&gt;, current);&lt;!--CRLF--&gt;          current = current-&amp;gt;next;&lt;!--CRLF--&gt;          free (current);&lt;!--CRLF--&gt;        }&lt;!--CRLF--&gt;    &amp;nbsp;&lt;!--CRLF--&gt;    }&lt;!--CRLF--&gt;    &amp;nbsp;&lt;!--CRLF--&gt;    &lt;span style="color: #0000ff"&gt;void&lt;/span&gt;&lt;!--CRLF--&gt;    show_linklist (Node * &lt;span style="color: #0000ff"&gt;const&lt;/span&gt; head)&lt;!--CRLF--&gt;    {&lt;!--CRLF--&gt;      Node *current = head;&lt;!--CRLF--&gt;      printf (&lt;span style="color: #006080"&gt;"------------%s----------\n"&lt;/span&gt;, __func__);&lt;!--CRLF--&gt;      printf (&lt;span style="color: #006080"&gt;"head(%p)\n"&lt;/span&gt;, head);&lt;!--CRLF--&gt;      &lt;span style="color: #0000ff"&gt;while&lt;/span&gt; (current-&amp;gt;next != NULL)&lt;!--CRLF--&gt;        {&lt;!--CRLF--&gt;    &amp;nbsp;&lt;!--CRLF--&gt;          current = current-&amp;gt;next;&lt;!--CRLF--&gt;          printf (&lt;span style="color: #006080"&gt;"address:%p  data:%d\n"&lt;/span&gt;, current, current-&amp;gt;data);&lt;!--CRLF--&gt;        }&lt;!--CRLF--&gt;    &amp;nbsp;&lt;!--CRLF--&gt;    }&lt;!--CRLF--&gt;    &amp;nbsp;&lt;!--CRLF--&gt;    Node *&lt;!--CRLF--&gt;    init_linklist ()&lt;!--CRLF--&gt;    {&lt;!--CRLF--&gt;      printf (&lt;span style="color: #006080"&gt;"------------%s----------\n"&lt;/span&gt;, __func__);&lt;!--CRLF--&gt;      &lt;span style="color: #008000"&gt;//head 指向的内容不能修改&lt;/span&gt;&lt;!--CRLF--&gt;      Node *head = (Node *) malloc (&lt;span style="color: #0000ff"&gt;sizeof&lt;/span&gt; (Node));&lt;!--CRLF--&gt;      printf (&lt;span style="color: #006080"&gt;"head(%p)\n"&lt;/span&gt;, head);&lt;!--CRLF--&gt;      &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; head;&lt;!--CRLF--&gt;    &amp;nbsp;&lt;!--CRLF--&gt;    }&lt;!--CRLF--&gt;    &amp;nbsp;&lt;!--CRLF--&gt;    &lt;span style="color: #0000ff"&gt;int&lt;/span&gt;&lt;!--CRLF--&gt;    insertafter_linklist (Node * &lt;span style="color: #0000ff"&gt;const&lt;/span&gt; *head, &lt;span style="color: #0000ff"&gt;int&lt;/span&gt; data)&lt;!--CRLF--&gt;    {&lt;!--CRLF--&gt;      printf (&lt;span style="color: #006080"&gt;"------------%s----------\n"&lt;/span&gt;, __func__);&lt;!--CRLF--&gt;      Node *current = *head;&lt;!--CRLF--&gt;      &lt;span style="color: #0000ff"&gt;while&lt;/span&gt; (current-&amp;gt;next != NULL)&lt;!--CRLF--&gt;        {&lt;!--CRLF--&gt;          current = current-&amp;gt;next;&lt;!--CRLF--&gt;        }&lt;!--CRLF--&gt;      Node *next = (Node *) malloc (&lt;span style="color: #0000ff"&gt;sizeof&lt;/span&gt; (Node));&lt;!--CRLF--&gt;      next-&amp;gt;data = data;&lt;!--CRLF--&gt;      current-&amp;gt;next = next;&lt;!--CRLF--&gt;    }&lt;!--CRLF--&gt;    &amp;nbsp;&lt;!--CRLF--&gt;    &lt;span style="color: #0000ff"&gt;int&lt;/span&gt;&lt;!--CRLF--&gt;    insert_linklist (Node * &lt;span style="color: #0000ff"&gt;const&lt;/span&gt; *head, &lt;span style="color: #0000ff"&gt;int&lt;/span&gt; data)&lt;!--CRLF--&gt;    {&lt;!--CRLF--&gt;      &lt;span style="color: #0000ff"&gt;int&lt;/span&gt; result = 0;&lt;!--CRLF--&gt;      printf (&lt;span style="color: #006080"&gt;"------------%s----------\n"&lt;/span&gt;, __func__);&lt;!--CRLF--&gt;      &lt;span style="color: #008000"&gt;//当前节点&lt;/span&gt;&lt;!--CRLF--&gt;      Node *current = *head;&lt;!--CRLF--&gt;      &lt;span style="color: #008000"&gt;//当前节点的前一个节点&lt;/span&gt;&lt;!--CRLF--&gt;      Node *before = NULL;&lt;!--CRLF--&gt;      &lt;span style="color: #0000ff"&gt;while&lt;/span&gt; (current-&amp;gt;next != NULL)&lt;!--CRLF--&gt;        {&lt;!--CRLF--&gt;          before = current;&lt;!--CRLF--&gt;          current = current-&amp;gt;next;&lt;!--CRLF--&gt;          &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (current-&amp;gt;data &amp;gt;= data)&lt;!--CRLF--&gt;        {&lt;!--CRLF--&gt;          result = 1;&lt;!--CRLF--&gt;          &lt;span style="color: #0000ff"&gt;break&lt;/span&gt;;&lt;!--CRLF--&gt;        }&lt;!--CRLF--&gt;        }&lt;!--CRLF--&gt;      Node *newnode = (Node *) malloc (&lt;span style="color: #0000ff"&gt;sizeof&lt;/span&gt; (Node));&lt;!--CRLF--&gt;      newnode-&amp;gt;data = data;&lt;!--CRLF--&gt;      &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (result == 1)&lt;!--CRLF--&gt;        {&lt;!--CRLF--&gt;          printf (&lt;span style="color: #006080"&gt;"current address:%p  data:%d\n"&lt;/span&gt;, current, current-&amp;gt;data);&lt;!--CRLF--&gt;          printf (&lt;span style="color: #006080"&gt;"before address:%p  data:%d\n"&lt;/span&gt;, before, before-&amp;gt;data);&lt;!--CRLF--&gt;    &amp;nbsp;&lt;!--CRLF--&gt;          before-&amp;gt;next = newnode;&lt;!--CRLF--&gt;          newnode-&amp;gt;next = current;&lt;!--CRLF--&gt;        }&lt;!--CRLF--&gt;      &lt;span style="color: #0000ff"&gt;else&lt;/span&gt;&lt;!--CRLF--&gt;        {&lt;!--CRLF--&gt;          current-&amp;gt;next = newnode;&lt;!--CRLF--&gt;        }&lt;!--CRLF--&gt;      &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; result;&lt;!--CRLF--&gt;    }&lt;!--CRLF--&gt;    &amp;nbsp;&lt;!--CRLF--&gt;    Node **&lt;!--CRLF--&gt;    reverse_linklist (Node * *head)&lt;!--CRLF--&gt;    {&lt;!--CRLF--&gt;      printf (&lt;span style="color: #006080"&gt;"------------%s----------\n"&lt;/span&gt;, __func__);&lt;!--CRLF--&gt;      &lt;span style="color: #008000"&gt;//当前节点&lt;/span&gt;&lt;!--CRLF--&gt;      Node *current = *head;&lt;!--CRLF--&gt;      Node *before = NULL;&lt;!--CRLF--&gt;      Node *&lt;span style="color: #0000ff"&gt;const&lt;/span&gt; oldhead = *head;&lt;!--CRLF--&gt;      &lt;span style="color: #0000ff"&gt;int&lt;/span&gt; len = getlen_linklist (*head);&lt;!--CRLF--&gt;      printf (&lt;span style="color: #006080"&gt;"len(linklist)=%d\n"&lt;/span&gt;, len);&lt;!--CRLF--&gt;      Node **arrayPtr = malloc (&lt;span style="color: #0000ff"&gt;sizeof&lt;/span&gt; (Node **) * len);&lt;!--CRLF--&gt;      &lt;span style="color: #0000ff"&gt;int&lt;/span&gt; i = 0;&lt;!--CRLF--&gt;      printf (&lt;span style="color: #006080"&gt;"fill arrayPtr\n"&lt;/span&gt;);&lt;!--CRLF--&gt;      &lt;span style="color: #0000ff"&gt;while&lt;/span&gt; (current-&amp;gt;next != NULL)&lt;!--CRLF--&gt;        {&lt;!--CRLF--&gt;          before = current;&lt;!--CRLF--&gt;          current = current-&amp;gt;next;&lt;!--CRLF--&gt;          *(arrayPtr + i) = current;&lt;!--CRLF--&gt;          printf (&lt;span style="color: #006080"&gt;"arrayPtr+%d:%p  current:%p\n"&lt;/span&gt;, i, arrayPtr + i, current);&lt;!--CRLF--&gt;          i++;&lt;!--CRLF--&gt;    &amp;nbsp;&lt;!--CRLF--&gt;        }&lt;!--CRLF--&gt;      &lt;span style="color: #0000ff"&gt;int&lt;/span&gt; currentIndex = 0;&lt;!--CRLF--&gt;      current = oldhead;&lt;!--CRLF--&gt;      Node *reverseHead = malloc (&lt;span style="color: #0000ff"&gt;sizeof&lt;/span&gt; (Node));&lt;!--CRLF--&gt;      reverseHead-&amp;gt;next = NULL;&lt;!--CRLF--&gt;      reverseHead-&amp;gt;data = -1000;&lt;!--CRLF--&gt;      current = reverseHead;&lt;!--CRLF--&gt;      &lt;span style="color: #0000ff"&gt;while&lt;/span&gt; ((currentIndex = --len) &amp;gt;= 0)&lt;!--CRLF--&gt;        {&lt;!--CRLF--&gt;          (*(arrayPtr + currentIndex))-&amp;gt;next = NULL;&lt;!--CRLF--&gt;          current-&amp;gt;next = *(arrayPtr + currentIndex);&lt;!--CRLF--&gt;          current = current-&amp;gt;next;&lt;!--CRLF--&gt;    &amp;nbsp;&lt;!--CRLF--&gt;          printf (&lt;span style="color: #006080"&gt;"*current:%p  *(arrayPtr+%d):%p\n"&lt;/span&gt;, current, currentIndex,&lt;!--CRLF--&gt;              *(arrayPtr + currentIndex));&lt;!--CRLF--&gt;    &amp;nbsp;&lt;!--CRLF--&gt;        }&lt;!--CRLF--&gt;    &amp;nbsp;&lt;!--CRLF--&gt;      &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; &amp;amp;reverseHead;&lt;!--CRLF--&gt;    }&lt;!--CRLF--&gt;    &amp;nbsp;&lt;!--CRLF--&gt;    &lt;span style="color: #0000ff"&gt;int&lt;/span&gt;&lt;!--CRLF--&gt;    getlen_linklist (Node * &lt;span style="color: #0000ff"&gt;const&lt;/span&gt; head)&lt;!--CRLF--&gt;    {&lt;!--CRLF--&gt;      printf (&lt;span style="color: #006080"&gt;"------------%s----------\n"&lt;/span&gt;, __func__);&lt;!--CRLF--&gt;      Node *current = head;&lt;!--CRLF--&gt;      &lt;span style="color: #0000ff"&gt;int&lt;/span&gt; i = 0;&lt;!--CRLF--&gt;      &lt;span style="color: #0000ff"&gt;while&lt;/span&gt; (current-&amp;gt;next != NULL)&lt;!--CRLF--&gt;        {&lt;!--CRLF--&gt;          current = current-&amp;gt;next;&lt;!--CRLF--&gt;          ++i;&lt;!--CRLF--&gt;        }&lt;!--CRLF--&gt;      &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; i;&lt;!--CRLF--&gt;    &amp;nbsp;&lt;!--CRLF--&gt;    }&lt;!--CRLF--&gt;&lt;/div&gt;&lt;/div&gt;&lt;img src="http://www.cnblogs.com/hbb0b0/aggbug/2172815.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/hbb0b0/archive/2011/09/09/2172815.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/hbb0b0/archive/2011/09/03/2165356.html</id><title type="text">如何实现数据库实体生成工具</title><summary type="text">1 原理：利用 SqlDataReader .GetSchemaTable获取列元数据，然后根据列的元数据生成需要的实体。本程序主要用到了以下三个字段，SchemaTable的其它字段见MSDN. 名称 说明 ColumnName 列的名称；它可能不唯一。如...</summary><published>2011-09-03T05:40:00Z</published><updated>2011-09-03T05:40:00Z</updated><author><name>b0b0</name><uri>http://www.cnblogs.com/hbb0b0/</uri></author><link rel="alternate" href="http://www.cnblogs.com/hbb0b0/archive/2011/09/03/2165356.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/hbb0b0/archive/2011/09/03/2165356.html"/><content type="html">&lt;p&gt;&lt;strong&gt;&amp;nbsp;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;1 原理：&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;利用 SqlDataReader .GetSchemaTable获取列元数据，然后根据列的元数据生成需要的实体。本程序主要用到了以下三个字段，SchemaTable的其它字段见MSDN.&lt;table border="1" cellpadding="0" cellspacing="0"&gt;     &lt;tbody&gt;         &lt;tr&gt;             &lt;td valign="top" width="284"&gt;             &lt;p&gt;&lt;strong&gt;名称&lt;/strong&gt;&lt;/p&gt;             &lt;/td&gt;             &lt;td valign="top" width="284"&gt;             &lt;p&gt;&lt;strong&gt;说明&lt;/strong&gt;&lt;/p&gt;             &lt;/td&gt;         &lt;/tr&gt;         &lt;tr&gt;             &lt;td valign="top" width="284"&gt;             &lt;p&gt;ColumnName&lt;/p&gt;             &lt;/td&gt;             &lt;td valign="top" width="284"&gt;             &lt;p&gt;列的名称；它可能不唯一。如果无法确定该名称，则返回 null 值。此名称始终反映最近对当前视图或命令文本中的列进行的重命名。&lt;/p&gt;             &lt;/td&gt;         &lt;/tr&gt;         &lt;tr&gt;             &lt;td valign="top" width="284"&gt;             &lt;p&gt;DataType&lt;/p&gt;             &lt;/td&gt;             &lt;td valign="top" width="284"&gt;             &lt;p&gt;映射到列的 .NET Framework 类型。&lt;/p&gt;             &lt;/td&gt;         &lt;/tr&gt;         &lt;tr&gt;             &lt;td valign="top" width="284"&gt;             &lt;p&gt;AllowDBNull&lt;/p&gt;             &lt;/td&gt;             &lt;td valign="top" width="284"&gt;             &lt;p&gt;如果使用者可以将该列设置为 null 值，或者如果提供程序不能确定使用者是否可以将该列设置为 null 值，则设置该值。否则，不设置该值。即使列无法设置为 null 值，它仍可能包含 null 值。&lt;/p&gt;             &lt;/td&gt;         &lt;/tr&gt;     &lt;/tbody&gt;&lt;/table&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;2实现&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;(1) 表结构&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/hbb0b0/201109/201109031339413663.gif"&gt;&lt;img title="clip_image002" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" alt="clip_image002" src="http://images.cnblogs.com/cnblogs_com/hbb0b0/201109/201109031339411188.gif" border="0" height="187" width="244" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;(2) 生成表格的脚本&lt;/strong&gt;&lt;/p&gt;&lt;div id="codeSnippetWrapper" style="border-right: silver 1px solid; padding-right: 4px; border-top: silver 1px solid; padding-left: 4px; font-size: 8pt; padding-bottom: 4px; margin: 20px 0px 10px; overflow: auto; border-left: silver 1px solid; width: 97.5%; cursor: text; direction: ltr; max-height: 800px; line-height: 12pt; padding-top: 4px; border-bottom: silver 1px solid; font-family: 'Courier New', courier, monospace; background-color: #f4f4f4; text-align: left"&gt;&lt;br /&gt;&lt;br/&gt;&lt;span style="color: #0000ff"&gt;USE&lt;/span&gt; [BPMDB]&lt;br /&gt;&lt;br/&gt;&lt;span style="color: #0000ff"&gt;GO&lt;/span&gt;&lt;br /&gt;&lt;br/&gt;&lt;span style="color: #008000"&gt;/****** 对象: Table [dbo].[PW_User] 脚本日期: 09/03/2011 13:13:06 ******/&lt;/span&gt;&lt;br /&gt;&lt;br/&gt;&lt;span style="color: #0000ff"&gt;SET&lt;/span&gt; ANSI_NULLS &lt;span style="color: #0000ff"&gt;ON&lt;/span&gt;&lt;br /&gt;&lt;br/&gt;&lt;span style="color: #0000ff"&gt;GO&lt;/span&gt;&lt;br /&gt;&lt;br/&gt;&lt;span style="color: #0000ff"&gt;SET&lt;/span&gt; QUOTED_IDENTIFIER &lt;span style="color: #0000ff"&gt;ON&lt;/span&gt;&lt;br /&gt;&lt;br/&gt;&lt;span style="color: #0000ff"&gt;GO&lt;/span&gt;&lt;br /&gt;&lt;br/&gt;&lt;span style="color: #0000ff"&gt;CREATE&lt;/span&gt; &lt;span style="color: #0000ff"&gt;TABLE&lt;/span&gt; [dbo].[PW_User](&lt;br /&gt;&lt;br/&gt;[ID] [uniqueidentifier] &lt;span style="color: #0000ff"&gt;ROWGUIDCOL&lt;/span&gt; &lt;span style="color: #0000ff"&gt;NOT&lt;/span&gt; &lt;span style="color: #0000ff"&gt;NULL&lt;/span&gt; &lt;span style="color: #0000ff"&gt;CONSTRAINT&lt;/span&gt; [DF_PW_User_ID] &lt;br /&gt;&lt;br/&gt;&lt;span style="color: #0000ff"&gt;DEFAULT&lt;/span&gt; (newid()),&lt;br /&gt;&lt;br/&gt;[userNo] [nvarchar](50) &lt;span style="color: #0000ff"&gt;COLLATE&lt;/span&gt; Chinese_PRC_CI_AS &lt;span style="color: #0000ff"&gt;NOT&lt;/span&gt; &lt;span style="color: #0000ff"&gt;NULL&lt;/span&gt;,&lt;br /&gt;&lt;br/&gt;[password] [nvarchar](255) &lt;span style="color: #0000ff"&gt;COLLATE&lt;/span&gt; Chinese_PRC_CI_AS &lt;span style="color: #0000ff"&gt;NOT&lt;/span&gt; &lt;span style="color: #0000ff"&gt;NULL&lt;/span&gt;,&lt;br /&gt;&lt;br/&gt;[lastName] [nvarchar](255) &lt;span style="color: #0000ff"&gt;COLLATE&lt;/span&gt; Chinese_PRC_CI_AS &lt;span style="color: #0000ff"&gt;NOT&lt;/span&gt; &lt;span style="color: #0000ff"&gt;NULL&lt;/span&gt;,&lt;br /&gt;&lt;br/&gt;[firstName] [nvarchar](255) &lt;span style="color: #0000ff"&gt;COLLATE&lt;/span&gt; Chinese_PRC_CI_AS &lt;span style="color: #0000ff"&gt;NULL&lt;/span&gt;,&lt;br /&gt;&lt;br/&gt;[&lt;span style="color: #0000ff"&gt;alias&lt;/span&gt;] [nvarchar](255) &lt;span style="color: #0000ff"&gt;COLLATE&lt;/span&gt; Chinese_PRC_CI_AS &lt;span style="color: #0000ff"&gt;NULL&lt;/span&gt;,&lt;br /&gt;&lt;br/&gt;[sex] [nvarchar](255) &lt;span style="color: #0000ff"&gt;COLLATE&lt;/span&gt; Chinese_PRC_CI_AS &lt;span style="color: #0000ff"&gt;NULL&lt;/span&gt;,&lt;br /&gt;&lt;br/&gt;[birthDate] [datetime] &lt;span style="color: #0000ff"&gt;NULL&lt;/span&gt;,&lt;br /&gt;&lt;br/&gt;[phone] [nvarchar](255) &lt;span style="color: #0000ff"&gt;COLLATE&lt;/span&gt; Chinese_PRC_CI_AS &lt;span style="color: #0000ff"&gt;NULL&lt;/span&gt;,&lt;br /&gt;&lt;br/&gt;[email] [nvarchar](&lt;span style="color: #0000ff"&gt;max&lt;/span&gt;) &lt;span style="color: #0000ff"&gt;COLLATE&lt;/span&gt; Chinese_PRC_CI_AS &lt;span style="color: #0000ff"&gt;NULL&lt;/span&gt;,&lt;br /&gt;&lt;br/&gt;[showRule] [nvarchar](255) &lt;span style="color: #0000ff"&gt;COLLATE&lt;/span&gt; Chinese_PRC_CI_AS &lt;span style="color: #0000ff"&gt;NULL&lt;/span&gt;,&lt;br /&gt;&lt;br/&gt;[isFreeze] [&lt;span style="color: #0000ff"&gt;int&lt;/span&gt;] &lt;span style="color: #0000ff"&gt;NULL&lt;/span&gt;,&lt;br /&gt;&lt;br/&gt;&lt;span style="color: #0000ff"&gt;CONSTRAINT&lt;/span&gt; [PK_PW_User_Id] &lt;span style="color: #0000ff"&gt;PRIMARY&lt;/span&gt; &lt;span style="color: #0000ff"&gt;KEY&lt;/span&gt; &lt;span style="color: #0000ff"&gt;NONCLUSTERED&lt;/span&gt;&lt;br /&gt;&lt;br/&gt;(&lt;br /&gt;&lt;br/&gt;[ID] &lt;span style="color: #0000ff"&gt;ASC&lt;/span&gt;&lt;br /&gt;&lt;br/&gt;)&lt;span style="color: #0000ff"&gt;WITH&lt;/span&gt; (PAD_INDEX = &lt;span style="color: #0000ff"&gt;OFF&lt;/span&gt;, IGNORE_DUP_KEY = &lt;span style="color: #0000ff"&gt;OFF&lt;/span&gt;) &lt;span style="color: #0000ff"&gt;ON&lt;/span&gt; [&lt;span style="color: #0000ff"&gt;PRIMARY&lt;/span&gt;]&lt;br /&gt;&lt;br/&gt;) &lt;span style="color: #0000ff"&gt;ON&lt;/span&gt; [&lt;span style="color: #0000ff"&gt;PRIMARY&lt;/span&gt;]&lt;/div&gt;&lt;p&gt;&lt;strong&gt;(3) 代码&lt;/strong&gt;&lt;/p&gt;&lt;div id="codeSnippetWrapper" style="border-right: silver 1px solid; padding-right: 4px; border-top: silver 1px solid; padding-left: 4px; font-size: 8pt; padding-bottom: 4px; margin: 20px 0px 10px; overflow: auto; border-left: silver 1px solid; width: 97.5%; cursor: text; direction: ltr; max-height: 5000px; line-height: 12pt; padding-top: 4px; border-bottom: silver 1px solid; font-family: 'Courier New', courier, monospace; background-color: #f4f4f4; text-align: left"&gt;&lt;br /&gt;&lt;br/&gt;&lt;span style="color: #008000"&gt;/*******************************************************************&lt;/span&gt;&lt;br /&gt;&lt;br/&gt;&lt;span style="color: #008000"&gt;* * Copyright (C) hbb0b0&lt;/span&gt;&lt;br /&gt;&lt;br/&gt;&lt;span style="color: #008000"&gt;* * All rights reserved.&lt;/span&gt;&lt;br /&gt;&lt;br/&gt;&lt;span style="color: #008000"&gt;* *&lt;/span&gt;&lt;br /&gt;&lt;br/&gt;&lt;span style="color: #008000"&gt;* Author: HBB0b0 (hbb0b0@163.com)&lt;/span&gt;&lt;br /&gt;&lt;br/&gt;&lt;span style="color: #008000"&gt;* Create Date:2011/9/3 13:00:59&lt;/span&gt;&lt;br /&gt;&lt;br/&gt;&lt;span style="color: #008000"&gt;* Description:简单的数据库实体生成工具&lt;/span&gt;&lt;br /&gt;&lt;br/&gt;&lt;span style="color: #008000"&gt;* *&lt;/span&gt;&lt;br /&gt;&lt;br/&gt;&lt;span style="color: #008000"&gt;* * Date Author Description&lt;/span&gt;&lt;br /&gt;&lt;br/&gt;&lt;span style="color: #008000"&gt;* *******************************************************************/&lt;/span&gt;&lt;br /&gt;&lt;br/&gt;&lt;span style="color: #0000ff"&gt;using&lt;/span&gt; System;&lt;br /&gt;&lt;br/&gt;&lt;span style="color: #0000ff"&gt;using&lt;/span&gt; System.Collections.Generic;&lt;br /&gt;&lt;br/&gt;&lt;span style="color: #0000ff"&gt;using&lt;/span&gt; System.Linq;&lt;br /&gt;&lt;br/&gt;&lt;span style="color: #0000ff"&gt;using&lt;/span&gt; System.Text;&lt;br /&gt;&lt;br/&gt;&lt;span style="color: #0000ff"&gt;using&lt;/span&gt; System.Data;&lt;br /&gt;&lt;br/&gt;&lt;span style="color: #0000ff"&gt;using&lt;/span&gt; System.Data.Sql;&lt;br /&gt;&lt;br/&gt;&lt;span style="color: #0000ff"&gt;using&lt;/span&gt; System.Data.SqlClient;&lt;br /&gt;&lt;br/&gt;&lt;span style="color: #0000ff"&gt;using&lt;/span&gt; System.Diagnostics;&lt;br /&gt;&lt;br/&gt;&lt;span style="color: #0000ff"&gt;using&lt;/span&gt; System.Configuration;&lt;br /&gt;&lt;br/&gt;&lt;span style="color: #0000ff"&gt;namespace&lt;/span&gt; HBB0b0&lt;br /&gt;&lt;br/&gt;{&lt;br /&gt;&lt;br/&gt;&lt;span style="color: #0000ff"&gt;class&lt;/span&gt; Program&lt;br /&gt;&lt;br/&gt;{&lt;br /&gt;&lt;br/&gt;&lt;span style="color: #0000ff"&gt;static&lt;/span&gt; &lt;span style="color: #0000ff"&gt;void&lt;/span&gt; Main(&lt;span style="color: #0000ff"&gt;string&lt;/span&gt;[] args)&lt;br /&gt;&lt;br/&gt;{&lt;br /&gt;&lt;br/&gt;&lt;span style="color: #0000ff"&gt;using&lt;/span&gt; (SqlConnection myConnection = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; &lt;br /&gt;&lt;br/&gt;SqlConnection(ConfigurationManager.ConnectionStrings[&lt;span style="color: #006080"&gt;"sqlserver"&lt;/span&gt;].ConnectionString))&lt;br /&gt;&lt;br/&gt;{&lt;br /&gt;&lt;br/&gt;myConnection.Close();&lt;br /&gt;&lt;br/&gt;myConnection.Open();&lt;br /&gt;&lt;br/&gt;DataTable dt = &lt;span style="color: #0000ff"&gt;null&lt;/span&gt;;&lt;br /&gt;&lt;br/&gt;&lt;span style="color: #0000ff"&gt;string&lt;/span&gt; tableName = &lt;span style="color: #006080"&gt;"PW_User"&lt;/span&gt;;&lt;br /&gt;&lt;br/&gt;dt = GetTableSchema(myConnection, tableName);&lt;br /&gt;&lt;br/&gt;WriteClassEntity(dt, tableName);&lt;br /&gt;&lt;br/&gt;}&lt;br /&gt;&lt;br/&gt;Console.Read();&lt;br /&gt;&lt;br/&gt;}&lt;br /&gt;&lt;br/&gt;&lt;span style="color: #008000"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;br/&gt;&lt;span style="color: #008000"&gt;/// 获取指定表的架构&lt;/span&gt;&lt;br /&gt;&lt;br/&gt;&lt;span style="color: #008000"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;br/&gt;&lt;span style="color: #008000"&gt;/// &amp;lt;param name="connection"&amp;gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;br/&gt;&lt;span style="color: #008000"&gt;/// &amp;lt;param name="tableName"&amp;gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;br/&gt;&lt;span style="color: #008000"&gt;/// &amp;lt;returns&amp;gt;&amp;lt;/returns&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;br/&gt;&lt;span style="color: #0000ff"&gt;private&lt;/span&gt; &lt;span style="color: #0000ff"&gt;static&lt;/span&gt; DataTable GetTableSchema(SqlConnection connection, &lt;span style="color: #0000ff"&gt;string&lt;/span&gt; &lt;br /&gt;&lt;br/&gt;tableName)&lt;br /&gt;&lt;br/&gt;{&lt;br /&gt;&lt;br/&gt;&lt;span style="color: #0000ff"&gt;using&lt;/span&gt; (SqlCommand cmd = connection.CreateCommand())&lt;br /&gt;&lt;br/&gt;{&lt;br /&gt;&lt;br/&gt;cmd.CommandType = CommandType.Text;&lt;br /&gt;&lt;br/&gt;cmd.CommandText = &lt;span style="color: #0000ff"&gt;string&lt;/span&gt;.Format(&lt;span style="color: #006080"&gt;"select top (1) * from {0} with(nolock) "&lt;/span&gt;, &lt;br /&gt;&lt;br/&gt;tableName);&lt;br /&gt;&lt;br/&gt;DataTable dt = &lt;span style="color: #0000ff"&gt;null&lt;/span&gt;;&lt;br /&gt;&lt;br/&gt;&lt;span style="color: #008000"&gt;// using (SqlDataReader read = cmd.ExecuteReader())&lt;/span&gt;&lt;br /&gt;&lt;br/&gt;{&lt;br /&gt;&lt;br/&gt;SqlDataReader read = cmd.ExecuteReader();&lt;br /&gt;&lt;br/&gt;dt = read.GetSchemaTable();&lt;br /&gt;&lt;br/&gt;}&lt;br /&gt;&lt;br/&gt;&lt;span style="color: #0000ff"&gt;return&lt;/span&gt; dt;&lt;br /&gt;&lt;br/&gt;}&lt;br /&gt;&lt;br/&gt;}&lt;br /&gt;&lt;br/&gt;&lt;span style="color: #008000"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;br/&gt;&lt;span style="color: #008000"&gt;/// 生成表对应的实体&lt;/span&gt;&lt;br /&gt;&lt;br/&gt;&lt;span style="color: #008000"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;br/&gt;&lt;span style="color: #008000"&gt;/// &amp;lt;param name="dtSchema"&amp;gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;br/&gt;&lt;span style="color: #008000"&gt;/// &amp;lt;param name="tableName"&amp;gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;br/&gt;&lt;span style="color: #0000ff"&gt;private&lt;/span&gt; &lt;span style="color: #0000ff"&gt;static&lt;/span&gt; &lt;span style="color: #0000ff"&gt;void&lt;/span&gt; WriteClassEntity(System.Data.DataTable dtSchema, &lt;span style="color: #0000ff"&gt;string&lt;/span&gt; &lt;br /&gt;&lt;br/&gt;tableName)&lt;br /&gt;&lt;br/&gt;{&lt;br /&gt;&lt;br/&gt;StringBuilder sb = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; StringBuilder();&lt;br /&gt;&lt;br/&gt;sb.Append(&lt;span style="color: #006080"&gt;"[Serializable]"&lt;/span&gt;);&lt;br /&gt;&lt;br/&gt;sb.AppendLine();&lt;br /&gt;&lt;br/&gt;sb.AppendFormat(&lt;span style="color: #006080"&gt;"public class {0}Entity"&lt;/span&gt;, tableName);&lt;br /&gt;&lt;br/&gt;sb.AppendLine();&lt;br /&gt;&lt;br/&gt;sb.AppendLine(&lt;span style="color: #006080"&gt;"{"&lt;/span&gt;);&lt;br /&gt;&lt;br/&gt;&lt;span style="color: #0000ff"&gt;foreach&lt;/span&gt; (System.Data.DataRow row &lt;span style="color: #0000ff"&gt;in&lt;/span&gt; dtSchema.Rows)&lt;br /&gt;&lt;br/&gt;{&lt;br /&gt;&lt;br/&gt;&lt;span style="color: #008000"&gt;//列名称&lt;/span&gt;&lt;br /&gt;&lt;br/&gt;DataColumn nameCol = &lt;br /&gt;&lt;br/&gt;dtSchema.Columns[dtSchema.Columns.IndexOf(&lt;span style="color: #006080"&gt;"ColumnName"&lt;/span&gt;)];&lt;br /&gt;&lt;br/&gt;&lt;span style="color: #008000"&gt;//类型&lt;/span&gt;&lt;br /&gt;&lt;br/&gt;DataColumn typeCol = &lt;br /&gt;&lt;br/&gt;dtSchema.Columns[dtSchema.Columns.IndexOf(&lt;span style="color: #006080"&gt;"DataType"&lt;/span&gt;)];&lt;br /&gt;&lt;br/&gt;&lt;span style="color: #008000"&gt;//是否为空&lt;/span&gt;&lt;br /&gt;&lt;br/&gt;DataColumn allowDBNullCol = &lt;br /&gt;&lt;br/&gt;dtSchema.Columns[dtSchema.Columns.IndexOf(&lt;span style="color: #006080"&gt;"AllowDBNull"&lt;/span&gt;)];&lt;br /&gt;&lt;br/&gt;&lt;span style="color: #0000ff"&gt;string&lt;/span&gt; symbolCanNull = &lt;span style="color: #006080"&gt;""&lt;/span&gt;;&lt;br /&gt;&lt;br/&gt;&lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (Boolean.Parse(row[allowDBNullCol].ToString()) &amp;amp;&amp;amp; &lt;br /&gt;&lt;br/&gt;Type.GetType(row[typeCol].ToString()).IsValueType)&lt;br /&gt;&lt;br/&gt;{&lt;br /&gt;&lt;br/&gt;symbolCanNull = &lt;span style="color: #006080"&gt;"?"&lt;/span&gt;;&lt;br /&gt;&lt;br/&gt;}&lt;br /&gt;&lt;br/&gt;&lt;span style="color: #0000ff"&gt;string&lt;/span&gt; info = &lt;span style="color: #0000ff"&gt;string&lt;/span&gt;.Format(&lt;span style="color: #006080"&gt;"public {0}{1} {2} {3} get; set; {4}"&lt;/span&gt;,&lt;br /&gt;&lt;br/&gt;row[typeCol].ToString(),&lt;br /&gt;&lt;br/&gt;symbolCanNull,&lt;br /&gt;&lt;br/&gt;row[nameCol].ToString(),&lt;br /&gt;&lt;br/&gt;&lt;span style="color: #006080"&gt;"{"&lt;/span&gt;, &lt;span style="color: #006080"&gt;"}"&lt;/span&gt;);&lt;br /&gt;&lt;br/&gt;sb.AppendLine(info);&lt;br /&gt;&lt;br/&gt;}&lt;br /&gt;&lt;br/&gt;sb.AppendLine(&lt;span style="color: #006080"&gt;"}"&lt;/span&gt;);&lt;br /&gt;&lt;br/&gt;&lt;span style="color: #008000"&gt;//Trace.Listeners.Remove("myListener");&lt;/span&gt;&lt;br /&gt;&lt;br/&gt;Console.WriteLine(sb.ToString());&lt;br /&gt;&lt;br/&gt;&lt;span style="color: #008000"&gt;//Trace.Write(sb.ToString());&lt;/span&gt;&lt;br /&gt;&lt;br/&gt;&lt;span style="color: #008000"&gt;//Trace.Flush();&lt;/span&gt;&lt;br /&gt;&lt;br/&gt;}&lt;br /&gt;&lt;br/&gt;}&lt;br /&gt;&lt;br/&gt;}&lt;/div&gt;&lt;p&gt;&lt;strong&gt;(4)运行结果&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/hbb0b0/201109/201109031339422617.gif"&gt;&lt;img title="clip_image004" style="border-right: 0px; border-top: 0px; display: inline; border-left: 0px; border-bottom: 0px" alt="clip_image004" src="http://images.cnblogs.com/cnblogs_com/hbb0b0/201109/201109031339429826.gif" border="0" height="223" width="376" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/hbb0b0/aggbug/2165356.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/hbb0b0/archive/2011/09/03/2165356.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/hbb0b0/archive/2011/08/27/2155825.html</id><title type="text">linux samba 与 Windows 共享文件</title><summary type="text">1 安装 samba 服务 2 修改samba配置 添加自定义配置节，其中b0b0就是windows用户登录samba的用户名 [b0b0] comment = Samba server's CD-ROM read only = no locking = no path = /home guest ok = yes 4 修改 smb.conf ,重启服务 service samba restart 3 windows主机访问 samba服务默认的用户名就是 windows的登录用户\ 查看smb端口： ...</summary><published>2011-08-27T14:40:00Z</published><updated>2011-08-27T14:40:00Z</updated><author><name>b0b0</name><uri>http://www.cnblogs.com/hbb0b0/</uri></author><link rel="alternate" href="http://www.cnblogs.com/hbb0b0/archive/2011/08/27/2155825.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/hbb0b0/archive/2011/08/27/2155825.html"/><content type="html">&lt;p&gt;&amp;nbsp;&lt;/p&gt;  &lt;p&gt;1 安装 samba 服务   &lt;br /&gt;2 修改samba配置    &lt;br /&gt;&amp;nbsp;&amp;nbsp; 添加自定义配置节，其中b0b0就是windows用户登录samba的用户名    &lt;br /&gt;&amp;nbsp;&amp;nbsp; [b0b0]    &lt;br /&gt;&amp;nbsp; comment = Samba server's CD-ROM    &lt;br /&gt;&amp;nbsp; read only = no    &lt;br /&gt;&amp;nbsp; locking = no    &lt;br /&gt;&amp;nbsp; path = /home    &lt;br /&gt;&amp;nbsp; guest ok = yes    &lt;br /&gt;4 修改 smb.conf ,重启服务    &lt;br /&gt;&amp;nbsp;&amp;nbsp; service samba restart    &lt;br /&gt;3 windows主机访问 samba服务默认的用户名就是 windows的登录用户\ &lt;/p&gt;  &lt;p&gt;查看smb端口：   &lt;br /&gt;netstat -tlnp|grep smb    &lt;br /&gt;tcp6&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0 :::139&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; LISTEN&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1424/smbd&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;tcp6&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0 :::445&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; LISTEN&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1424/smbd&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/p&gt;  &lt;p&gt;查看windows 共享   &lt;br /&gt;smbclient //192.168.1.101/ebook -U b0b0 &lt;/p&gt;  &lt;p&gt;Enter b0b0's password:    &lt;br /&gt;Domain=[HXPHB0B0] OS=[Windows 5.1] Server=[Windows 2000 LAN Manager]    &lt;br /&gt;smb: \&amp;gt; read_socket_with_timeout: read error = 连接被对端重置.    &lt;br /&gt;Read from server failed, maybe it closed the connection &lt;/p&gt;&lt;img src="http://www.cnblogs.com/hbb0b0/aggbug/2155825.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/hbb0b0/archive/2011/08/27/2155825.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/hbb0b0/archive/2011/08/27/2155104.html</id><title type="text">CUnit 的使用</title><summary type="text">1 下载 cunit 2 安装 到cunit目录 ./configure make make install 3 查看 cunit 库安装信息 whereis libcunit.a libcunit: /usr/local/lib/libcunit.so /usr/local/lib/libcunit.a /usr/local/lib/libcunit.la 列出了静态库动态库的路径 4 查看 头文件 信息 locate Basic.h /usr/local/include/CUnit/Basic.h ...</summary><published>2011-08-27T11:03:00Z</published><updated>2011-08-27T11:03:00Z</updated><author><name>b0b0</name><uri>http://www.cnblogs.com/hbb0b0/</uri></author><link rel="alternate" href="http://www.cnblogs.com/hbb0b0/archive/2011/08/27/2155104.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/hbb0b0/archive/2011/08/27/2155104.html"/><content type="html">&lt;p&gt;1 下载 cunit   &lt;br /&gt;2 安装    &lt;br /&gt;&amp;nbsp; 到cunit目录    &lt;br /&gt;&amp;nbsp; ./configure     &lt;br /&gt;&amp;nbsp; make     &lt;br /&gt;&amp;nbsp; make install    &lt;br /&gt;3 查看 cunit 库安装信息    &lt;br /&gt;&amp;nbsp; whereis&amp;nbsp; libcunit.a    &lt;br /&gt;&amp;nbsp; libcunit: /usr/local/lib/libcunit.so /usr/local/lib/libcunit.a /usr/local/lib/libcunit.la    &lt;br /&gt;&amp;nbsp; 列出了静态库动态库的路径    &lt;br /&gt;4 查看 头文件 信息    &lt;br /&gt;&amp;nbsp;&amp;nbsp; locate Basic.h    &lt;br /&gt;&amp;nbsp;&amp;nbsp; /usr/local/include/CUnit/Basic.h    &lt;br /&gt;5&amp;nbsp; 使用最简单文件进行测试    &lt;br /&gt;&amp;nbsp;&lt;/p&gt;  &lt;div id="codeSnippetWrapper" style="border-right: silver 1px solid; padding-right: 4px; border-top: silver 1px solid; padding-left: 4px; font-size: 8pt; padding-bottom: 4px; margin: 20px 0px 10px; overflow: auto; border-left: silver 1px solid; width: 97.5%; cursor: text; direction: ltr; max-height: 200px; line-height: 12pt; padding-top: 4px; border-bottom: silver 1px solid; font-family: 'Courier New', courier, monospace; background-color: #f4f4f4; text-align: left"&gt;   &lt;span style="color: #008000"&gt;/*&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #008000"&gt;  Simple example of a CUnit unit test.&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #008000"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #008000"&gt;  This program (crudely) demonstrates a very simple "black box"&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #008000"&gt;  test of the standard library functions fprintf() and fread().&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #008000"&gt;  It uses suite initialization and cleanup functions to open&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #008000"&gt;  and close a common temporary file used by the test functions.&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #008000"&gt;  The test functions then write to and read from the temporary&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #008000"&gt;  file in the course of testing the library functions.&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #008000"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #008000"&gt;  The 2 test functions are added to a single CUnit suite, and&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #008000"&gt;  then run using the CUnit Basic interface.  The output of the&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #008000"&gt;  program (on CUnit version 2.0-2) is:&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #008000"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #008000"&gt;           CUnit : A Unit testing framework for C.&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #008000"&gt;           http://cunit.sourceforge.net/&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #008000"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #008000"&gt;       Suite: Suite_1&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #008000"&gt;         Test: test of fprintf() ... passed&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #008000"&gt;         Test: test of fread() ... passed&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #008000"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #008000"&gt;       --Run Summary: Type      Total     Ran  Passed  Failed&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #008000"&gt;                      suites        1       1     n/a       0&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #008000"&gt;                      tests         2       2       2       0&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #008000"&gt;                      asserts       5       5       5       0&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #008000"&gt;/ &lt;/span&gt;&lt;br /&gt;&lt;span style="color: #008000"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #008000"&gt;nclude &amp;lt;stdio.h&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #008000"&gt;nclude &amp;lt;string.h&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #008000"&gt;nclude "CUnit/Basic.h" &lt;/span&gt;&lt;br /&gt;&lt;span style="color: #008000"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #008000"&gt; Pointer to the file used by the tests. */&lt;/span&gt;&lt;br /&gt;atic FILE* temp_file = NULL; &lt;br /&gt;&lt;br /&gt; The suite initialization function.&lt;br /&gt; Opens the temporary file used by the tests.&lt;br /&gt; Returns zero on success, non-zero otherwise.&lt;br /&gt;/&lt;br /&gt;t init_suite1(&lt;span style="color: #0000ff"&gt;void&lt;/span&gt;)&lt;br /&gt;&lt;br /&gt; &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (NULL == (temp_file = fopen(&lt;span style="color: #006080"&gt;"temp.txt"&lt;/span&gt;, &lt;span style="color: #006080"&gt;"w+"&lt;/span&gt;))) {&lt;br /&gt;    &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; -1;&lt;br /&gt; }&lt;br /&gt; &lt;span style="color: #0000ff"&gt;else&lt;/span&gt; {&lt;br /&gt;    &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; 0;&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt;&lt;br /&gt; The suite cleanup function.&lt;br /&gt; Closes the temporary file used by the tests.&lt;br /&gt; Returns zero on success, non-zero otherwise.&lt;br /&gt;/&lt;br /&gt;t clean_suite1(&lt;span style="color: #0000ff"&gt;void&lt;/span&gt;)&lt;br /&gt;&lt;br /&gt; &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (0 != fclose(temp_file)) {&lt;br /&gt;    &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; -1;&lt;br /&gt; }&lt;br /&gt; &lt;span style="color: #0000ff"&gt;else&lt;/span&gt; {&lt;br /&gt;    temp_file = NULL;&lt;br /&gt;    &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; 0;&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt;&lt;br /&gt; Simple test of fprintf().&lt;br /&gt; Writes test data to the temporary file and checks&lt;br /&gt; whether the expected number of bytes were written.&lt;br /&gt;/&lt;br /&gt;id testFPRINTF(&lt;span style="color: #0000ff"&gt;void&lt;/span&gt;)&lt;br /&gt;&lt;br /&gt; &lt;span style="color: #0000ff"&gt;int&lt;/span&gt; i1 = 10; &lt;br /&gt;&lt;br /&gt; &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (NULL != temp_file) {&lt;br /&gt;    CU_ASSERT(0 == fprintf(temp_file, &lt;span style="color: #006080"&gt;""&lt;/span&gt;));&lt;br /&gt;    CU_ASSERT(2 == fprintf(temp_file, &lt;span style="color: #006080"&gt;"Q\n"&lt;/span&gt;));&lt;br /&gt;    CU_ASSERT(7 == fprintf(temp_file, &lt;span style="color: #006080"&gt;"i1 = %d"&lt;/span&gt;, i1));&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt;&lt;br /&gt; Simple test of fread().&lt;br /&gt; Reads the data previously written by testFPRINTF()&lt;br /&gt; and checks whether the expected characters are present.&lt;br /&gt; Must be run after testFPRINTF().&lt;br /&gt;/&lt;br /&gt;id testFREAD(&lt;span style="color: #0000ff"&gt;void&lt;/span&gt;)&lt;br /&gt;&lt;br /&gt; &lt;span style="color: #0000ff"&gt;unsigned&lt;/span&gt; &lt;span style="color: #0000ff"&gt;char&lt;/span&gt; buffer[20]; &lt;br /&gt;&lt;br /&gt; &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (NULL != temp_file) {&lt;br /&gt;    rewind(temp_file);&lt;br /&gt;    CU_ASSERT(9 == fread(buffer, &lt;span style="color: #0000ff"&gt;sizeof&lt;/span&gt;(&lt;span style="color: #0000ff"&gt;unsigned&lt;/span&gt; &lt;span style="color: #0000ff"&gt;char&lt;/span&gt;), 20, temp_file));&lt;br /&gt;    CU_ASSERT(0 == strncmp(buffer, &lt;span style="color: #006080"&gt;"Q\ni1 = 10"&lt;/span&gt;, 9));&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt;&lt;br /&gt; The main() &lt;span style="color: #cc6633"&gt;function&lt;/span&gt; &lt;span style="color: #0000ff"&gt;for&lt;/span&gt; setting up and running the tests.&lt;br /&gt; Returns a CUE_SUCCESS on successful running, another&lt;br /&gt; CUnit error code on failure.&lt;br /&gt;/&lt;br /&gt;t main()&lt;br /&gt;&lt;br /&gt; CU_pSuite pSuite = NULL; &lt;br /&gt;&lt;br /&gt; &lt;span style="color: #008000"&gt;/* initialize the CUnit test registry */&lt;/span&gt;&lt;br /&gt; &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (CUE_SUCCESS != CU_initialize_registry())&lt;br /&gt;    &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; CU_get_error(); &lt;br /&gt;&lt;br /&gt; &lt;span style="color: #008000"&gt;/* add a suite to the registry */&lt;/span&gt;&lt;br /&gt; pSuite = CU_add_suite(&lt;span style="color: #006080"&gt;"Suite_1"&lt;/span&gt;, init_suite1, clean_suite1);&lt;br /&gt; &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (NULL == pSuite) {&lt;br /&gt;    CU_cleanup_registry();&lt;br /&gt;    &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; CU_get_error();&lt;br /&gt; } &lt;br /&gt;&lt;br /&gt; &lt;span style="color: #008000"&gt;/* add the tests to the suite */&lt;/span&gt;&lt;br /&gt; &lt;span style="color: #008000"&gt;/* NOTE - ORDER IS IMPORTANT - MUST TEST fread() AFTER fprintf() */&lt;/span&gt;&lt;br /&gt; &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; ((NULL == CU_add_test(pSuite, &lt;span style="color: #006080"&gt;"test of fprintf()"&lt;/span&gt;, testFPRINTF)) ||&lt;br /&gt;     (NULL == CU_add_test(pSuite, &lt;span style="color: #006080"&gt;"test of fread()"&lt;/span&gt;, testFREAD)))&lt;br /&gt; {&lt;br /&gt;    CU_cleanup_registry();&lt;br /&gt;    &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; CU_get_error();&lt;br /&gt; } &lt;br /&gt;&lt;br /&gt; &lt;span style="color: #008000"&gt;/* Run all tests using the CUnit Basic interface */&lt;/span&gt;&lt;br /&gt; CU_basic_set_mode(CU_BRM_VERBOSE);&lt;br /&gt; CU_basic_run_tests();&lt;br /&gt; CU_cleanup_registry();&lt;br /&gt; &lt;span style="color: #0000ff"&gt;return&lt;/span&gt; CU_get_error();&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;p&gt;6 生成目标文件 &lt;/p&gt;&lt;p&gt;生成目标文件&amp;nbsp; &lt;br /&gt;gcc -c simple.c  &lt;br /&gt;链接成可执行文件  &lt;br /&gt;gcc -static -o simple simple.o /usr/local/lib/libcunit.a -lm &lt;/p&gt;&lt;p&gt;7 运行  &lt;br /&gt;&amp;nbsp; ./simple  &lt;br /&gt; CUnit - A unit testing framework for C - Version 2.1-2  &lt;br /&gt;&lt;a href="http://cunit.sourceforge.net/"&gt;http://cunit.sourceforge.net/&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Suite: Suite_1  &lt;br /&gt;&amp;nbsp; Test: test of fprintf() ...passed  &lt;br /&gt;&amp;nbsp; Test: test of fread() ...passed &lt;/p&gt;&lt;p&gt;Run Summary:&amp;nbsp;&amp;nbsp;&amp;nbsp; Type&amp;nbsp; Total&amp;nbsp;&amp;nbsp;&amp;nbsp; Ran Passed Failed Inactive  &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; suites&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1&amp;nbsp;&amp;nbsp;&amp;nbsp; n/a&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 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; tests&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 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; asserts&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 5&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 5&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 5&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; n/a &lt;/p&gt;&lt;p&gt;Elapsed time =&amp;nbsp;&amp;nbsp;&amp;nbsp; 0.000 seconds &lt;/p&gt;&lt;img src="http://www.cnblogs.com/hbb0b0/aggbug/2155104.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/hbb0b0/archive/2011/08/27/2155104.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/hbb0b0/archive/2011/08/24/2152579.html</id><title type="text">c语言多文件链接</title><summary type="text">多文件链接 文件结构： myMath.hintmax(inta,intb);intadd(inta,intb);myMath.c#include"myMath.h"intmax(inta,intb){if(a&gt;=b){returna;}returnb;}intadd(inta,intb){returna+b;}testMath.c#include&lt;stdio.h&gt;#include"myMath.h"intmain(intargc,char*argv[]){inta=10;intb=3;printf("max(%d,%d)=%d</summary><published>2011-08-24T13:50:00Z</published><updated>2011-08-24T13:50:00Z</updated><author><name>b0b0</name><uri>http://www.cnblogs.com/hbb0b0/</uri></author><link rel="alternate" href="http://www.cnblogs.com/hbb0b0/archive/2011/08/24/2152579.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/hbb0b0/archive/2011/08/24/2152579.html"/><content type="html">&lt;p&gt;多文件链接 &lt;/p&gt;  &lt;p&gt;文件结构：   &lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;&lt;div&gt;&lt;span style="color: #000000;"&gt;myMath.h&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;int&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;max(&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;int&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;a,&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;int&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;b);&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;int&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;add(&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;int&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;a,&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;int&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;b);&lt;br /&gt;&lt;br /&gt;myMath.c&lt;br /&gt;#include&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;myMath.h&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;int&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;max(&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;int&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;a,&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;int&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;b)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;if&lt;/span&gt;&lt;span style="color: #000000;"&gt;(a&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt;b)&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;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;return&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;a;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;return&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;b;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;int&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;add(&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;int&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;a,&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;int&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;b)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;return&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;a&lt;/span&gt;&lt;span style="color: #000000;"&gt;+&lt;/span&gt;&lt;span style="color: #000000;"&gt;b;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;testMath.c&lt;br /&gt;#include&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;stdio.h&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;#include&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;myMath.h&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;int&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;main(&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;int&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;argc,&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;char&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;*&lt;/span&gt;&lt;span style="color: #000000;"&gt;argv[])&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;int&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;a&lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #800080;"&gt;10&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;int&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;b&lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #800080;"&gt;3&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;printf(&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;max(%d,%d)=%d\n&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;,a,b,max(a,b));&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;printf(&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;add(%d,%d)=%d\n&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;,a,b,add(a,b));&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;return&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800080;"&gt;0&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;br /&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&lt;span style="color: red;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;编译文件：（gcc－c 只编译不链接 ）   &lt;br /&gt;gcc -c myMath.c    &lt;br /&gt;gcc -c testMath.c    &lt;br /&gt;链接文件：(gcc -o 链接生成目标文件)    &lt;br /&gt;gcc -o main myMath.o testMath.o    &lt;br /&gt;运行：./main &lt;/p&gt;  &lt;p&gt;输出：   &lt;br /&gt;max(10,3)=10    &lt;br /&gt;add(10,3)=13 &lt;/p&gt;&lt;img src="http://www.cnblogs.com/hbb0b0/aggbug/2152579.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/hbb0b0/archive/2011/08/24/2152579.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/hbb0b0/archive/2011/08/19/2146300.html</id><title type="text">完全使用接口方式调用WCF 服务</title><summary type="text">客户端调用WCF服务可以通过添加服务引用的方式添加，这种方式使用起来比较简单，适合小项目使用。服务端与服务端的耦合较深，而且添加服务引用的方式生成一大堆臃肿的文件。本例探讨一种使用接口的方式使用WCF服务，克服通过服务引用方式产生的弊端。同时希望抛砖引玉，探讨更好的方式使用WCF。1. 架构概述解决方案说明：接口层：数字计算接口服务实现层：实现数字计算接口发布：同过IIS方式发布WCF服务客户端：引用接口层，通过配置文件调用WCF服务2. 接口层usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Te</summary><published>2011-08-19T13:53:00Z</published><updated>2011-08-19T13:53:00Z</updated><author><name>b0b0</name><uri>http://www.cnblogs.com/hbb0b0/</uri></author><link rel="alternate" href="http://www.cnblogs.com/hbb0b0/archive/2011/08/19/2146300.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/hbb0b0/archive/2011/08/19/2146300.html"/><content type="html">&lt;p&gt;&lt;strong&gt;&amp;nbsp;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;客户端调用WCF服务可以通过添加服务引用的方式添加，这种方式使用起来比较简单，适合小项目使用。服务端与服务端的耦合较深，而且添加服务引用的方式生成一大堆臃肿的文件。本例探讨一种使用接口的方式使用WCF服务，克服通过服务引用方式产生的弊端。同时希望抛砖引玉，探讨更好的方式使用WCF。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;1. 架构概述&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;解决方案&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/hbb0b0/201108/201108192153127152.gif"&gt;&lt;img title="clip_image002" style="border-right: 0px; border-top: 0px; display: inline; border-left: 0px; border-bottom: 0px" alt="clip_image002" src="http://images.cnblogs.com/cnblogs_com/hbb0b0/201108/201108192153127675.gif" border="0" height="244" width="174" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;说明：&lt;/p&gt;&lt;p&gt;接口层：数字计算接口&lt;/p&gt;&lt;p&gt;服务实现层：实现数字计算接口&lt;/p&gt;&lt;p&gt;发布：同过IIS方式发布WCF服务&lt;/p&gt;&lt;p&gt;客户端：引用接口层，通过配置文件调用WCF服务&lt;/p&gt;&lt;p&gt;&lt;strong&gt;2. 接口层&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;&lt;div&gt;&lt;span style="color: #0000ff"&gt;using&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;System;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;using&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;System.Collections.Generic;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;using&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;System.Linq;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;using&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;System.Text;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;using&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;System.ServiceModel;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;namespace&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;Hbb0b0.WCF.Inteface&lt;br /&gt;&lt;br /&gt;{&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #808080"&gt;///&lt;/span&gt;&lt;span style="color: #008000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;span style="color: #008000"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #808080"&gt;///&lt;/span&gt;&lt;span style="color: #008000"&gt;&amp;nbsp;数学计算服务&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #808080"&gt;///&lt;/span&gt;&lt;span style="color: #008000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;span style="color: #808080"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;&lt;br /&gt;[ServiceContract]&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;public&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;interface&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;IMathService&lt;br /&gt;&lt;br /&gt;{&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #808080"&gt;///&lt;/span&gt;&lt;span style="color: #008000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;span style="color: #008000"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #808080"&gt;///&lt;/span&gt;&lt;span style="color: #008000"&gt;&amp;nbsp;相加服务&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #808080"&gt;///&lt;/span&gt;&lt;span style="color: #008000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;span style="color: #008000"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #808080"&gt;///&lt;/span&gt;&lt;span style="color: #008000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080"&gt;&amp;lt;param&amp;nbsp;name="p1"&amp;gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;span style="color: #008000"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #808080"&gt;///&lt;/span&gt;&lt;span style="color: #008000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080"&gt;&amp;lt;param&amp;nbsp;name="p2"&amp;gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;span style="color: #008000"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #808080"&gt;///&lt;/span&gt;&lt;span style="color: #008000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080"&gt;&amp;lt;returns&amp;gt;&amp;lt;/returns&amp;gt;&lt;/span&gt;&lt;span style="color: #808080"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;&lt;br /&gt;[OperationContract]&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;int&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;Add(&lt;/span&gt;&lt;span style="color: #0000ff"&gt;int&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;p1,&lt;/span&gt;&lt;span style="color: #0000ff"&gt;int&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;p2);&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;3. 实现层&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;&lt;div&gt;&lt;span style="color: #0000ff"&gt;using&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;System;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;using&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;System.Collections.Generic;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;using&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;System.Linq;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;using&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;System.Runtime.Serialization;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;using&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;System.ServiceModel;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;using&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;System.Text;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;using&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;Hbb0b0.WCF.Inteface;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;namespace&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;Hbb0b0.WCF.ServiceImp&lt;br /&gt;&lt;br /&gt;{&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #808080"&gt;///&lt;/span&gt;&lt;span style="color: #008000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;span style="color: #008000"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #808080"&gt;///&lt;/span&gt;&lt;span style="color: #008000"&gt;&amp;nbsp;计算服务实现&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #808080"&gt;///&lt;/span&gt;&lt;span style="color: #008000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;span style="color: #808080"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;public&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;class&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;MathService&amp;nbsp;:&amp;nbsp;IMathService&lt;br /&gt;&lt;br /&gt;{&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;#region&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;IMathService&amp;nbsp;成员&lt;/span&gt;&lt;span style="color: #000000"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;public&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;int&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;Add(&lt;/span&gt;&lt;span style="color: #0000ff"&gt;int&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;p1,&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;int&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;p2)&lt;br /&gt;&lt;br /&gt;{&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;return&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;p1&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;+&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;p2;&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;#endregion&lt;/span&gt;&lt;span style="color: #000000"&gt;&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;4. 发布层&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;1. SVC&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;&lt;div&gt;&lt;span style="color: #000000"&gt;&amp;lt;%&lt;/span&gt;&lt;span style="color: #000000"&gt;@ServiceHost&amp;nbsp;language&lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;c#&amp;nbsp;Debug&lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;true&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;Service&lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;Hbb0b0.WCF.ServiceImp.MathService&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;%&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;2. Web.Config&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;&lt;div&gt;&lt;span style="color: #0000ff"&gt;&amp;lt;?&lt;/span&gt;&lt;span style="color: #ff00ff"&gt;xml&amp;nbsp;version="1.0"&lt;/span&gt;&lt;span style="color: #0000ff"&gt;?&amp;gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;configuration&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;system.serviceModel&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;bindings&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;basicHttpBinding&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;binding&amp;nbsp;&lt;/span&gt;&lt;span style="color: #ff0000"&gt;name&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="NewBinding0"&lt;/span&gt;&lt;span style="color: #ff0000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;basicHttpBinding&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;bindings&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;services&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;service&amp;nbsp;&lt;/span&gt;&lt;span style="color: #ff0000"&gt;behaviorConfiguration&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="MyServiceTypeBehaviors"&lt;/span&gt;&lt;span style="color: #ff0000"&gt;&amp;nbsp;name&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="Hbb0b0.WCF.ServiceImp.MathService"&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;endpoint&amp;nbsp;&lt;/span&gt;&lt;span style="color: #ff0000"&gt;address&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="mex"&lt;/span&gt;&lt;span style="color: #ff0000"&gt;&amp;nbsp;binding&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="mexHttpBinding"&lt;/span&gt;&lt;span style="color: #ff0000"&gt;&amp;nbsp;contract&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="IMetadataExchange"&lt;/span&gt;&lt;span style="color: #ff0000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;endpoint&amp;nbsp;&lt;/span&gt;&lt;span style="color: #ff0000"&gt;address&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="http://localhost:1331/MathService.svc"&lt;/span&gt;&lt;span style="color: #ff0000"&gt;&amp;nbsp;binding&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="basicHttpBinding"&lt;/span&gt;&lt;span style="color: #ff0000"&gt;&amp;nbsp;bindingName&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="NewBinding0"&lt;/span&gt;&lt;span style="color: #ff0000"&gt;&lt;br /&gt;&lt;br /&gt;name&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="address"&lt;/span&gt;&lt;span style="color: #ff0000"&gt;&amp;nbsp;contract&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="Hbb0b0.WCF.Inteface.IMathService"&lt;/span&gt;&lt;span style="color: #ff0000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;service&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;services&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;behaviors&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;serviceBehaviors&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;behavior&amp;nbsp;&lt;/span&gt;&lt;span style="color: #ff0000"&gt;name&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="MyServiceTypeBehaviors"&lt;/span&gt;&lt;span style="color: #ff0000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008000"&gt;&amp;lt;!--&lt;/span&gt;&lt;span style="color: #008000"&gt;&amp;nbsp;将下列元素添加到服务行为配置中。&amp;nbsp;&lt;/span&gt;&lt;span style="color: #008000"&gt;--&amp;gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;serviceMetadata&amp;nbsp;&lt;/span&gt;&lt;span style="color: #ff0000"&gt;httpGetEnabled&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="true"&lt;/span&gt;&lt;span style="color: #ff0000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;behavior&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;serviceBehaviors&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;behaviors&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;system.serviceModel&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;configuration&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;3. 调用层&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;1. Client&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;&lt;div&gt;&lt;span style="color: #0000ff"&gt;using&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;System;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;using&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;System.Collections.Generic;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;using&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;System.Linq;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;using&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;System.Text;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;using&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;System.ServiceModel;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;using&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;System.Configuration;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;using&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;System.ServiceModel.Configuration;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;using&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;Hbb0b0.WCF.Inteface;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;using&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;System.Reflection;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;using&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;System.ServiceModel.Channels;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;namespace&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;MathServiceClient&lt;br /&gt;&lt;br /&gt;{&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;class&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;Program&lt;br /&gt;&lt;br /&gt;{&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #808080"&gt;///&lt;/span&gt;&lt;span style="color: #008000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;span style="color: #008000"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #808080"&gt;///&lt;/span&gt;&lt;span style="color: #008000"&gt;&amp;nbsp;ServiceModel&amp;nbsp;属性&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #808080"&gt;///&lt;/span&gt;&lt;span style="color: #008000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;span style="color: #808080"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;static&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;ServiceModelSectionGroup&amp;nbsp;ServiceModelConfig;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #808080"&gt;///&lt;/span&gt;&lt;span style="color: #008000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;span style="color: #008000"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #808080"&gt;///&lt;/span&gt;&lt;span style="color: #008000"&gt;&amp;nbsp;构造函数中初始化ServiceModelConfig&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #808080"&gt;///&lt;/span&gt;&lt;span style="color: #008000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;span style="color: #808080"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;static&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;Program()&lt;br /&gt;&lt;br /&gt;{&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;if&lt;/span&gt;&lt;span style="color: #000000"&gt;(ServiceModelConfig&lt;/span&gt;&lt;span style="color: #000000"&gt;==&lt;/span&gt;&lt;span style="color: #0000ff"&gt;null&lt;/span&gt;&lt;span style="color: #000000"&gt;)&lt;br /&gt;&lt;br /&gt;{&lt;br /&gt;&lt;br /&gt;ServiceModelConfig&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;GetServiceModelSectionGroup();&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;static&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;void&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;Main(&lt;/span&gt;&lt;span style="color: #0000ff"&gt;string&lt;/span&gt;&lt;span style="color: #000000"&gt;[]&amp;nbsp;args)&lt;br /&gt;&lt;br /&gt;{&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008000"&gt;//&lt;/span&gt;&lt;span style="color: #008000"&gt;不知道如何使用配置初始化Binding&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008000"&gt;//&lt;/span&gt;&lt;span style="color: #008000"&gt;Binding&amp;nbsp;binding&amp;nbsp;=&amp;nbsp;Assembly.GetCallingAssembly().CreateInstance(ServiceModelConfig.Bindings["NewBinding0"].BindingType.FullName)&amp;nbsp;as&amp;nbsp;Binding;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008000"&gt;//&lt;/span&gt;&lt;span style="color: #008000"&gt;初始化Endpoint&lt;/span&gt;&lt;span style="color: #008000"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;&lt;br /&gt;EndpointAddress&amp;nbsp;point&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;new&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;EndpointAddress(ServiceModelConfig.Client.Endpoints[&lt;/span&gt;&lt;span style="color: #800080"&gt;0&lt;/span&gt;&lt;span style="color: #000000"&gt;].Address);&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008000"&gt;//&lt;/span&gt;&lt;span style="color: #008000"&gt;创建通道&lt;/span&gt;&lt;span style="color: #008000"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;&lt;br /&gt;IMathService&amp;nbsp;service&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;ChannelFactory&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #000000"&gt;IMathService&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;.CreateChannel(&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;new&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;BasicHttpBinding&amp;nbsp;()&amp;nbsp;,&lt;br /&gt;&lt;br /&gt;point);&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008000"&gt;//&lt;/span&gt;&lt;span style="color: #008000"&gt;调用&lt;/span&gt;&lt;span style="color: #008000"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;int&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;result&lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;service.Add(&lt;/span&gt;&lt;span style="color: #800080"&gt;2&lt;/span&gt;&lt;span style="color: #000000"&gt;,&amp;nbsp;&lt;/span&gt;&lt;span style="color: #800080"&gt;3&lt;/span&gt;&lt;span style="color: #000000"&gt;);&lt;br /&gt;&lt;br /&gt;Console.WriteLine(&lt;/span&gt;&lt;span style="color: #0000ff"&gt;string&lt;/span&gt;&lt;span style="color: #000000"&gt;.Format(&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;result={0}&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt;,&amp;nbsp;result));&lt;br /&gt;&lt;br /&gt;Console.Read();&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #808080"&gt;///&lt;/span&gt;&lt;span style="color: #008000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;span style="color: #008000"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #808080"&gt;///&lt;/span&gt;&lt;span style="color: #008000"&gt;&amp;nbsp;获取ServiceModel配置信息&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #808080"&gt;///&lt;/span&gt;&lt;span style="color: #008000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;span style="color: #008000"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #808080"&gt;///&lt;/span&gt;&lt;span style="color: #008000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #808080"&gt;&amp;lt;returns&amp;gt;&amp;lt;/returns&amp;gt;&lt;/span&gt;&lt;span style="color: #808080"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;static&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;ServiceModelSectionGroup&amp;nbsp;GetServiceModelSectionGroup()&lt;br /&gt;&lt;br /&gt;{&lt;br /&gt;&lt;br /&gt;Configuration&amp;nbsp;conf&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;ConfigurationManager.OpenExeConfiguration(Assembly.GetEntryAssembly().Location);&lt;br /&gt;&lt;br /&gt;ServiceModelSectionGroup&amp;nbsp;svcmod&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000"&gt;=&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;(ServiceModelSectionGroup)conf.GetSectionGroup(&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;system.serviceModel&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #000000"&gt;);&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;return&lt;/span&gt;&lt;span style="color: #000000"&gt;&amp;nbsp;svcmod;&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;2. AppConfig&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;&lt;div&gt;&lt;span style="color: #0000ff"&gt;&amp;lt;?&lt;/span&gt;&lt;span style="color: #ff00ff"&gt;xml&amp;nbsp;version="1.0"&amp;nbsp;encoding="utf-8"&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;?&amp;gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;configuration&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;system.serviceModel&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;client&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;endpoint&amp;nbsp;&lt;/span&gt;&lt;span style="color: #ff0000"&gt;address&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="http://localhost:1331/MathService.svc"&lt;/span&gt;&lt;span style="color: #ff0000"&gt;&amp;nbsp;binding&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="basicHttpBinding"&lt;/span&gt;&lt;span style="color: #ff0000"&gt;&lt;br /&gt;&lt;br /&gt;contract&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="Hbb0b0.WCF.Inteface.IMathService"&lt;/span&gt;&lt;span style="color: #ff0000"&gt;&amp;nbsp;name&lt;/span&gt;&lt;span style="color: #0000ff"&gt;="mathService"&lt;/span&gt;&lt;span style="color: #ff0000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;client&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;system.serviceModel&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;configuration&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/strong&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/hbb0b0/aggbug/2146300.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/hbb0b0/archive/2011/08/19/2146300.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/hbb0b0/archive/2011/05/21/2052864.html</id><title type="text">c 语言指针的用法 （1）</title><summary type="text">#include&lt;stdio.h&gt; /*定义函数指针类型*/ typedef void (*func_t)(int); void show(int); int main(int argc, char *argv[]) { /*NULL 的指针地址*/ int * a=100; void * p=NULL; printf("NULL=%p\n",p); /*p指向int 类型的地址*/ p=&amp;a; /*直接读取指针的地址*/ printf("p=%p\n",p); /*取出指针的真实类型地址*/ printf("p=%p\n&amp;</summary><published>2011-05-21T09:05:00Z</published><updated>2011-05-21T09:05:00Z</updated><author><name>b0b0</name><uri>http://www.cnblogs.com/hbb0b0/</uri></author><link rel="alternate" href="http://www.cnblogs.com/hbb0b0/archive/2011/05/21/2052864.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/hbb0b0/archive/2011/05/21/2052864.html"/><content type="html">&lt;p&gt;#include&amp;lt;stdio.h&amp;gt;    &lt;br /&gt;/*定义函数指针类型*/     &lt;br /&gt;typedef void (*func_t)(int);     &lt;br /&gt;void show(int);     &lt;br /&gt;int main(int argc, char *argv[])     &lt;br /&gt;{     &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; /*NULL 的指针地址*/     &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; int * a=100;     &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; void * p=NULL;     &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; printf("NULL=%p\n",p);     &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; /*p指向int 类型的地址*/     &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; p=&amp;amp;a;     &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; /*直接读取指针的地址*/     &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; printf("p=%p\n",p); &lt;/p&gt;  &lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; /*取出指针的真实类型地址*/    &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; printf("p=%p\n",(int*)p); &lt;/p&gt;  &lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; /*取出指针的值*/    &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; printf("p=%d\n",*((int*)p)); &lt;/p&gt;  &lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; /*解释为char*取出指针的值*/    &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; printf("p=%s\n",*((char*)p)); &lt;/p&gt;  &lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /*把函数的地址赋给 p*/    &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; p=&amp;amp;show; &lt;/p&gt;  &lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /*利用p调用函数*/    &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ((func_t)p)(100); &lt;/p&gt;  &lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; return 0;    &lt;br /&gt;}     &lt;br /&gt;/*函数实现*/     &lt;br /&gt;void show(int a)     &lt;br /&gt;{     &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; printf("-----function:%s------\n","show");     &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; printf("a=%d\n",a);     &lt;br /&gt;}&lt;/p&gt;  &lt;p&gt;&amp;nbsp;&lt;/p&gt;  &lt;p&gt;输出结果：&lt;/p&gt;  &lt;p&gt;NULL=0000    &lt;br /&gt;p=FFCC     &lt;br /&gt;p=FFCC     &lt;br /&gt;p=100     &lt;br /&gt;p=am termination     &lt;br /&gt;h     &lt;br /&gt;-----function:show------     &lt;br /&gt;a=100&lt;/p&gt;&lt;img src="http://www.cnblogs.com/hbb0b0/aggbug/2052864.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/hbb0b0/archive/2011/05/21/2052864.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/hbb0b0/archive/2011/04/17/2018866.html</id><title type="text">local 不能解析为127.0.0.1</title><summary type="text">在 C:\WINDOWS\system32\drivers\etc\Hosts local 可以解析为 127.0.0.1需要进行定义 127.0.0.1 locallocalhost 也可以解析为 127.0.0.1需要进行定义 127.0.0.1 localhost</summary><published>2011-04-17T06:26:00Z</published><updated>2011-04-17T06:26:00Z</updated><author><name>b0b0</name><uri>http://www.cnblogs.com/hbb0b0/</uri></author><link rel="alternate" href="http://www.cnblogs.com/hbb0b0/archive/2011/04/17/2018866.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/hbb0b0/archive/2011/04/17/2018866.html"/><content type="html">&lt;div&gt;在 C:\WINDOWS\system32\drivers\etc\Hosts &lt;br /&gt;local 可以解析为 127.0.0.1&lt;br /&gt;需要进行定义 127.0.0.1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; local&lt;br /&gt;localhost 也可以解析为 127.0.0.1&lt;br /&gt;需要进行定义 127.0.0.1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; localhost&lt;/div&gt;&lt;img src="http://www.cnblogs.com/hbb0b0/aggbug/2018866.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/hbb0b0/archive/2011/04/17/2018866.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry></feed>
