﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>IT博客-依睛(IT blog) 我回来了，PHP&lt;--&gt;C/C++ LINUX-随笔分类-学习资料库</title><link>http://www.cnitblog.com/guopingleee/category/5137.html</link><description>笨鸟
</description><language>zh-cn</language><lastBuildDate>Mon, 10 Oct 2011 07:45:33 GMT</lastBuildDate><pubDate>Mon, 10 Oct 2011 07:45:33 GMT</pubDate><ttl>60</ttl><item><title>三层结构怎么理解</title><link>http://www.cnitblog.com/guopingleee/archive/2009/02/04/54230.html</link><dc:creator>向左向右走</dc:creator><author>向左向右走</author><pubDate>Wed, 04 Feb 2009 02:45:00 GMT</pubDate><guid>http://www.cnitblog.com/guopingleee/archive/2009/02/04/54230.html</guid><wfw:comment>http://www.cnitblog.com/guopingleee/comments/54230.html</wfw:comment><comments>http://www.cnitblog.com/guopingleee/archive/2009/02/04/54230.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/guopingleee/comments/commentRss/54230.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/guopingleee/services/trackbacks/54230.html</trackback:ping><description><![CDATA[层结构？详细资料
<div class="wr" id="question_info"><span class="red"><img height="16" src="http://img.baidu.com/img/iknow/icn_point.gif" width="16" align="absMiddle" /> 悬赏分：0</span> - <span class="gray">解决时间：2006-4-22 19:21</span></div><div class="f14 wr" id="question_content"><cd></cd></div><div class="f14 wr" id="question_sup"><b>问题补充：</b>在编程中，三层结构怎么理解</div><div class="gray wr" id="question_author" align="right">提问者： <a href="http://passport.baidu.com/?business&amp;aid=6&amp;un=dunly511#2" target="_blank">dunly511</a> - <a href="http://www.baidu.com/search/zhidao_help.html#n5" target="_blank">见习魔法师 三级</a></div><div class="rg_4"></div><div class="rg_5"></div><div class="rg_1"></div><div class="mb12 bai"><div class="rr_1"></div><div class="rr_2"></div><div class="rr_3"></div><div class="rr"><div class="t1"><div class="ico"><div class="ibest"></div></div>最佳答案</div><div class="bc0" style="PADDING-RIGHT: 0pt; PADDING-LEFT: 0pt; PADDING-BOTTOM: 5px; PADDING-TOP: 5px"><div class="wr"><div class="f14 p90 pl10" id="best_answer_content"><ca>关于ASP.NET的三层结构 <br /><br /><br /><br />三层结构解释 <br /><br />所谓三层体系结构，是在客户端与数据库之间加入了一个中间层，也叫组件层。这里所 <br /><br />说的三层体系，不是指物理上的三层，不是简单地放置三台机器就是三层体系结构，也 <br /><br />不仅仅有B/S应用才是三层体系结构，三层是指逻辑上的三层，即使这三个层放置到一 <br /><br />台机器上。 三层体系的应用程序将业务规则、数据访问、合法性校验等工作放到了中 <br /><br />间层进行处理。通常情况下，客户端不直接与数据库进行交互，而是通过COM/DCOM通 <br /><br />讯与中间层建立连接，再经由中间层与数据库进行交换. <br /><br />理解ASP.NET中的三层结构 <br /><br />我们用三层结构主要是使项目结构更清楚，分工更明确，有利于后期的维护和升级． <br /><br />三层结构包含:表示层(USL),业务逻辑层(BLL),数据访问层(DAL) <br /><br />1：数据数据访问层:主要是对原始数据（数据库或者文本文件等存放数据的形式）的操作层，而不 <br /><br />是指原始数据，也就是说，是对数据的操作，而不是数据库,具体为业务逻辑层或表示层提供数据服务． <br /><br /><br />2：业务逻辑层:主要是针对具体的问题的操作，也可以理解成对数据层的操作,对数据业务逻 <br /><br />辑处理，如果说数据层是积木，那逻辑层就是对这些积木的搭建。 <br /><br /><br />3：表示层:主要表示WEB方式,也可以表示成WINFORM方式,WEB方式也可以表现成 <br /><br />:aspx, 如果逻辑层相当强大和完善,无论表现层如何定义和更改,逻辑层都能完善地 <br /><br />提供服务。 <br /><br /><br />具体的区分方法 <br /><br /><br />1：数据数据访问层:主要看你的数据层里面有没有包含逻辑处理，实际上他的各个函数主要完成 <br /><br />各个对数据文件的操作。而不必管其他操作。 <br /><br /><br />2：业务逻辑层:主要负责对数据层的操作。也就是说把一些数据层的操作进行组合。 <br /><br /><br />3：表示层:主要对用户的请求接受，以及数据的返回，为客户端提供应用程序的访问。 <br /><br /><br /><br />ASP.NET中的三层结构说明 <br /><br />完善的三层结构的要求是:修改表现层而不用修改逻辑层,修改逻辑层而不用修改数据层 <br /><br />.否则你的应用是不是多层结构,或者说是层结构的划分和组织上是不是有问题就很难说. <br /><br />不同的应用有不同的理解，这是一个概念的问题． <br /><br /><br /><br />ASP.NET中的三层结构关系图(针对本教程中的项目而言) <br /><br /><br /><br /><br /><br />针对本教程中:显示层为94aspnet项目，BLL为逻辑层项目，DB为数据层项目． <br /><br />三层结构教程目录 <br />1 关于三层结构 <br />2 数据库的需求分析与逻辑设计 <br />3 第一章 显示首页帖子信息(表示层) <br />4 第二章 显示首页帖子信息(业务逻辑层) <br />5 第三章 显示首页帖子信息(数据访问层) <br />6 第四章 显示首页帖子信息(存储过程) <br />7 第五章 显示主题帖子详细信息(表示层) <br />8 第六章 显示主题帖子详细信息(数据访问层) <br />9 第七章 显示主题帖子详细信息(存储过程) <br />10 第八章 显示回复帖子详细信息以及添加回复记录(表示层,数据访问层) <br />11 第九章 显示回复帖子详细信息以及添加回复记录(存储过程) <br />12 第十章 发布主题帖子(表示层) <br />13 第十一章 发布主题帖子(业务逻辑层) <br />14 第十二章 发布主题帖子(数据访问层及存储过程) <br />15 第十三章 会员注册(表示层) <br />16 第十四章 会员注册(业务逻辑层) <br />17 第十五章 会员注册(数据访问层) <br />18 第十六章 会员注册(存储过程) <br />19 第十七章 会员登陆(表示层) <br />20 第十八章 会员登陆(数据访问层，存储过程) <br />21 第十九章 结合会员和游客进行发布帖子和回复帖子． <br />22 第二十章 公用层的类以及公用方法及属性在表示层的使用． <br />23 赠送一套解决方案 </ca></div></div></div>为何使用N层架构？ <br /><br />因为每一层都可以在仅仅更改很少量的代码后，就能放到物理上不同的服务器上使用，因此结构灵活而且性能更佳。此外，每层做些什么其它层是完全看不到的，因此更改、更新某层，都不再需要重新编译或者更改全部的层了。这是个很强大的功能。例如，如果把数据访问代码与业务逻辑层分离，当数据库服务器更改后，你只需要更改数据访问的代码，因为业务逻辑层是不变的，因此不需要更改或者重新编译业务逻辑层。 <br /><br />一个N层的应用程序通常有三层：表现层、业务层和数据层。下面让我们看看每层都做些什么。 <br /><br />表现层（Presentation Layer） <br /><br />表现层用于用户接口的展示，以及用业务层的类和对象来“驱动”这些接口。 <br /><br />在ASP.NET中，该层包括aspx页面、用户控制、服务器控制以及某些与安全相关的类和对象。 <br /><br />业务层（Business Tier） <br /><br />业务层用于访问数据层，从数据层取数据、修改数据以及删除数据，并将结果返回给表现层。 <br /><br />在ASP.NET中，该层包括使用SqlClient或OleDb从SQL Server或Access数据库取数据、更新数据及删除数据，并把取得的数据放到DataReader或DataSet中返回给表现层。返回的数据也许只有一个整型数字，比如一个表的行记录数目，但这也要用数据层的数据进行计算。 <br /><br /><br /><br />BLL和DAL <br /><br />通常该层被划分成两个子层：业务逻辑层（Business Logic Layer，BLL）和数据访问层（Data Access Layers，DAL）。业务逻辑层在数据访问层之上，也就是说BLL调用DAL的类和对象。DAL访问数据并将其转给BLL。 <br /><br />在ASP.NET中，该层可以用SqlClient或OleDb从SQL Server或Access数据库取数据，把数据通过DataSet 或DataReader的形式给BLL，BLL处理数据给表现层。有的时候，例如直接把DataSet 或DataReader送给表现层的时候，BLL是一个透明层。 <br /><br />数据层（Data Tier） <br /><br />数据层是数据库或者数据源。在.NET中，通常它是一个SQL Server或Access数据库，但不仅限于此两种形式，它还可能是Oracle，mySQL，甚至是XML。 <br /><br />逻辑层VS（分布式）物理层 <br /><br />人们容易将这两个概念搞混。我们说逻辑层是把层按类的集合来划分，而这些层都在同一台个服务器上。（分布式）物理层是指类的集合在不同的服务器上，用附加的代码来处理层间的通信，比如remoting和web服务。 <br /><br />决定如何划分你的层（是物理的还是不是物理的）是非常重要的。在划分时应考虑下面因素： <br /><br />1、注意如果划分成物理层，你的应用程序的速度会因为不同服务器在网络中通信的延迟而减慢。所以，如果你决定用物理层，请确保获得性能的提升大于性能的降低。 <br /><br />2、按照n层架构设计你的应用程序。 <br /><br />3、部署以及维护物理分布式的应用程序的成本是很高的。你首先需要不止一台服务器，你还需要网络硬件来连接这些服务器。在这种情况下，部署应用变得更加复杂！因此这样做之前请确定这样做是否值得。 <br /><br />另外还要注意，你的应用程序的每层都做何使用。你也许因为运行的多个服务都需要某一层而把该层放到别台服务器上。例如，你也许会因为给不同的用户定制不同的表现层，而将业务逻辑层放于别处；你也许会因为还有其它的应用访问同一个数据库，而把SQL server服务放到别处。<br /><br /><h1 class="headtit">[冷枫]对“三层结构”的深入理解</h1><h3 class="headaur"><a href="http://www.builder.com.cn/" target="_blank">开发者在线 Builder.com.cn</a> 更新时间:<cite>2007-09-22</cite>作者：<span>冷枫</span> 来源:CSDN</h3><h2 class="headkeyw">本文关键词： <a href="http://www.builder.com.cn/files/list-0-0-81474-1-1.htm" target="_blank">冷枫</a><a href="http://www.builder.com.cn/files/list-0-0-68503-1-1.htm" target="_blank">结构</a><a href="http://www.builder.com.cn/files/list-0-0-50297-1-1.htm" target="_blank">web</a><a href="http://www.builder.com.cn/files/list-0-0-69826-1-1.htm" target="_blank">应用程序</a></h2><div class="artl_con"><span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 'Courier New'; mso-ascii-font-family: 'Courier New'; mso-hansi-font-family: 'Courier New'"><u> </u><p><strong><span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 'Courier New'; mso-ascii-font-family: 'Courier New'; mso-hansi-font-family: 'Courier New'">“三层结构”是什么？</span></strong><strong><span lang="EN-US" style="FONT-SIZE: 9pt; mso-bidi-font-family: 'Courier New'"></span></strong></p><p><span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 'Courier New'; mso-ascii-font-family: 'Courier New'; mso-hansi-font-family: 'Courier New'">　　“三层结构”一词中的“三层”是指：“表现层”、“中间业务层”、“数据访问层”。其中：</span><span lang="EN-US" style="FONT-SIZE: 9pt; mso-bidi-font-family: 'Courier New'"></span></p><p><span lang="EN-US" style="FONT-SIZE: 5.5pt; FONT-FAMILY: Wingdings; mso-bidi-font-family: Wingdings; mso-fareast-font-family: Wingdings"><span style="mso-list: Ignore">n<span style="FONT: 7pt 'Times New Roman'">            </span></span></span><span style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: 宋体; mso-bidi-font-family: 'Courier New'; mso-ascii-font-family: 'Courier New'; mso-hansi-font-family: 'Courier New'">表　现　层</span><span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 'Courier New'; mso-ascii-font-family: 'Courier New'; mso-hansi-font-family: 'Courier New'">：位于最外层（最上层），离用户最近。用于显示数据和接收用户输入的数据，为用户提供一种交互式操作的界面。</span><span lang="EN-US" style="FONT-SIZE: 9pt; mso-bidi-font-family: 'Courier New'"></span></p><p><span lang="EN-US" style="FONT-SIZE: 5.5pt; FONT-FAMILY: Wingdings; mso-bidi-font-family: Wingdings; mso-fareast-font-family: Wingdings"><span style="mso-list: Ignore">n<span style="FONT: 7pt 'Times New Roman'">            </span></span></span><span style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: 宋体; mso-bidi-font-family: 'Courier New'; mso-ascii-font-family: 'Courier New'; mso-hansi-font-family: 'Courier New'">中间业务层</span><span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 'Courier New'; mso-ascii-font-family: 'Courier New'; mso-hansi-font-family: 'Courier New'">：负责处理用户输入的信息，或者是将这些信息发送给数据访问层进行保存，或者是调用数据访问层中的函数再次读出这些数据。中间业务层也可以包括一些对“商业逻辑”描述代码在里面。</span><span lang="EN-US" style="FONT-SIZE: 9pt; mso-bidi-font-family: 'Courier New'"></span></p><p><span lang="EN-US" style="FONT-SIZE: 5.5pt; FONT-FAMILY: Wingdings; mso-bidi-font-family: Wingdings; mso-fareast-font-family: Wingdings"><span style="mso-list: Ignore">n<span style="FONT: 7pt 'Times New Roman'">            </span></span></span><span style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: 宋体; mso-bidi-font-family: 'Courier New'; mso-ascii-font-family: 'Courier New'; mso-hansi-font-family: 'Courier New'">数据访问层</span><span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 'Courier New'; mso-ascii-font-family: 'Courier New'; mso-hansi-font-family: 'Courier New'">：仅实现对数据的保存和读取操作。数据访问，可以访问数据库系统、二进制文件、文本文档或是</span><span lang="EN-US" style="FONT-SIZE: 9pt; mso-bidi-font-family: 'Courier New'"><font face="Courier New">XML</font></span><span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 'Courier New'; mso-ascii-font-family: 'Courier New'; mso-hansi-font-family: 'Courier New'">文档。</span><span lang="EN-US" style="FONT-SIZE: 9pt; mso-bidi-font-family: 'Courier New'"></span></p><p><span lang="EN-US" style="FONT-SIZE: 9pt; mso-bidi-font-family: 'Courier New'"><font face="Courier New"> <span lang="EN-US" style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'; mso-bidi-font-family: 'Times New Roman'; mso-fareast-font-family: 宋体; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA"><?XML:NAMESPACE PREFIX = V /?><v:shapetype id="_x0000_t75" stroked="f" filled="f" path="m@4@5l@4@11@9@11@9@5xe" o:preferrelative="t" o:spt="75" coordsize="21600,21600"> <span lang="EN-US" style="FONT-SIZE: 9pt; FONT-FAMILY: 'Courier New'; mso-bidi-font-family: 'Times New Roman'; mso-fareast-font-family: 宋体; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA"><v:shapetype id="_x0000_t75" stroked="f" filled="f" path="m@4@5l@4@11@9@11@9@5xe" o:preferrelative="t" o:spt="75" coordsize="21600,21600"><img alt="" src="http://p.blog.csdn.net/images/p_blog_csdn_net/Dream6000/1.GIF" /><v:stroke joinstyle="miter"></v:stroke><v:formulas><v:f eqn="if lineDrawn pixelLineWidth 0"></v:f><v:f eqn="sum @0 1 0"></v:f><v:f eqn="sum 0 0 @1"></v:f><v:f eqn="prod @2 1 2"></v:f><v:f eqn="prod @3 21600 pixelWidth"></v:f><v:f eqn="prod @3 21600 pixelHeight"></v:f><v:f eqn="sum @0 0 1"></v:f><v:f eqn="prod @6 1 2"></v:f><v:f eqn="prod @7 21600 pixelWidth"></v:f><v:f eqn="sum @8 21600 0"></v:f><v:f eqn="prod @7 21600 pixelHeight"></v:f><v:f eqn="sum @10 21600 0"></v:f></v:formulas><v:path o:connecttype="rect" gradientshapeok="t" o:extrusionok="f"></v:path><?XML:NAMESPACE PREFIX = O /?><o:lock aspectratio="t" v:ext="edit"></o:lock></v:shapetype><v:shape id="_x0000_i1025" style="WIDTH: 274.5pt; HEIGHT: 149.25pt" o:ole="" type="#_x0000_t75"><v:imagedata o:title="" src="file:///C:DOCUME~1DREAM6~1LOCALS~1Tempmsohtml1clip_image001.emz"></v:imagedata></v:shape></span><v:stroke joinstyle="miter"></v:stroke><v:formulas><v:f eqn="if lineDrawn pixelLineWidth 0"></v:f><v:f eqn="sum @0 1 0"></v:f><v:f eqn="sum 0 0 @1"></v:f><v:f eqn="prod @2 1 2"></v:f><v:f eqn="prod @3 21600 pixelWidth"></v:f><v:f eqn="prod @3 21600 pixelHeight"></v:f><v:f eqn="sum @0 0 1"></v:f><v:f eqn="prod @6 1 2"></v:f><v:f eqn="prod @7 21600 pixelWidth"></v:f><v:f eqn="sum @8 21600 0"></v:f><v:f eqn="prod @7 21600 pixelHeight"></v:f><v:f eqn="sum @10 21600 0"></v:f></v:formulas><v:path o:connecttype="rect" gradientshapeok="t" o:extrusionok="f"></v:path><o:lock aspectratio="t" v:ext="edit"></o:lock></v:shapetype><v:shape id="_x0000_i1025" style="WIDTH: 274.5pt; HEIGHT: 149.25pt" o:ole="" type="#_x0000_t75"><v:imagedata o:title="" src="file:///C:DOCUME~1DREAM6~1LOCALS~1Tempmsohtml1clip_image001.emz"></v:imagedata></v:shape></span></font></span></p><p align="center"><font face="Courier New"><span lang="EN-US" style="FONT-SIZE: 9pt"><v:shapetype id="_x0000_t75" stroked="f" filled="f" path="m@4@5l@4@11@9@11@9@5xe" o:preferrelative="t" o:spt="75" coordsize="21600,21600"><v:stroke joinstyle="miter"></v:stroke><v:formulas><v:f eqn="if lineDrawn pixelLineWidth 0"></v:f><v:f eqn="sum @0 1 0"></v:f><v:f eqn="sum 0 0 @1"></v:f><v:f eqn="prod @2 1 2"></v:f><v:f eqn="prod @3 21600 pixelWidth"></v:f><v:f eqn="prod @3 21600 pixelHeight"></v:f><v:f eqn="sum @0 0 1"></v:f><v:f eqn="prod @6 1 2"></v:f><v:f eqn="prod @7 21600 pixelWidth"></v:f><v:f eqn="sum @8 21600 0"></v:f><v:f eqn="prod @7 21600 pixelHeight"></v:f><v:f eqn="sum @10 21600 0"></v:f></v:formulas><v:path o:connecttype="rect" gradientshapeok="t" o:extrusionok="f"></v:path><o:lock aspectratio="t" v:ext="edit"></o:lock></v:shapetype><v:shape id="_x0000_i1025" style="WIDTH: 274.5pt; HEIGHT: 149.25pt" o:ole="" type="#_x0000_t75"><v:imagedata o:title="" src="file:///C:DOCUME~1DREAM6~1LOCALS~1Tempmsohtml1clip_image001.emz"></v:imagedata></v:shape></span><span lang="EN-US" style="FONT-SIZE: 9pt; mso-bidi-font-family: 'Courier New'"></span></font></p><p><span lang="EN-US" style="FONT-SIZE: 9pt"><font face="Courier New"></font></span> </p><p><span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Courier New'; mso-hansi-font-family: 'Courier New'">　　对依赖方向的研究将是本文的重点，数值返回方向基本上是没有变化的。</span><span lang="EN-US" style="FONT-SIZE: 9pt"></span></p><p><br /></p><p>在一个</p><p><span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 'Courier New'; mso-ascii-font-family: 'Courier New'; mso-hansi-font-family: 'Courier New'">　　如果只以分层的设计角度看，</span><span lang="EN-US" style="FONT-SIZE: 9pt; mso-bidi-font-family: 'Courier New'"><font face="Courier New">Duwamish7</font></span><span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 'Courier New'; mso-ascii-font-family: 'Courier New'; mso-hansi-font-family: 'Courier New'">要比</span><span lang="EN-US" style="FONT-SIZE: 9pt; mso-bidi-font-family: 'Courier New'"><font face="Courier New">PetShop3.0</font></span><span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 'Courier New'; mso-ascii-font-family: 'Courier New'; mso-hansi-font-family: 'Courier New'">复杂一些！而如果较为全面的比较二者，</span><span lang="EN-US" style="FONT-SIZE: 9pt; mso-bidi-font-family: 'Courier New'"><font face="Courier New">PetShop3.0</font></span><span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 'Courier New'; mso-ascii-font-family: 'Courier New'; mso-hansi-font-family: 'Courier New'">则显得比较复杂。但我们先不讨论这些，对</span><span lang="EN-US" style="FONT-SIZE: 9pt; mso-bidi-font-family: 'Courier New'"><font face="Courier New">PetShop3.0</font></span><span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 'Courier New'; mso-ascii-font-family: 'Courier New'; mso-hansi-font-family: 'Courier New'">和</span><span lang="EN-US" style="FONT-SIZE: 9pt; mso-bidi-font-family: 'Courier New'"><font face="Courier New">Duwamish7</font></span><span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 'Courier New'; mso-ascii-font-family: 'Courier New'; mso-hansi-font-family: 'Courier New'">的研究，并不是本文的重点。现在的问题就是：<u style="text-underline: dotted">既然“三层结构”已经被分派到各自的项目中，那么剩下来的项目是做什么的呢？</u>例如</span><span lang="EN-US" style="FONT-SIZE: 9pt; mso-bidi-font-family: 'Courier New'"><font face="Courier New">PetShop3.0</font></span><span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 'Courier New'; mso-ascii-font-family: 'Courier New'; mso-hansi-font-family: 'Courier New'">中的“</span><span lang="EN-US" style="FONT-SIZE: 9pt; mso-bidi-font-family: 'Courier New'"><font face="Courier New">Model</font></span><span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 'Courier New'; mso-ascii-font-family: 'Courier New'; mso-hansi-font-family: 'Courier New'">”、“</span><span lang="EN-US" style="FONT-SIZE: 9pt; mso-bidi-font-family: 'Courier New'"><font face="Courier New">IDAL</font></span><span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 'Courier New'; mso-ascii-font-family: 'Courier New'; mso-hansi-font-family: 'Courier New'">”、“</span><span lang="EN-US" style="FONT-SIZE: 9pt; mso-bidi-font-family: 'Courier New'"><font face="Courier New">DALFactory</font></span><span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 'Courier New'; mso-ascii-font-family: 'Courier New'; mso-hansi-font-family: 'Courier New'">”这三个项目，再例如</span><span lang="EN-US" style="FONT-SIZE: 9pt; mso-bidi-font-family: 'Courier New'"><font face="Courier New">Duwamish7</font></span><span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 'Courier New'; mso-ascii-font-family: 'Courier New'; mso-hansi-font-family: 'Courier New'">中的“</span><span lang="EN-US" style="FONT-SIZE: 9pt; mso-bidi-font-family: 'Courier New'"><font face="Courier New">Common</font></span><span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 'Courier New'; mso-ascii-font-family: 'Courier New'; mso-hansi-font-family: 'Courier New'">”项目，还有就是在</span><span lang="EN-US" style="FONT-SIZE: 9pt; mso-bidi-font-family: 'Courier New'"><font face="Courier New">Bincess.CN</font></span><span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 'Courier New'; mso-ascii-font-family: 'Courier New'; mso-hansi-font-family: 'Courier New'">彬月论坛中的“</span><span lang="EN-US" style="FONT-SIZE: 9pt; mso-bidi-font-family: 'Courier New'"><font face="Courier New">Classes</font></span><span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 'Courier New'; mso-ascii-font-family: 'Courier New'; mso-hansi-font-family: 'Courier New'">”、“</span><span lang="EN-US" style="FONT-SIZE: 9pt; mso-bidi-font-family: 'Courier New'"><font face="Courier New">DbTask</font></span><span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 'Courier New'; mso-ascii-font-family: 'Courier New'; mso-hansi-font-family: 'Courier New'">”、这两个项目。它们究竟是做什么用的呢？</span><span style="FONT-SIZE: 9pt; mso-bidi-font-family: 'Courier New'"><font face="Courier New"><span lang="EN-US"></span></font></span></p><p><span lang="EN-US" style="FONT-SIZE: 9pt; mso-bidi-font-family: 'Courier New'"><font face="Courier New"></font></span> </p><p><strong><span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 'Courier New'; mso-ascii-font-family: 'Courier New'; mso-hansi-font-family: 'Courier New'">对“三层结构”的深入理解——从一家小餐馆说起</span></strong><strong><span lang="EN-US" style="FONT-SIZE: 9pt; mso-bidi-font-family: 'Courier New'"></span></strong></p><p><span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 'Courier New'; mso-ascii-font-family: 'Courier New'; mso-hansi-font-family: 'Courier New'">　　一个“三层结构”的</span><span lang="EN-US" style="FONT-SIZE: 9pt; mso-bidi-font-family: 'Courier New'"><font face="Courier New">Web</font></span><span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 'Courier New'; mso-ascii-font-family: 'Courier New'; mso-hansi-font-family: 'Courier New'">应用程序，就好象是一家小餐馆。</span><span lang="EN-US" style="FONT-SIZE: 9pt; mso-bidi-font-family: 'Courier New'"></span></p><p><span lang="EN-US" style="FONT-SIZE: 5.5pt; FONT-FAMILY: Wingdings; mso-bidi-font-family: Wingdings; mso-fareast-font-family: Wingdings"><span style="mso-list: Ignore">n<span style="FONT: 7pt 'Times New Roman'">            </span></span></span><span style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: 宋体; mso-bidi-font-family: 'Courier New'; mso-ascii-font-family: 'Courier New'; mso-hansi-font-family: 'Courier New'">表　现　层</span><span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 'Courier New'; mso-ascii-font-family: 'Courier New'; mso-hansi-font-family: 'Courier New'">，所有的</span><span lang="EN-US" style="FONT-SIZE: 9pt; mso-bidi-font-family: 'Courier New'"><font face="Courier New">.aspx</font></span><span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 'Courier New'; mso-ascii-font-family: 'Courier New'; mso-hansi-font-family: 'Courier New'">页面就好像是这家餐馆的菜谱。</span><span lang="EN-US" style="FONT-SIZE: 9pt; mso-bidi-font-family: 'Courier New'"></span></p><p><span lang="EN-US" style="FONT-SIZE: 5.5pt; FONT-FAMILY: Wingdings; mso-bidi-font-family: Wingdings; mso-fareast-font-family: Wingdings"><span style="mso-list: Ignore">n<span style="FONT: 7pt 'Times New Roman'">            </span></span></span><span style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: 宋体; mso-bidi-font-family: 'Courier New'; mso-ascii-font-family: 'Courier New'; mso-hansi-font-family: 'Courier New'">中间业务层</span><span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 'Courier New'; mso-ascii-font-family: 'Courier New'; mso-hansi-font-family: 'Courier New'">，就像是餐馆的服务生。</span><span lang="EN-US" style="FONT-SIZE: 9pt; mso-bidi-font-family: 'Courier New'"></span></p><p><span lang="EN-US" style="FONT-SIZE: 5.5pt; FONT-FAMILY: Wingdings; mso-bidi-font-family: Wingdings; mso-fareast-font-family: Wingdings"><span style="mso-list: Ignore">n<span style="FONT: 7pt 'Times New Roman'">            </span></span></span><span style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: 宋体; mso-bidi-font-family: 'Courier New'; mso-ascii-font-family: 'Courier New'; mso-hansi-font-family: 'Courier New'">数据访问层</span><span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 'Courier New'; mso-ascii-font-family: 'Courier New'; mso-hansi-font-family: 'Courier New'">，就像是餐馆的大厨师傅。</span><span lang="EN-US" style="FONT-SIZE: 9pt; mso-bidi-font-family: 'Courier New'"></span></p><p><span lang="EN-US" style="FONT-SIZE: 5.5pt; FONT-FAMILY: Wingdings; mso-bidi-font-family: Wingdings; mso-fareast-font-family: Wingdings"><span style="mso-list: Ignore">n<span style="FONT: 7pt 'Times New Roman'">            </span></span></span><span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 'Courier New'; mso-ascii-font-family: 'Courier New'; mso-hansi-font-family: 'Courier New'">而我们这些网站浏览者，就是去餐馆吃饭的吃客了……</span><span lang="EN-US" style="FONT-SIZE: 9pt; mso-bidi-font-family: 'Courier New'"></span></p><p><span lang="EN-US" style="FONT-SIZE: 9pt; mso-bidi-font-family: 'Courier New'"><font face="Courier New"></font></span> </p><p align="center"><font face="Courier New"><span lang="EN-US" style="FONT-SIZE: 9pt"><v:shape id="_x0000_i1032" style="WIDTH: 217.5pt; HEIGHT: 229.5pt" o:ole="" type="#_x0000_t75"><v:imagedata o:title="" src="file:///C:DOCUME~1DREAM6~1LOCALS~1Tempmsohtml1clip_image021.emz"></v:imagedata></v:shape></span><span lang="EN-US" style="FONT-SIZE: 9pt; mso-bidi-font-family: 'Courier New'"></span></font></p><p><span lang="EN-US" style="FONT-SIZE: 9pt; mso-bidi-font-family: 'Courier New'"><font face="Courier New"></font></span> </p><p><span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 'Courier New'; mso-ascii-font-family: 'Courier New'; mso-hansi-font-family: 'Courier New'">我们去一家餐馆吃饭，首先得看他们的菜谱，然后唤来服务生，告诉他我们想要吃的菜肴。服务生记下来以后，便会马上去通知大厨师傅要烹制这些菜。大厨师傅收到通知后，马上起火烧菜。过了不久，服务生便把一道一道香喷喷的、热气腾腾的美味端到我们的桌位上——</span><span lang="EN-US" style="FONT-SIZE: 9pt; mso-bidi-font-family: 'Courier New'"></span></p><p><span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 'Courier New'; mso-ascii-font-family: 'Courier New'; mso-hansi-font-family: 'Courier New'">而我们访问一个基于</span><span lang="EN-US" style="FONT-SIZE: 9pt; mso-bidi-font-family: 'Courier New'"><font face="Courier New">asp.net</font></span><span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 'Courier New'; mso-ascii-font-family: 'Courier New'; mso-hansi-font-family: 'Courier New'">技术的网站的时候，首先打开的是一个</span><span lang="EN-US" style="FONT-SIZE: 9pt; mso-bidi-font-family: 'Courier New'"><font face="Courier New">aspx</font></span><span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 'Courier New'; mso-ascii-font-family: 'Courier New'; mso-hansi-font-family: 'Courier New'">页面。这个</span><span lang="EN-US" style="FONT-SIZE: 9pt; mso-bidi-font-family: 'Courier New'"><font face="Courier New">aspx</font></span><span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 'Courier New'; mso-ascii-font-family: 'Courier New'; mso-hansi-font-family: 'Courier New'">页面的后台程序会去调用中间业务层的相应函数来获取结果。中间业务层又会去调用数据访问层的相应函数来获取结果。</span> </p><p><strong style="mso-bidi-font-weight: normal"><span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 'Courier New'; mso-ascii-font-family: 'Courier New'; mso-hansi-font-family: 'Courier New'">为什么需要“<span style="mso-bidi-font-weight: bold">三层结构”？——初探，就从数据库的升迁开始</span></span></strong><strong><span lang="EN-US" style="FONT-SIZE: 9pt; mso-bidi-font-family: 'Courier New'"></span></strong></p><p><span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 'Courier New'; mso-ascii-font-family: 'Courier New'; mso-hansi-font-family: 'Courier New'">一个站点中，访问数据库的程序代码散落在各个页面中，就像夜空中的星星一样繁多。这样一动百动的维护，难度可想而知。最难以忍受的是，对这种维护工作的投入，是没有任何价值的……</span><span lang="EN-US" style="FONT-SIZE: 9pt; mso-bidi-font-family: 'Courier New'"></span></p><p><span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 'Courier New'; mso-ascii-font-family: 'Courier New'; mso-hansi-font-family: 'Courier New'">有一个比较好的解决办法，那就是将访问数据库的代码全部都放在一个程序文件里。这样，数据库平台一旦发生变化，那么只需要集中修改这一个文件就可以了。我想有点开发经验的人，都会想到这一步的。这种“以不变应万变”的做法其实是简单的“<span style="COLOR: #333399">门面模式</span>”的应用。如果把一个网站比喻成一家大饭店，那么“门面模式”中的“门面”，就像是饭店的服务生，而一个网站的浏览者，就像是一个来宾。来宾只需要发送命令给服务生，然后服务生就会按照命令办事。至于服务生经历了多少辛苦才把事情办成？那个并不是来宾感兴趣的事情，来宾们只要求服务生尽快把自己交待事情办完。<u style="text-underline: dotted">我们就把</u></span><u style="text-underline: dotted"><span lang="EN-US" style="FONT-SIZE: 9pt; mso-bidi-font-family: 'Courier New'"><font face="Courier New">ListLWord.aspx.cs</font></span></u><u style="text-underline: dotted"><span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 'Courier New'; mso-ascii-font-family: 'Courier New'; mso-hansi-font-family: 'Courier New'">程序就看成是一个来宾发出的命令，而把新加入的</span></u><u style="text-underline: dotted"><span lang="EN-US" style="FONT-SIZE: 9pt; mso-bidi-font-family: 'Courier New'"><font face="Courier New">LWordTask.cs</font></span></u><u style="text-underline: dotted"><span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 'Courier New'; mso-ascii-font-family: 'Courier New'; mso-hansi-font-family: 'Courier New'">程序看成是一个饭店服务生</span></u><span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 'Courier New'; mso-ascii-font-family: 'Courier New'; mso-hansi-font-family: 'Courier New'">，那么来宾发出的命令就是：</span><span lang="EN-US" style="FONT-SIZE: 9pt; mso-bidi-font-family: 'Courier New'"></span></p><p><span style="FONT-SIZE: 9pt; COLOR: maroon; FONT-FAMILY: 宋体; mso-bidi-font-family: 'Courier New'; mso-ascii-font-family: 'Courier New'; mso-hansi-font-family: 'Courier New'">“给我读出留言板数据库中的数据，填充到</span><span lang="EN-US" style="FONT-SIZE: 9pt; COLOR: maroon; mso-bidi-font-family: 'Courier New'"><font face="Courier New">DataSet</font></span><span style="FONT-SIZE: 9pt; COLOR: maroon; FONT-FAMILY: 宋体; mso-bidi-font-family: 'Courier New'; mso-ascii-font-family: 'Courier New'; mso-hansi-font-family: 'Courier New'">数据集中并显示出来！”</span><span lang="EN-US" style="FONT-SIZE: 9pt; COLOR: maroon; mso-bidi-font-family: 'Courier New'"></span></p><p><span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 'Courier New'; mso-ascii-font-family: 'Courier New'; mso-hansi-font-family: 'Courier New'">而服务生接到命令后，就会依照执行。而</span><span lang="EN-US" style="FONT-SIZE: 9pt; mso-bidi-font-family: 'Courier New'"><font face="Courier New">PostLWord.aspx.cs</font></span><span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 'Courier New'; mso-ascii-font-family: 'Courier New'; mso-hansi-font-family: 'Courier New'">程序，让服务生做的是：</span><span lang="EN-US" style="FONT-SIZE: 9pt; mso-bidi-font-family: 'Courier New'"></span></p><p><span style="FONT-SIZE: 9pt; COLOR: maroon; FONT-FAMILY: 宋体; mso-bidi-font-family: 'Courier New'; mso-ascii-font-family: 'Courier New'; mso-hansi-font-family: 'Courier New'">“把我的留言内容写入到数据库中！”</span><span lang="EN-US" style="FONT-SIZE: 9pt; COLOR: maroon; mso-bidi-font-family: 'Courier New'"></span></p><p><span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 'Courier New'; mso-ascii-font-family: 'Courier New'; mso-hansi-font-family: 'Courier New'">而服务生接到命令后，就会依照执行。这就是</span><span lang="EN-US" style="FONT-SIZE: 9pt; mso-bidi-font-family: 'Courier New'"><font face="Courier New">TraceLWord2</font></span><span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 'Courier New'; mso-ascii-font-family: 'Courier New'; mso-hansi-font-family: 'Courier New'">！可以在</span><span lang="EN-US" style="FONT-SIZE: 9pt; mso-bidi-font-family: 'Courier New'"><font face="Courier New">CodePackage/TraceLWord2</font></span><span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 'Courier New'; mso-ascii-font-family: 'Courier New'; mso-hansi-font-family: 'Courier New'">目录中找到——</span><span lang="EN-US" style="FONT-SIZE: 9pt; mso-bidi-font-family: 'Courier New'"></span></p><p><span lang="EN-US" style="FONT-SIZE: 9pt; mso-bidi-font-family: 'Courier New'"><font face="Courier New"></font></span> </p></span></div></div></div><img src ="http://www.cnitblog.com/guopingleee/aggbug/54230.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/guopingleee/" target="_blank">向左向右走</a> 2009-02-04 10:45 <a href="http://www.cnitblog.com/guopingleee/archive/2009/02/04/54230.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>安全脚本程序的编写 V1.0（1）</title><link>http://www.cnitblog.com/guopingleee/archive/2007/10/14/34844.html</link><dc:creator>向左向右走</dc:creator><author>向左向右走</author><pubDate>Sun, 14 Oct 2007 10:12:00 GMT</pubDate><guid>http://www.cnitblog.com/guopingleee/archive/2007/10/14/34844.html</guid><wfw:comment>http://www.cnitblog.com/guopingleee/comments/34844.html</wfw:comment><comments>http://www.cnitblog.com/guopingleee/archive/2007/10/14/34844.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cnitblog.com/guopingleee/comments/commentRss/34844.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/guopingleee/services/trackbacks/34844.html</trackback:ping><description><![CDATA[　　by C<a title="ASP学习技巧教程" href="http://www.vipcn.com/InfoList/Catalog_10_1.html" target="_blank">ASP</a>er--------<a title="网络安全资讯" href="http://www.vipcn.com/InfoList/Catalog_59_1.html" target="_blank">安全</a>焦点 <br />CASPer@xfocus.org <br />http://www.xfocus.org <br /><br />基本思路： <br />为没一个功能写一个独立的程序，程序页 <br />尽可能少的让客户了解你的<a title="服务器" href="http://www.vipcn.com/InfoList/Catalog_37_1.html" target="_blank">服务器</a>端信息 <br />不要用"客户应该这么写"这个思路想问题 <br />尽可能多的想到不可能发生的事情 <br /><br />1.关于交互式动态网页可能存在的问题 <br />1.1 form类型的交互 <br />1.1.1 概念介绍 <br />在我们和<a title="网页浏览相关知识技巧" href="http://www.vipcn.com/InfoList/Catalog_58_1.html" target="_blank">浏览</a>者进行交互时，最常用到的就是form(post/get/put方法)，虽然非常方便，但是很多问题也是因他而起。form表单中input标志 <br />用来接受用户<a title="输入法技巧" href="http://www.vipcn.com/InfoList/Catalog_35_1.html" target="_blank">输入</a>的信息，例如：用户名、密码、email等。如果你没有对用户输入进行很好的检查的话，一个恶意的用户会屏蔽掉一些安全机 <br />制，绕过安全<a title="网络考试认证" href="http://www.vipcn.com/InfoList/Catalog_7_1.html" target="_blank">认证</a>。例如，输入标准的<a title="Html学习教程" href="http://www.vipcn.com/InfoList/Catalog_76_1.html" target="_blank">Html</a>语句或者javascript语句会改变输出结果 ，在输入框中打入标准的HTML语句会得到什么样的结果呢？比如一个留言本，我们留言内容中打入：&lt;font size=10&gt;你好！&lt;/font&gt;　 如果你的程序中没有屏蔽HTML语句，那么就会改变"你好"字体的 <br />大小。在留言本中改变字体大小和贴图有时并不是什么坏事，反而可以使留言本生动。但是如果在输入框中写个 javascript 的死循环，比如： <br />&lt;a herf="http://someurl" onMouseover="while(1) {window.close('/')}"&gt;第一万个惊心动魄&lt;/a&gt; 那么其他查看该留言的客人只要移 <br />动鼠标到"第一万个惊心动魄"，上就会使用户的浏览器因死循环而死掉。 <br />1.1.2 <a title="网络安全防范" href="http://www.vipcn.com/InfoList/Catalog_58_1.html" target="_blank">防范</a>要点 <br />(1)对特殊字符进行过滤 <br />([\&amp;;\`'\\\"*?~&lt;&gt;^\(\)\[\]\{\}\$\n\r])/\\$1/g;)，这个是最基本的，在很多地方也已经不只一次提到过 <br />&lt;script language="vbscript"&gt; <br />sub uBotton_onclick <br />if form1.uUserName.value=""then <br />msgbox"您的姓名不能为空！",0+32,"哦！还不行" <br />form1.uUserName.focus <br />exit sub <br />end if <br /><br />if form1.uPass<a title="Word" href="http://www.vipcn.com/InfoList/Catalog_51_1.html" target="_blank">Word</a>.value=""then <br />msgbox"您的密码不能为空！",0+32,"哦！还不行" <br />form1.uPassword.focus <br />exit sub <br />end if <br /><br />if form1.uUserName.value=""then <br />msgbox"您的姓名不能为空！",0+32,"哦！还不行" <br />form1.uUserName.focus <br />exit sub <br />end if <br />form1.submit <br />end sub <br />&lt;/script&gt; <br /><br /><br />function isEmpty(objname) <br />{ <br />var str = document.inputform[objname].value <br />var tmpstr = str.replace([\&amp;;\`'\\\"*?~&lt;&gt;^\(\)\[\]\{\}\$\n\r])/\\$1/g;,"") <br />var tmpstr = tmpstr.replace([\&amp;;\`'\\\"*?~&lt;&gt;^\(\)\[\]\{\}\$\n\r])/\\$1/g;,"") <br />return (tmpstr.length==0) <br />} <br /><br />function check() <br />{ <br />tf=document.inputform <br />errors="" <br />if (isEmpty("username")) errors += "用户名不能为空。\n"; <br />if (isEmpty("password")) errors += "密码不能为空！\n" <br />if (errors!="") <br />alert(errors); <br />return (errors=="") <br />} <br />(2) 对输入的字符长度进行限制 <br />(3) 进行尽可能多的错误出理和错误陷阱 <br />(4) 尽可能多的使用以下这些标志，减少用户输入的机会 <br />&lt;input type="checkbox" name="checkbox" value="checkbox"&gt; <br />&lt;select name="select"&gt; &lt;/select&gt; <br />&lt;input type="radio" name="radiobutton" value="radiobutton"&gt; <br /><br />　　 <br /><font style="BACKGROUND-COLOR: #99ff00">1.2 post/get类型的交互 <br /><br />1.2.1 概念介绍 <br />这种类型的问题主要是浏览者可以通过浏览器的地址栏对脚本页通过添加参数来和服务器进行交互，这些参数已经绕过放在客户端提交页的输入检 <br />查了，还有就是可以通过地址栏输入较长的参数或恶意编造的代码造成服务器异常运算错误，导致服务器宕机或缓冲区溢出。 <br /><br />1.2.2 防范要点 <br />(1) 尽量不要让浏览者了解到你的运算提交页 <br />(2) 不允许地址栏提交参数 <br />例如ASP程序中的request.serverVariables(QUERY_STRING)检测是否有参数，如果有则使用response.redirect()强制返回指定页，可以 <br />是首页，或者你自己做的警告页。 <br />(3) 脚本页间传递参数不要再浏览器栏显示，尽可能少的让浏览者了解你的程序规则、参数等 <br />例如ASP中的Request.form和Request.QueryString这两个数据集合分别使用的是post和get方法，我们尽量不要是用Request.QueryString这个数据集合，尽可能少的让浏览者有和你交互的机会， <br /><br />2. 安全认证的问题 <br />2.1 需要安全认证密码认证的可能存在的问题 <br />2.1.1 概念介绍 <br />现在流行的CGI应用程序倾向于收集信用卡信息。数据收集是CGI 应用程序的一个简单的任务，但是敏感信息的 <br />收集需要一个将信息从浏览器传送给服务器和CGI程序的安全途径。 <br /><br />举个例子，假设我要通过Internet来销售书。我可能在浏览器上建立一个表单，允许要购书的顾客通过表单提交它的个人信息和信用卡号码。受 <br />到这些信息后，我会将它们</font><a title="存储相关资讯" href="http://www.vipcn.com/InfoList/Catalog_246_1.html" target="_blank"><font style="BACKGROUND-COLOR: #99ff00">存储</font></a><font style="BACKGROUND-COLOR: #99ff00">到我的计算机作为商业记录。 <br /><br />如果有人侵入我的商业计算机，那么他可能会访问存放顾客信息和信用卡号码的机密数据。为了避免这种情况，我会审查我的计算机配置安全了 <br />，并确定用来接受表单的CGI脚本不会被恶意的操纵。换句话说，我，作为计算机的系统管理员和CGI程序员，要尽力控制住第一个问题：防止 <br />信息直接从我的计算机中被窃取。 <br /><br />然而，怎样防止当信息由客户端发往服务器过程中有人中途窃取呢？记住信息怎样由Web服务器传送到CGI程序了吗？信息通过网络由浏览器先 <br />传送到服务器，然后服务器将信息传送给CGI程序。这些信息可能在由客户机传送到服务器时被中途窃取(如图2)。注意，为了保护信息使其不会 <br />被中途窃取，必须在客户和服务器之间进行加密。当然，如果你的客户机不能识别的话，你不能执行特定CGI的加密。 <br /><br />由于Web处理的特点，使用你独有的单独通过CGI程序实现的安全处理协议的唯一途径是:在表单信息通过浏览器传送到服务器之前将其加密。 <br />这个方案如。 <br /><br />之前，发展你自己的安全处理协议几乎是不可能的。感谢</font><a title="Java" href="http://www.vipcn.com/InfoList/Catalog_251_1.html" target="_blank"><font style="BACKGROUND-COLOR: #99ff00">Java</font></a><font style="BACKGROUND-COLOR: #99ff00">这样的语言,最近在客户端处理所作的创新，使得这个发展变成可能。 方法是产生 <br />一个标准HTML格式扩展的Java接口。当Java的提交按钮被选择时，Java Applet会在利用标准的POST HTTP请求将它发送到Web服务器前先 <br />将值加密。 <br /><br />使用Java作为客户机来发送和接收加密的数据将允许你使用自己定制的加密方案，而不需要一个昂贵的商业服务器。 <br /><br /><br />因此，在网络上安全保密地传送数据信息需要调整浏览器和服务器之间的通信路径，有一些是不能仅仅靠CGI就能够控制的。目前有两种加密客 <br />户机/服务器信息处理的建议：SSL(Secure Sockets Layer)和SHTTP(Secure HTTP),分别由Netscape和EIT(Enterprise Integrations <br />Technology)提议。关于这点，目前还不清楚哪一个将成为标准；很多公司在他们的服务器中两种都采用了。因此，知道如何在这两者中编写 <br />CGI程序是很有用的。</font><br /><br />SSL是一个协议独立的加密方案，在网络信息包的应用层和传输层之间提供了安全的通道(参照图5)。简单说来，就是HTML或CGI经过了幕后的 <br />服务器进行了加密处理，然而对HTML和CGI的作者来说是透明的。 <br /><br />因为客户端和服务器端网络程序处理加密过程，几乎你的所有的CGI脚本不需要进行安全事务的<a title="电脑硬件维修" href="http://www.vipcn.com/InfoList/Catalog_138_1.html" target="_blank">修</a>正。有一个显著的例外。一个nph(no-parse- <br />header)的CGI程序绕过服务器而直接与客户端进行通信。因此，nph的CGI脚本不会经过加密处理，因为信息未得到加密。受此影响的一个值得 <br />注意的CGI应用程序是Netscape服务器推动的动态实现(Netscape server-push animations)。我怀疑这是主要应该值得注意的，然而，更 <br />有可能因为要安全的传输敏感信息而牺牲页面中的动画。 <br /><br />SHTTP采用一种和SSL不同的方法。它通过扩展HTTP协议(应用层)来运作，优于一个较低层。因此，尽管SSL可以应用于所有的网络服务，然而 <br />SHTTP是一个特定的Web协议。 <br /><br />另外，还有其它的优点。作为HTTP的扩展集，SHTTP全兼容于HTTP和SHTTP的浏览器和服务器。为了使用SSL,你必须有一个支持SSL的浏览 <br />器和服务器。另外，SHTTP是一个更灵活的协议。例如，这个服务器可以指定首选的加密方案。 <br /><br />SHTTP处理依赖于附加的HTTP头。因此，如果你想让你的CGI程序采用SHTTP的加密处理，你需要包含适当的头。例如，替换简单返回HTTP头 <br />。 <br /><br />Content-type:text/HTML <br /><br />当一个SHTTP服务器从CGI应用程序中收到这个信息，它会知道在将其发送到浏览器之前将信息加密。一个非SHTTP的浏 <img src ="http://www.cnitblog.com/guopingleee/aggbug/34844.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/guopingleee/" target="_blank">向左向右走</a> 2007-10-14 18:12 <a href="http://www.cnitblog.com/guopingleee/archive/2007/10/14/34844.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>什么叫端对端 什么叫点对点？</title><link>http://www.cnitblog.com/guopingleee/archive/2007/10/14/34843.html</link><dc:creator>向左向右走</dc:creator><author>向左向右走</author><pubDate>Sun, 14 Oct 2007 08:35:00 GMT</pubDate><guid>http://www.cnitblog.com/guopingleee/archive/2007/10/14/34843.html</guid><wfw:comment>http://www.cnitblog.com/guopingleee/comments/34843.html</wfw:comment><comments>http://www.cnitblog.com/guopingleee/archive/2007/10/14/34843.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/guopingleee/comments/commentRss/34843.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/guopingleee/services/trackbacks/34843.html</trackback:ping><description><![CDATA[
		<a title="查看所有[电信-通信]的日志" href="http://www.bxit.cn/Blog/default.asp?cateID=15">
				<strong>[电信-通信]</strong>
		</a>
		<div class="Content">
				<div class="Content-top">
						<div class="ContentLeft">
						</div>
						<div class="ContentRight">
						</div>
						<h1 class="ContentTitle">
								<strong>
										<font size="4">什么叫端对端 什么叫点对点？</font>
								</strong>
						</h1>
						<p class="ContentTitle">
								<br />端到端与点到点是针对网络中传输的两端设备间的关系而言的。端到端传输指的是在数据传输前，经过各种各样的交换设备，在两端设备问建立一条链路，就象它们是直接相连的一样，链路建立后，发送端就可以发送数据，直至数据发送完毕，接收端确认接收成功。点到点系统指的是发送端把数据传给与它直接相连的设备，这台设备在合适的时候又把数据传给与之直接相连的下一台设备，通过一台一台直接相连的设备，把数据传到接收端。 <br />端到端传输的优点是链路建立后，发送端知道接收设备一定能收到，而且经过中间交换设备时不需要进行存储转发，因此传输延迟小。端到端传输的缺点是直到接收端收到数据为止，发送端的设备一直要参与传输。如果整个传输的延迟很长，那么对发送端的设备造成很大的浪费。端到端传输的另．一个缺点是如果接收设备关机或故障，那么端到端传输不可能实现。 <br />点到点传输的优点是发送端设备送出数据后，它的任务已经完成，不需要参与整个传输过程，这样不会浪费发送端设备的资源。另外，即使接收端设备关机或故障，点到点传输也可以采用存储转发技术进行缓冲。点到点传输的缺点是发送端发出数据后，不知道接收端能否收到或何时能收到数据。 <br />在一个网络系统的不同分层中，可能用到端到端传输，也可能用到点到点传输。如Internet网，IP及以下各层采用点到点传输，4层以上采用端到端传输。</p>
				</div>
		</div>
<img src ="http://www.cnitblog.com/guopingleee/aggbug/34843.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/guopingleee/" target="_blank">向左向右走</a> 2007-10-14 16:35 <a href="http://www.cnitblog.com/guopingleee/archive/2007/10/14/34843.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Linux I/O重定向的一些小技巧</title><link>http://www.cnitblog.com/guopingleee/archive/2007/08/30/32628.html</link><dc:creator>向左向右走</dc:creator><author>向左向右走</author><pubDate>Thu, 30 Aug 2007 05:50:00 GMT</pubDate><guid>http://www.cnitblog.com/guopingleee/archive/2007/08/30/32628.html</guid><wfw:comment>http://www.cnitblog.com/guopingleee/comments/32628.html</wfw:comment><comments>http://www.cnitblog.com/guopingleee/archive/2007/08/30/32628.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/guopingleee/comments/commentRss/32628.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/guopingleee/services/trackbacks/32628.html</trackback:ping><description><![CDATA[
		<blockquote>Linux I/O 重定向虽然很简单，但在脚本编写、系统管理时却要常常打交道，搞清其中使用技巧非常有用。</blockquote>
		<!--START RESERVED FOR FUTURE USE INCLUDE FILES-->
		<!-- include java script once we verify teams wants to use this and it will work on dbcs and cyrillic characters -->
		<!--END RESERVED FOR FUTURE USE INCLUDE FILES-->
		<p>首先说一下什么是I/O重定向，所谓I/O重定向简单来说就是一个过程，这个过程捕捉一个文件，或者命令，程序，脚本，甚至脚本中的代码块（code block）的输出，然后把捕捉到的输出，作为输入发送给另外一个文件，命令，程序，或者脚本。</p>
		<p>如果谈到I/O重定向，就涉及到文件标识符(File Descriptor)的概念, 在Linux系统中，系统为每一个打开的文件指定一个文件标识符以便系统对文件进行跟踪，这里有些和C语言编程里的文件句柄相似，文件标识符是一个数字，不同数字代表不同的含义，默认情况下，系统占用了3个，分别是0标准输入（stdin）,1标准输出(stdout), 2标准错误(stderr), 另外3-9是保留的标识符，可以把这些标识符指定成标准输入，输出或者错误作为临时连接。通常这样可以解决很多复杂的重定向请求。</p>
		<p>标准输入通常指键盘的输入 <br />标准输出通常指显示器的输出 <br />标准错误通常也是定向到显示器 </p>
		<p>请看以下例子，来描述一下他们的关系</p>
		<table cellspacing="0" cellpadding="0" width="100%" border="0">
				<tbody>
						<tr>
								<td class="code-outline">
										<pre class="displaycode">#ls /dev
</pre>
								</td>
						</tr>
				</tbody>
		</table>
		<br />
		<p>这个命令列出/dev目录下的所有文件，在屏幕上输出结果。</p>
		<p>这里 /dev 就是作为命令ls的标准输入（从键盘输入），而打印在屏幕的结果就是标准输出（/dev目录中的内容）</p>
		<p>还是回到标题，重定向就是把标准的输入或者输出更改成其他的方式，请参看如下例子 <br />或者等同于 </p>
		<table cellspacing="0" cellpadding="0" width="100%" border="0">
				<tbody>
						<tr>
								<td class="code-outline">
										<pre class="displaycode">#ls /dev 1&gt;filename                                  #注意："1"和"&gt;"中间没有空格
</pre>
								</td>
						</tr>
				</tbody>
		</table>
		<br />
		<p>以上命令会把命令的标准输出重新定向到一个文件filename,而不是显示到屏幕上，如果不指明文件标识符，系统默认的就是1, 因此1可以省略</p>
		<p>如果把上面例子重的"&gt;"改成"&gt;&gt;"则表示把输出追加到filename文件的末尾，如果文件不存在则创建它。如下</p>
		<table cellspacing="0" cellpadding="0" width="100%" border="0">
				<tbody>
						<tr>
								<td class="code-outline">
										<pre class="displaycode">#ls /dev &gt;&gt;filename
</pre>
								</td>
						</tr>
				</tbody>
		</table>
		<br />
		<p>也可以把标准错误重新定向到文件</p>
		<table cellspacing="0" cellpadding="0" width="100%" border="0">
				<tbody>
						<tr>
								<td class="code-outline">
										<pre class="displaycode">#ls -qw  /dev  2&gt;filename
</pre>
								</td>
						</tr>
				</tbody>
		</table>
		<br />
		<p>显然 -qw是一个错误参数，通常会在显示器上报告一个错误信息，但由于把2标准错误（stderr）重新定向到了文件filename，因此显示器没有错误信息，而信息写到了文件里面</p>
		<p>以下命令是把标准输出和错误都定向到文件</p>
		<table cellspacing="0" cellpadding="0" width="100%" border="0">
				<tbody>
						<tr>
								<td class="code-outline">
										<pre class="displaycode">#ls /dev &amp;&gt;filename
</pre>
								</td>
						</tr>
				</tbody>
		</table>
		<br />
		<p>"&amp;"在这里代表标准输出和标准错误，这里无论是正常输出还是错误信息都写到filename中了。</p>
		<p>重新定义标准输入，输出，和错误的文件标识符</p>
		<p>重新定义文件标识符可以用i&gt;&amp;j命令，表示把文件标识符i重新定向到j，你可以把"&amp;"理解为"取地址"</p>
		<p>请看以下例子</p>
		<table cellspacing="0" cellpadding="0" width="100%" border="0">
				<tbody>
						<tr>
								<td class="code-outline">
										<pre class="displaycode">#exec 5&gt;&amp;1
</pre>
								</td>
						</tr>
				</tbody>
		</table>
		<br />
		<p>表示把文件标识符5定向到标准输出，这个命令通常用来临时保存标准输入。</p>
		<p>同样标准输入也是可以重新定向的，请参考下面例子</p>
		<table cellspacing="0" cellpadding="0" width="100%" border="0">
				<tbody>
						<tr>
								<td class="code-outline">
										<pre class="displaycode"># grep search-word &lt;filename或者grep search-word 0&lt;filename
</pre>
								</td>
						</tr>
				</tbody>
		</table>
		<br />
		<p>一般来说grep命令在给定文件中搜索字符串，以上命令把文件filename作为grep命令的标准输入，而不是从键盘输入。</p>
		<p>前面曾经提到，系统为每一个打开的文件指定一个文件标识符以便系统对文件进行跟踪，那么默认的文件标识符是什么呢？答案是0，也就是标准输入，或者可以说从键盘输入。当然这个文件标识符也可以自己指定，请参考下面例子</p>
		<table cellspacing="0" cellpadding="0" width="100%" border="0">
				<tbody>
						<tr>
								<td class="code-outline">
										<pre class="displaycode">#echo 123456789 &gt;filename   把字符串写到文件filename中
#exec 3&lt;&gt;filename           把文件filename打开，并指定文件标识符为3
#read -n 4 &lt;&amp;3              从文件中读4个字符，句柄已经指到第四个字符末尾
#echo -n . &gt;&amp;3              在第5个字符处写一个点，覆盖第5个字符，-n表示不换行
#exec 3&gt;&amp;-	          关闭文件标识符3
</pre>
								</td>
						</tr>
				</tbody>
		</table>
		<br />
		<p>现在cat filename文件的结果就成了1234.6789</p>
		<p>命令j&lt;&gt;filename表示把文件打开，并指明文件标识符为j <br />"&amp;-"表示关闭文件标识符 </p>
		<p>有关关闭文件标识符的操作请参考下面</p>
		<table cellspacing="0" cellpadding="0" width="100%" border="0">
				<tbody>
						<tr>
								<td class="code-outline">
										<pre class="displaycode">n&lt;&amp;- 关闭输入文件标识符n
0&lt;&amp;-或&lt;&amp;- 关闭标准输入stdin
n&gt;&amp;- 关闭输出文件标识符n
1&gt;&amp;-或&gt;&amp;-关闭标准输出stdout
</pre>
								</td>
						</tr>
				</tbody>
		</table>
		<br />
		<p>另外还有一些其他命令，如下参考</p>
		<table cellspacing="0" cellpadding="0" width="100%" border="0">
				<tbody>
						<tr>
								<td class="code-outline">
										<pre class="displaycode">2.	：&gt; filename 或者 &gt; filename
</pre>
								</td>
						</tr>
				</tbody>
		</table>
		<br />
		<p>表示把文件filename设置成空，也就是清空文件内容，如果文件不存在，则创建一个空文件，（等同于touch命令） ：表示一个空输出，两个命令的唯一区别就是&gt;filename不是在所有shell都可以正常工作的。<br /><br /><br />地址:  <br />            <a href="http://www.ibm.com/developerworks/cn/linux/l-iotips/index.html">http://www.ibm.com/developerworks/cn/linux/l-iotips/index.html</a><br /></p>
<img src ="http://www.cnitblog.com/guopingleee/aggbug/32628.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/guopingleee/" target="_blank">向左向右走</a> 2007-08-30 13:50 <a href="http://www.cnitblog.com/guopingleee/archive/2007/08/30/32628.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>常去的网址 </title><link>http://www.cnitblog.com/guopingleee/archive/2007/08/18/32046.html</link><dc:creator>向左向右走</dc:creator><author>向左向右走</author><pubDate>Sat, 18 Aug 2007 08:56:00 GMT</pubDate><guid>http://www.cnitblog.com/guopingleee/archive/2007/08/18/32046.html</guid><wfw:comment>http://www.cnitblog.com/guopingleee/comments/32046.html</wfw:comment><comments>http://www.cnitblog.com/guopingleee/archive/2007/08/18/32046.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/guopingleee/comments/commentRss/32046.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/guopingleee/services/trackbacks/32046.html</trackback:ping><description><![CDATA[专业电子书记籍下载:<br /><a href="http://www.netyi.net/in.asp?id=oosky"><font color="#1d58d1">http://www.netyi.net/in.asp?id=oosky</font></a> 书籍很多，但要你自己细细的寻找哦。<br /><a href="http://www.infoxa.com/"><font color="#1d58d1">http://www.infoxa.com/</font></a> 这个网站不错，推荐。很多经典的图书都能找到。<br /><a href="http://www.itebook.net/"><font color="#1d58d1">http://www.itebook.net/</font></a> <br /><a href="http://www.itepub.net/"><font color="#1d58d1">http://www.itepub.net/</font></a> 这个站应该很多人都知道的。<br /><br />Linux免费下载：<br /><a href="http://www.linuxeden.com/forum/t132533.html"><font color="#1d58d1">http://www.linuxeden.com/forum/t132533.html</font></a> <font size="2">Mandriva Linux 2006 的光盘镜像<br /></font><a href="http://public.planetmirror.com/pub/"><font color="#1d58d1">http://public.planetmirror.com/pub/</font></a> <br /><a href="http://www.linuxeden.com/download/1214.html"><font color="#1d58d1">http://www.linuxeden.com/download/1214.html</font></a> fedora core linux<br /><a href="http://fedora.redhat.com/download/mirrors.html#ASIA"><font color="#1d58d1">http://fedora.redhat.com/download/mirrors.html#ASIA</font></a>  fedora core linux官方网<br /><a href="http://ftp.osuosl.org/pub/"><font color="#1d58d1">http://ftp.osuosl.org/pub/</font></a> 看了就知道了<br /><br /><br /><a href="http://oosky.51ct.cn/" target="_new"><font color="#1d58d1">http://oosky.51ct.cn/</font></a><br /><a href="http://www.lcfk.com/" target="_new"><font color="#1d58d1">http://www.lcfk.com/</font></a><br />两个不错的网络硬盘<br /><br /><br /><a href="http://www.jz5u.com/download.asp?id=9601&amp;downid=0" target="_new"><font color="#1d58d1">http://www.jz5u.com/download.asp?id=9601&amp;downid=0</font></a><img src ="http://www.cnitblog.com/guopingleee/aggbug/32046.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/guopingleee/" target="_blank">向左向右走</a> 2007-08-18 16:56 <a href="http://www.cnitblog.com/guopingleee/archive/2007/08/18/32046.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>软件工程师的务实职业生涯规划 </title><link>http://www.cnitblog.com/guopingleee/archive/2007/06/06/28114.html</link><dc:creator>向左向右走</dc:creator><author>向左向右走</author><pubDate>Wed, 06 Jun 2007 05:54:00 GMT</pubDate><guid>http://www.cnitblog.com/guopingleee/archive/2007/06/06/28114.html</guid><wfw:comment>http://www.cnitblog.com/guopingleee/comments/28114.html</wfw:comment><comments>http://www.cnitblog.com/guopingleee/archive/2007/06/06/28114.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/guopingleee/comments/commentRss/28114.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/guopingleee/services/trackbacks/28114.html</trackback:ping><description><![CDATA[[1]<br />　　好好规划自己的路，不要跟着感觉走！根据个人的理想决策安排，绝大部分人并不指望成为什么院士或教授，而是希望活得滋润一些，爽一些。那么，就需要慎重安排自己的轨迹。从哪个行业入手，逐渐对该行业深入了解，不要频繁跳槽，特别是不要为了一点工资而转移阵地，从长远看，这点钱根本不算什么，当你对一个行业有那么几年的体会，以后钱根本不是问题。频繁地动荡不是上策，最后你对哪个行业都没有摸透，永远是新手!<br /><br />　　[2]<br />　　可以做技术，切不可沉湎于技术。千万不可一门心思钻研技术！给自己很大压力，如果你的心思全部放在这上面，那么注定你将成为孔乙己一类的人物！适可而止为之，因为技术只不过是你今后前途的支柱之一，而且还不是最大的支柱，除非你只愿意到老还是个工程师!<br /><br />　　[3]<br />　　不要去做技术高手，只去做综合素质高手！在企业里混，我们时常瞧不起某人，说他“什么都不懂，凭啥拿那么多钱，凭啥升官！”这是普遍的典型的工程师的迂腐之言。8051很牛吗？人家能上去必然有他的本事，而且是你没有的本事。你想想，老板搞经营那么多年，难道见识不如你这个新兵？人家或许善于管理，善于领会老板意图，善于部门协调等等。因此务必培养自己多方面的能力，包括管理，亲和力，察言观色能力，攻关能力等，要成为综合素质的高手，则前途无量，否则只能躲在角落看示波器！技术以外的技能才是更重要的本事！！从古到今，美国日本，一律如此！<br /><br />　　[4]<br />　　多交社会三教九流的朋友！不要只和工程师交往，认为有共同语言，其实更重要的是和其他类人物交往，如果你希望有朝一日当老板或高层管理，那么你整日面对的就是这些人。了解他们的经历，思维习惯，爱好，学习他们处理问题的模式，了解社会各个角落的现象和问题，这是以后发展的巨大的本钱，没有这些以后就会笨手笨脚，跌跌撞撞，遇到重重困难，交不少学费，成功的概率大大降低！ <br /><br />　　[5]<br />　　知识涉猎不一定专，但一定要广！多看看其他方面的书，金融，财会，进出口，税务，法律等等，为以后做一些积累，以后的用处会更大！会少交许多学费！！　　　 <br /><p>      [6]<br />　　抓住时机向技术管理或市场销售方面的转变！要想有前途就不能一直搞开发，适当时候要转变为管理或销售，前途会更大，以前搞技术也没有白搞，以后还用得着。搞管理可以培养自己的领导能力，搞销售可以培养自己的市场概念和思维，同时为自己以后发展积累庞大的人脉！应该说这才是前途的真正支柱！！！　　　 <br /><br />　　[7]<br />　　逐渐克服自己的心里弱点和性格缺陷！多疑，敏感，天真（贬义，并不可爱），犹豫不决，胆怯，多虑，脸皮太薄，心不够黑，教条式思维。。。这些工程师普遍存在的性格弱点必须改变！很难吗？只在床上想一想当然不可能，去帮朋友守一个月地摊，包准有效果，去实践，而不要只想！不克服这些缺点，一切不可能，甚至连项目经理都当不好--尽管你可能技术不错！　　　 <br /><br />　　[8]<br />　　工作的同时要为以后做准备！建立自己的工作环境！及早为自己配置一个工作环境，装备电脑，示波器（可以买个二手的），仿真器，编程器等，业余可以接点活，一方面接触市场，培养市场感觉，同时也积累资金，更重要的是准备自己的产品，咱搞技术的没有钱，只有技术，技术的代表不是学历和证书，而是产品，拿出象样的产品，就可技术转让或与人合作搞企业！先把东西准备好，等待机会，否则，有了机会也抓不住！　　　 <br /><br />　　[9]<br />　　要学会善于推销自己！不仅要能干，还要能说，能写，善于利用一切机会推销自己，树立自己的品牌形象，很必要！要创造条件让别人了解自己，不然老板怎么知道你能干？外面的投资人怎么相信你？提早把自己推销出去，机会自然会来找你！搞个个人主页是个好注意！！特别是培养自己在行业的名气，有了名气，高薪机会自不在话下，更重要的是有合作的机会...　　　 <br /><br />　　[10]<br />　　该出手时便出手！永远不可能有100%把握！！！条件差不多就要大胆去干，去闯出自己的事业，不要犹豫，不要彷徨，干了不一定成功，但至少为下一次冲击积累了经验，不干永远没出息，而且要干成必然要经历失败。不经历风雨，怎么见彩虹，没有人能随随便便成功！</p><img src ="http://www.cnitblog.com/guopingleee/aggbug/28114.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/guopingleee/" target="_blank">向左向右走</a> 2007-06-06 13:54 <a href="http://www.cnitblog.com/guopingleee/archive/2007/06/06/28114.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>sprintf用法（很强大啊）</title><link>http://www.cnitblog.com/guopingleee/archive/2007/06/01/27889.html</link><dc:creator>向左向右走</dc:creator><author>向左向右走</author><pubDate>Fri, 01 Jun 2007 01:49:00 GMT</pubDate><guid>http://www.cnitblog.com/guopingleee/archive/2007/06/01/27889.html</guid><wfw:comment>http://www.cnitblog.com/guopingleee/comments/27889.html</wfw:comment><comments>http://www.cnitblog.com/guopingleee/archive/2007/06/01/27889.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/guopingleee/comments/commentRss/27889.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/guopingleee/services/trackbacks/27889.html</trackback:ping><description><![CDATA[
		<table style="TABLE-LAYOUT: fixed; WORD-BREAK: break-all" cellspacing="0" cellpadding="3" width="545" align="center" border="0">
				<tbody>
						<tr>
								<td align="middle" colspan="2">
										<font style="BACKGROUND-COLOR: #ff0000" color="#003300" size="2">
												<b>sprintf用法（很强大啊</b>
										</font>
								</td>
						</tr>
						<tr>
								<td align="middle" colspan="2">
										<font size="2">
										</font>
								</td>
						</tr>
						<tr>
								<td class="content" colspan="2">
										<font color="#ff3300">
										</font>
										<br />
										<br />
										<div class="tit">
												<font size="2">在找C下将数字转字符串函数时发现的，很不错。</font>
										</div>
										<div class="tit">
												<font size="2">sprintf用法（转）</font>
										</div>
										<div class="date">
												<font size="2">
												</font> </div>
										<table style="TABLE-LAYOUT: fixed">
												<tbody>
														<tr>
																<td>
																		<div class="cnt">
																				<div>
																						<p style="TEXT-INDENT: 21pt">
																								<font size="2">printf可能是许多程序员在开始学习C语言时接触到的第二个函数（我猜第一个是main），说起来，自然是老朋友了，可是，你对这个老朋友了解多吗？你对它的那个孪生兄弟sprintf了解多吗？在将各种类型的数据构造成字符串时，sprintf的强大功能很少会让你失望。 </font>
																						</p>
																						<div>
																								<font size="2">
																								</font>
																						</div>
																						<div style="TEXT-INDENT: 21pt">
																								<font size="2">由于sprintf跟printf在用法上几乎一样，只是打印的目的地不同而已，前者打印到字符串中，后者则直接在命令行上输出。这也导致sprintf比printf有用得多。所以本文着重介绍sprintf，有时也穿插着用用pritnf。</font>
																						</div>
																						<p style="TEXT-INDENT: 21pt">
																								<font size="2">
																								</font>
																						</p>
																						<div>
																								<font size="2">
																								</font>
																						</div>
																						<div style="TEXT-INDENT: 21pt">
																								<font size="2">sprintf是个变参函数，定义如下：</font>
																						</div>
																						<div style="TEXT-INDENT: 21pt">
																								<font size="2">int sprintf( char *buffer, const char *format [, argument] ... );</font>
																						</div>
																						<div style="TEXT-INDENT: 21pt">
																								<font size="2">除了前两个参数类型固定外，后面可以接任意多个参数。而它的精华，显然就在第二个参数：格式化字符串上。</font>
																						</div>
																						<div style="TEXT-INDENT: 21pt">
																								<font size="2">printf和sprintf都使用格式化字符串来指定串的格式，在格式串内部使用一些以“%”开头的格式说明符（format specifications）来占据一个位置，在后边的变参列表中提供相应的变量，最终函数就会用相应位置的变量来替代那个说明符，产生一个调用者想要的字符串。</font>
																						</div>
																						<p>
																								<font size="2">
																								</font>
																						</p>
																						<div>
																								<font size="2">
																								</font>
																						</div>
																						<div style="MARGIN: 13pt 0cm 13pt 21pt; TEXT-INDENT: -21pt">
																								<strong>
																										<font size="2">
																												<span>1.<span style="FONT: 7pt -Times New Roman-">      </span></span>格式化数字字符串</font>
																								</strong>
																						</div>
																						<div style="TEXT-INDENT: 21pt">
																								<font size="2">sprintf最常见的应用之一莫过于把整数打印到字符串中，所以，spritnf在大多数场合可以替代itoa。如：</font>
																						</div>
																						<p style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: 21pt">
																								<font size="2">
																										<span style="BACKGROUND: #d9d9d9">//</span>
																										<span style="BACKGROUND: #d9d9d9">把整数</span>
																										<span style="BACKGROUND: #d9d9d9">123</span>
																										<span style="BACKGROUND: #d9d9d9">打印成一个字符串保存在</span>
																										<span style="BACKGROUND: #d9d9d9">s</span>
																										<span style="BACKGROUND: #d9d9d9">中。</span>
																								</font>
																						</p>
																						<div>
																								<font size="2">
																								</font>
																						</div>
																						<p style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: 21pt">
																								<font size="2">
																										<span style="BACKGROUND: #d9d9d9">sprintf(s, "%d", 123);   //</span>
																										<span style="BACKGROUND: #d9d9d9">产生</span>
																										<span style="BACKGROUND: #d9d9d9">"123" </span>
																								</font>
																						</p>
																						<div>
																								<font size="2">
																								</font>
																						</div>
																						<div style="TEXT-INDENT: 21pt">
																								<font size="2">可以指定宽度，不足的左边补空格：</font>
																						</div>
																						<p style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: 21pt">
																								<font size="2">
																										<span style="BACKGROUND: #d9d9d9">sprintf(s, "%8d%8d", 123, 4567); //</span>
																										<span style="BACKGROUND: #d9d9d9">产生：</span>
																										<span style="BACKGROUND: #d9d9d9">"    123    4567" </span>
																								</font>
																						</p>
																						<div>
																								<font size="2">
																								</font>
																						</div>
																						<div style="TEXT-INDENT: 21pt">
																								<font size="2">当然也可以左对齐：</font>
																						</div>
																						<p style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: 21pt">
																								<font size="2">
																										<span style="BACKGROUND: #d9d9d9">sprintf(s, "%-8d%8d", 123, 4567); //</span>
																										<span style="BACKGROUND: #d9d9d9">产生：</span>
																										<span style="BACKGROUND: #d9d9d9">"123         4567" </span>
																								</font>
																						</p>
																						<div>
																								<font size="2">
																								</font>
																						</div>
																						<div style="TEXT-INDENT: 21pt">
																								<font size="2">也可以按照16进制打印：</font>
																						</div>
																						<p style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: 21pt">
																								<font size="2">
																										<span style="BACKGROUND: #d9d9d9">sprintf(s, "%8x", 4567); //</span>
																										<span style="BACKGROUND: #d9d9d9">小写</span>
																										<span style="BACKGROUND: #d9d9d9">16</span>
																										<span style="BACKGROUND: #d9d9d9">进制，宽度占</span>
																										<span style="BACKGROUND: #d9d9d9">8</span>
																										<span style="BACKGROUND: #d9d9d9">个位置，右对齐</span>
																								</font>
																						</p>
																						<div>
																								<font size="2">
																								</font>
																						</div>
																						<p style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: 21pt">
																								<font size="2">
																										<span style="BACKGROUND: #d9d9d9">sprintf(s, "%-8X", 4568); //</span>
																										<span style="BACKGROUND: #d9d9d9">大写</span>
																										<span style="BACKGROUND: #d9d9d9">16</span>
																										<span style="BACKGROUND: #d9d9d9">进制，宽度占</span>
																										<span style="BACKGROUND: #d9d9d9">8</span>
																										<span style="BACKGROUND: #d9d9d9">个位置，左对齐</span>
																								</font>
																						</p>
																						<div>
																								<font size="2">
																								</font>
																						</div>
																						<div style="TEXT-INDENT: 21pt">
																								<font size="2">这样，一个整数的16进制字符串就很容易得到，但我们在打印16进制内容时，通常想要一种左边补0的等宽格式，那该怎么做呢？很简单，在表示宽度的数字前面加个0就可以了。</font>
																						</div>
																						<p style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: 21pt">
																								<font size="2">
																										<span style="BACKGROUND: #d9d9d9">sprintf(s, "%08X", 4567); //</span>
																										<span style="BACKGROUND: #d9d9d9">产生：</span>
																										<span style="BACKGROUND: #d9d9d9">"000011D7" </span>
																								</font>
																						</p>
																						<div>
																								<font size="2">
																								</font>
																						</div>
																						<div style="TEXT-INDENT: 21pt">
																								<font size="2">上面以”%d”进行的10进制打印同样也可以使用这种左边补0的方式。</font>
																						</div>
																						<div style="TEXT-INDENT: 21pt">
																								<font size="2">这里要注意一个符号扩展的问题：比如，假如我们想打印短整数（short）-1的内存16进制表示形式，在Win32平台上，一个short型占2个字节，所以我们自然希望用4个16进制数字来打印它：</font>
																						</div>
																						<p style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: 21pt">
																								<span style="BACKGROUND: #d9d9d9">
																										<font size="2">short si = -1; </font>
																								</span>
																						</p>
																						<div>
																								<font size="2">
																								</font>
																						</div>
																						<p style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: 21pt">
																								<span style="BACKGROUND: #d9d9d9">
																										<font size="2">sprintf(s, "%04X", si); </font>
																								</span>
																						</p>
																						<div>
																								<font size="2">
																								</font>
																						</div>
																						<div style="TEXT-INDENT: 21pt">
																								<font size="2">产生“FFFFFFFF”，怎么回事？因为spritnf是个变参函数，除了前面两个参数之外，后面的参数都不是类型安全的，函数更没有办法仅仅通过一个“%X”就能得知当初函数调用前参数压栈时被压进来的到底是个4字节的整数还是个2字节的短整数，所以采取了统一4字节的处理方式，导致参数压栈时做了符号扩展，扩展成了32位的整数-1，打印时4个位置不够了，就把32位整数-1的8位16进制都打印出来了。如果你想看si的本来面目，那么就应该让编译器做0扩展而不是符号扩展（扩展时二进制左边补0而不是补符号位）：</font>
																						</div>
																						<p style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: 21pt">
																								<span style="BACKGROUND: #d9d9d9">
																										<font size="2">sprintf(s, "%04X", (unsigned short)si); </font>
																								</span>
																						</p>
																						<div>
																								<font size="2">
																								</font>
																						</div>
																						<div style="TEXT-INDENT: 21pt">
																								<font size="2">就可以了。或者：</font>
																						</div>
																						<p style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: 21pt">
																								<span style="BACKGROUND: #d9d9d9">
																										<font size="2">unsigned short si = -1; </font>
																								</span>
																						</p>
																						<div>
																								<font size="2">
																								</font>
																						</div>
																						<p style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: 21pt">
																								<span style="BACKGROUND: #d9d9d9">
																										<font size="2">sprintf(s, "%04X", si); </font>
																								</span>
																						</p>
																						<div>
																								<font size="2">
																								</font>
																						</div>
																						<div style="TEXT-INDENT: 21pt">
																								<font size="2">sprintf和printf还可以按8进制打印整数字符串，使用”%o”。注意8进制和16进制都不会打印出负数，都是无符号的，实际上也就是变量的内部编码的直接的16进制或8进制表示。</font>
																						</div>
																						<div style="MARGIN: 13pt 0cm 13pt 21pt; TEXT-INDENT: -21pt">
																								<strong>
																										<font size="2">
																												<span>2.<span style="FONT: 7pt -Times New Roman-">      </span></span>控制浮点数打印格式</font>
																								</strong>
																						</div>
																						<div style="TEXT-INDENT: 21pt">
																								<font size="2">浮点数的打印和格式控制是sprintf的又一大常用功能，浮点数使用格式符”%f”控制，默认保留小数点后6位数字，比如：</font>
																						</div>
																						<p style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: 21pt">
																								<font size="2">
																										<span style="BACKGROUND: #d9d9d9">sprintf(s, "%f", 3.1415926);    //</span>
																										<span style="BACKGROUND: #d9d9d9">产生</span>
																										<span style="BACKGROUND: #d9d9d9">"3.141593" </span>
																								</font>
																						</p>
																						<div>
																								<font size="2">
																								</font>
																						</div>
																						<div style="TEXT-INDENT: 21pt">
																								<font size="2">但有时我们希望自己控制打印的宽度和小数位数，这时就应该使用：”%m.nf”格式，其中m表示打印的宽度，n表示小数点后的位数。比如：</font>
																						</div>
																						<p style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: 21pt">
																								<font size="2">
																										<span style="BACKGROUND: #d9d9d9">sprintf(s, "%10.3f", 3.1415626);   //</span>
																										<span style="BACKGROUND: #d9d9d9">产生：</span>
																										<span style="BACKGROUND: #d9d9d9">"     3.142" </span>
																								</font>
																						</p>
																						<div>
																								<font size="2">
																								</font>
																						</div>
																						<p style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: 21pt">
																								<font size="2">
																										<span style="BACKGROUND: #d9d9d9">sprintf(s, "%-10.3f", 3.1415626); //</span>
																										<span style="BACKGROUND: #d9d9d9">产生：</span>
																										<span style="BACKGROUND: #d9d9d9">"3.142     " </span>
																								</font>
																						</p>
																						<div>
																								<font size="2">
																								</font>
																						</div>
																						<p style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: 21pt">
																								<font size="2">
																										<span style="BACKGROUND: #d9d9d9">sprintf(s, "%.3f", 3.1415626); //</span>
																										<span style="BACKGROUND: #d9d9d9">不指定总宽度，产生：</span>
																										<span style="BACKGROUND: #d9d9d9">"3.142" </span>
																								</font>
																						</p>
																						<div>
																								<font size="2">
																								</font>
																						</div>
																						<div style="TEXT-INDENT: 21pt">
																								<font size="2">注意一个问题，你猜</font>
																						</div>
																						<p style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: 21pt">
																								<span style="BACKGROUND: #d9d9d9">
																										<font size="2">int i = 100; </font>
																								</span>
																						</p>
																						<div>
																								<font size="2">
																								</font>
																						</div>
																						<p style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: 21pt">
																								<span style="BACKGROUND: #d9d9d9">
																										<font size="2">sprintf(s, "%.2f", i); </font>
																								</span>
																						</p>
																						<div>
																								<font size="2">
																								</font>
																						</div>
																						<div style="TEXT-INDENT: 21pt">
																								<font size="2">会打出什么东东来？“100.00”？对吗？自己试试就知道了，同时也试试下面这个：</font>
																						</div>
																						<p style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: 21pt">
																								<span style="BACKGROUND: #d9d9d9">
																										<font size="2">sprintf(s, "%.2f", (double)i); </font>
																								</span>
																						</p>
																						<div>
																								<font size="2">
																								</font>
																						</div>
																						<div style="TEXT-INDENT: 21pt">
																								<font size="2">第一个打出来的肯定不是正确结果，原因跟前面提到的一样，参数压栈时调用者并不知道跟i相对应的格式控制符是个”%f”。而函数执行时函数本身则并不知道当年被压入栈里的是个整数，于是可怜的保存整数i的那4个字节就被不由分说地强行作为浮点数格式来解释了，整个乱套了。</font>
																						</div>
																						<div style="TEXT-INDENT: 21pt">
																								<font size="2">不过，如果有人有兴趣使用手工编码一个浮点数，那么倒可以使用这种方法来检验一下你手工编排的结果是否正确。<span>J</span></font>
																						</div>
																						<div style="MARGIN: 13pt 0cm">
																								<strong>
																										<font size="2">字符/Ascii码对照</font>
																								</strong>
																						</div>
																						<div style="TEXT-INDENT: 21pt">
																								<font size="2">我们知道，在C/C++语言中，char也是一种普通的scalable类型，除了字长之外，它与short，int，long这些类型没有本质区别，只不过被大家习惯用来表示字符和字符串而已。（或许当年该把这个类型叫做“byte”，然后现在就可以根据实际情况，使用byte或short来把char通过typedef定义出来，这样更合适些）</font>
																						</div>
																						<div style="TEXT-INDENT: 21pt">
																								<font size="2">于是，使用”%d”或者”%x”打印一个字符，便能得出它的10进制或16进制的ASCII码；反过来，使用”%c”打印一个整数，便可以看到它所对应的ASCII字符。以下程序段把所有可见字符的ASCII码对照表打印到屏幕上（这里采用printf，注意”#”与”%X”合用时自动为16进制数增加”0X”前缀）：</font>
																						</div>
																						<p style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: 21pt">
																								<span style="BACKGROUND: #d9d9d9">
																										<font size="2">for(int i = 32; i &lt; 127; i++) { </font>
																								</span>
																						</p>
																						<div>
																								<font size="2">
																								</font>
																						</div>
																						<p style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: 21pt">
																								<span style="BACKGROUND: #d9d9d9">
																										<font size="2">    printf("[ %c ]: %3d 0x%#04X\n", i, i, i); </font>
																								</span>
																						</p>
																						<div>
																								<font size="2">
																								</font>
																						</div>
																						<p style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: 21pt">
																								<span style="BACKGROUND: #d9d9d9">
																										<font size="2">} </font>
																								</span>
																						</p>
																						<div>
																								<font size="2">
																								</font>
																						</div>
																						<p style="TEXT-INDENT: 21pt">
																								<font size="2">
																								</font>
																						</p>
																						<div>
																								<font size="2">
																								</font>
																						</div>
																						<div style="MARGIN: 13pt 0cm 13pt 21pt; TEXT-INDENT: -21pt">
																								<strong>
																										<font size="2">
																												<span>3.<span style="FONT: 7pt -Times New Roman-">      </span></span>连接字符串</font>
																								</strong>
																						</div>
																						<div style="TEXT-INDENT: 21pt">
																								<font size="2">sprintf的格式控制串中既然可以插入各种东西，并最终把它们“连成一串”，自然也就能够连接字符串，从而在许多场合可以替代strcat，但sprintf能够一次连接多个字符串（自然也可以同时在它们中间插入别的内容，总之非常灵活）。比如：</font>
																						</div>
																						<p style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: 21pt">
																								<span style="BACKGROUND: #d9d9d9">
																										<font size="2">char* who = "I"; </font>
																								</span>
																						</p>
																						<div>
																								<font size="2">
																								</font>
																						</div>
																						<p style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: 21pt">
																								<span style="BACKGROUND: #d9d9d9">
																										<font size="2">char* whom = "CSDN"; </font>
																								</span>
																						</p>
																						<div>
																								<font size="2">
																								</font>
																						</div>
																						<p style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: 21pt">
																								<font size="2">
																										<span style="BACKGROUND: #d9d9d9">sprintf(s, "%s love %s.", who, whom); //</span>
																										<span style="BACKGROUND: #d9d9d9">产生：</span>
																										<span style="BACKGROUND: #d9d9d9">"I love CSDN. " </span>
																								</font>
																						</p>
																						<div>
																								<font size="2">
																								</font>
																						</div>
																						<div style="TEXT-INDENT: 21pt">
																								<font size="2">strcat只能连接字符串（一段以’\0’结尾的字符数组或叫做字符缓冲，null-terminated-string），但有时我们有两段字符缓冲区，他们并不是以’\0’结尾。比如许多从第三方库函数中返回的字符数组，从硬件或者网络传输中读进来的字符流，它们未必每一段字符序列后面都有个相应的’\0’来结尾。如果直接连接，不管是sprintf还是strcat肯定会导致非法内存操作，而strncat也至少要求第一个参数是个null-terminated-string，那该怎么办呢？我们自然会想起前面介绍打印整数和浮点数时可以指定宽度，字符串也一样的。比如：</font>
																						</div>
																						<p style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: 21pt">
																								<span style="BACKGROUND: #d9d9d9">
																										<font size="2">char a1[] = {'A', 'B', 'C', 'D', 'E', 'F', 'G'}; </font>
																								</span>
																						</p>
																						<div>
																								<font size="2">
																								</font>
																						</div>
																						<p style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: 21pt">
																								<span style="BACKGROUND: #d9d9d9">
																										<font size="2">char a2[] = {'H', 'I', 'J', 'K', 'L', 'M', 'N'}; </font>
																								</span>
																						</p>
																						<div>
																								<font size="2">
																								</font>
																						</div>
																						<div style="TEXT-INDENT: 21pt">
																								<font size="2">如果：</font>
																						</div>
																						<p style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: 21pt">
																								<span style="BACKGROUND: #d9d9d9">
																										<font size="2">sprintf(s, "%s%s", a1, a2); //Don't do that! </font>
																								</span>
																						</p>
																						<div>
																								<font size="2">
																								</font>
																						</div>
																						<div style="TEXT-INDENT: 21pt">
																								<font size="2">十有八九要出问题了。是否可以改成：</font>
																						</div>
																						<p style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: 21pt">
																								<span style="BACKGROUND: #d9d9d9">
																										<font size="2">sprintf(s, "%7s%7s", a1, a2); </font>
																								</span>
																						</p>
																						<div>
																								<font size="2">
																								</font>
																						</div>
																						<div style="TEXT-INDENT: 21pt">
																								<font size="2">也没好到哪儿去，正确的应该是：</font>
																						</div>
																						<p style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: 21pt">
																								<font size="2">
																										<span style="BACKGROUND: #d9d9d9">sprintf(s, "%.7s%.7s", a1, a2);//</span>
																										<span style="BACKGROUND: #d9d9d9">产生：</span>
																										<span style="BACKGROUND: #d9d9d9">"ABCDEFGHIJKLMN" </span>
																								</font>
																						</p>
																						<div>
																								<font size="2">
																								</font>
																						</div>
																						<div style="TEXT-INDENT: 21pt">
																								<font size="2">这可以类比打印浮点数的”%m.nf”，在”%m.ns”中，m表示占用宽度（字符串长度不足时补空格，超出了则按照实际宽度打印），n才表示从相应的字符串中最多取用的字符数。通常在打印字符串时m没什么大用，还是点号后面的n用的多。自然，也可以前后都只取部分字符：</font>
																						</div>
																						<p style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: 21pt">
																								<font size="2">
																										<span style="BACKGROUND: #d9d9d9">sprintf(s, "%.6s%.5s", a1, a2);//</span>
																										<span style="BACKGROUND: #d9d9d9">产生：</span>
																										<span style="BACKGROUND: #d9d9d9">"ABCDEFHIJKL" </span>
																								</font>
																						</p>
																						<div>
																								<font size="2">
																								</font>
																						</div>
																						<div style="TEXT-INDENT: 21pt">
																								<font size="2">在许多时候，我们或许还希望这些格式控制符中用以指定长度信息的数字是动态的，而不是静态指定的，因为许多时候，程序要到运行时才会清楚到底需要取字符数组中的几个字符，这种动态的宽度/精度设置功能在sprintf的实现中也被考虑到了，sprintf采用”*”来占用一个本来需要一个指定宽度或精度的常数数字的位置，同样，而实际的宽度或精度就可以和其它被打印的变量一样被提供出来，于是，上面的例子可以变成：</font>
																						</div>
																						<p style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: 21pt">
																								<span style="BACKGROUND: #d9d9d9">
																										<font size="2">sprintf(s, "%.*s%.*s", 7, a1, 7, a2); </font>
																								</span>
																						</p>
																						<div>
																								<font size="2">
																								</font>
																						</div>
																						<div style="TEXT-INDENT: 21pt">
																								<font size="2">或者：</font>
																						</div>
																						<p style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: 21pt">
																								<span style="BACKGROUND: #d9d9d9">
																										<font size="2">sprintf(s, "%.*s%.*s", sizeof(a1), a1, sizeof(a2), a2); </font>
																								</span>
																						</p>
																						<div>
																								<font size="2">
																								</font>
																						</div>
																						<div style="TEXT-INDENT: 21pt">
																								<font size="2">实际上，前面介绍的打印字符、整数、浮点数等都可以动态指定那些常量值，比如：</font>
																						</div>
																						<p style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: 21pt">
																								<font size="2">
																										<span style="BACKGROUND: #d9d9d9">sprintf(s, "%-*d", 4, 'A'); //</span>
																										<span style="BACKGROUND: #d9d9d9">产生</span>
																										<span style="BACKGROUND: #d9d9d9">"65 " </span>
																								</font>
																						</p>
																						<div>
																								<font size="2">
																								</font>
																						</div>
																						<p style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: 21pt">
																								<font size="2">
																										<span style="BACKGROUND: #d9d9d9">sprintf(s, "%#0*X", 8, 128);    //</span>
																										<span style="BACKGROUND: #d9d9d9">产生</span>
																										<span style="BACKGROUND: #d9d9d9">"0X000080"</span>
																										<span style="BACKGROUND: #d9d9d9">，</span>
																										<span style="BACKGROUND: #d9d9d9">"#"</span>
																										<span style="BACKGROUND: #d9d9d9">产生</span>
																										<span style="BACKGROUND: #d9d9d9">0X </span>
																								</font>
																						</p>
																						<div>
																								<font size="2">
																								</font>
																						</div>
																						<p style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: 21pt">
																								<font size="2">
																										<span style="BACKGROUND: #d9d9d9">sprintf(s, "%*.*f", 10, 2, 3.1415926); //</span>
																										<span style="BACKGROUND: #d9d9d9">产生</span>
																										<span style="BACKGROUND: #d9d9d9">"      3.14" </span>
																								</font>
																						</p>
																						<div>
																								<font size="2">
																								</font>
																						</div>
																						<div style="MARGIN: 13pt 0cm 13pt 21pt; TEXT-INDENT: -21pt">
																								<strong>
																										<font size="2">
																												<span>4.<span style="FONT: 7pt -Times New Roman-">      </span></span>打印地址信息</font>
																								</strong>
																						</div>
																						<div style="TEXT-INDENT: 21pt">
																								<font size="2">有时调试程序时，我们可能想查看某些变量或者成员的地址，由于地址或者指针也不过是个32位的数，你完全可以使用打印无符号整数的”%u”把他们打印出来：</font>
																						</div>
																						<p style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: 21pt">
																								<span style="BACKGROUND: #d9d9d9">
																										<font size="2">sprintf(s, "%u", &amp;i); </font>
																								</span>
																						</p>
																						<div>
																								<font size="2">
																								</font>
																						</div>
																						<div style="TEXT-INDENT: 21pt">
																								<font size="2">不过通常人们还是喜欢使用16进制而不是10进制来显示一个地址：</font>
																						</div>
																						<p style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: 21pt">
																								<span style="BACKGROUND: #d9d9d9">
																										<font size="2">sprintf(s, "%08X", &amp;i); </font>
																								</span>
																						</p>
																						<div>
																								<font size="2">
																								</font>
																						</div>
																						<div style="TEXT-INDENT: 21pt">
																								<font size="2">然而，这些都是间接的方法，对于地址打印，sprintf 提供了专门的”%p”：</font>
																						</div>
																						<p style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: 21pt">
																								<span style="BACKGROUND: #d9d9d9">
																										<font size="2">sprintf(s, "%p", &amp;i); </font>
																								</span>
																						</p>
																						<div>
																								<font size="2">
																								</font>
																						</div>
																						<p style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: 21pt">
																								<font size="2">
																										<span style="BACKGROUND: #d9d9d9">我觉得它实际上就相当于：</span>
																								</font>
																						</p>
																						<div>
																								<font size="2">
																								</font>
																						</div>
																						<p style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: 21pt">
																								<span style="BACKGROUND: #d9d9d9">
																										<font size="2">sprintf(s, "%0*x", 2 * sizeof(void *), &amp;i); </font>
																								</span>
																						</p>
																						<div>
																								<font size="2">
																								</font>
																						</div>
																						<div style="MARGIN: 13pt 0cm 13pt 21pt; TEXT-INDENT: -21pt">
																								<strong>
																										<font size="2">
																												<span>5.<span style="FONT: 7pt -Times New Roman-">      </span></span>利用sprintf的返回值</font>
																								</strong>
																						</div>
																						<div style="TEXT-INDENT: 21pt">
																								<font size="2">较少有人注意printf/sprintf函数的返回值，但有时它却是有用的，spritnf返回了本次函数调用最终打印到字符缓冲区中的字符数目。也就是说每当一次sprinf调用结束以后，你无须再调用一次strlen便已经知道了结果字符串的长度。如：</font>
																						</div>
																						<p style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: 21pt">
																								<span style="BACKGROUND: #d9d9d9">
																										<font size="2">int len = sprintf(s, "%d", i); </font>
																								</span>
																						</p>
																						<div>
																								<font size="2">
																								</font>
																						</div>
																						<div style="TEXT-INDENT: 21pt">
																								<font size="2">对于正整数来说，len便等于整数i的10进制位数。</font>
																						</div>
																						<div style="TEXT-INDENT: 21pt">
																								<font size="2">下面的是个完整的例子，产生10个[0, 100)之间的随机数，并将他们打印到一个字符数组s中，以逗号分隔开。</font>
																						</div>
																						<p style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: 21pt">
																								<span style="BACKGROUND: #d9d9d9">
																										<font size="2">#include &lt;stdio.h&gt; </font>
																								</span>
																						</p>
																						<div>
																								<font size="2">
																								</font>
																						</div>
																						<p style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: 21pt">
																								<span style="BACKGROUND: #d9d9d9">
																										<font size="2">#include &lt;time.h&gt; </font>
																								</span>
																						</p>
																						<div>
																								<font size="2">
																								</font>
																						</div>
																						<p style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: 21pt">
																								<span style="BACKGROUND: #d9d9d9">
																										<font size="2">#include &lt;stdlib.h&gt; </font>
																								</span>
																						</p>
																						<div>
																								<font size="2">
																								</font>
																						</div>
																						<p style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: 21pt">
																								<font size="2">
																								</font>
																						</p>
																						<div>
																								<font size="2">
																								</font>
																						</div>
																						<p style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: 21pt">
																								<span style="BACKGROUND: #d9d9d9">
																										<font size="2">int main() { </font>
																								</span>
																						</p>
																						<div>
																								<font size="2">
																								</font>
																						</div>
																						<p style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: 21pt">
																								<span style="BACKGROUND: #d9d9d9">
																										<font size="2">    srand(time(0)); </font>
																								</span>
																						</p>
																						<div>
																								<font size="2">
																								</font>
																						</div>
																						<p style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: 21pt">
																								<span style="BACKGROUND: #d9d9d9">
																										<font size="2">    char s[64]; </font>
																								</span>
																						</p>
																						<div>
																								<font size="2">
																								</font>
																						</div>
																						<p style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: 21pt">
																								<span style="BACKGROUND: #d9d9d9">
																										<font size="2">    int offset = 0; </font>
																								</span>
																						</p>
																						<div>
																								<font size="2">
																								</font>
																						</div>
																						<p style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: 21pt">
																								<span style="BACKGROUND: #d9d9d9">
																										<font size="2">    for(int i = 0; i &lt; 10; i++) { </font>
																								</span>
																						</p>
																						<div>
																								<font size="2">
																								</font>
																						</div>
																						<p style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: 21pt">
																								<span style="BACKGROUND: #d9d9d9">
																										<font size="2">       offset += sprintf(s + offset, "%d,", rand() % 100); </font>
																								</span>
																						</p>
																						<div>
																								<font size="2">
																								</font>
																						</div>
																						<p style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: 21pt">
																								<span style="BACKGROUND: #d9d9d9">
																										<font size="2">    } </font>
																								</span>
																						</p>
																						<div>
																								<font size="2">
																								</font>
																						</div>
																						<p style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: 21pt">
																								<font size="2">
																										<span style="BACKGROUND: #d9d9d9">    s[offset - 1] = '\n';//</span>
																										<span style="BACKGROUND: #d9d9d9">将最后一个逗号换成换行符。</span>
																								</font>
																						</p>
																						<div>
																								<font size="2">
																								</font>
																						</div>
																						<p style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: 21pt">
																								<span style="BACKGROUND: #d9d9d9">
																										<font size="2">    printf(s); </font>
																								</span>
																						</p>
																						<div>
																								<font size="2">
																								</font>
																						</div>
																						<p style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: 21pt">
																								<font size="2">
																								</font>
																						</p>
																						<div>
																								<font size="2">
																								</font>
																						</div>
																						<p style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: 21pt">
																								<span style="BACKGROUND: #d9d9d9">
																										<font size="2">    return 0; </font>
																								</span>
																						</p>
																						<div>
																								<font size="2">
																								</font>
																						</div>
																						<p style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: 21pt">
																								<span style="BACKGROUND: #d9d9d9">
																										<font size="2">} </font>
																								</span>
																						</p>
																						<div>
																								<font size="2">
																								</font>
																						</div>
																						<div style="TEXT-INDENT: 21pt">
																								<font size="2">设想当你从数据库中取出一条记录，然后希望把他们的各个字段按照某种规则连接成一个字符串时，就可以使用这种方法，从理论上讲，他应该比不断的strcat效率高，因为strcat每次调用都需要先找到最后的那个’\0’的位置，而在上面给出的例子中，我们每次都利用sprintf返回值把这个位置直接记下来了。</font>
																						</div>
																						<div style="MARGIN: 13pt 0cm 13pt 21pt; TEXT-INDENT: -21pt">
																								<strong>
																										<font size="2">
																												<span>6.<span style="FONT: 7pt -Times New Roman-">      </span></span>使用sprintf的常见问题</font>
																								</strong>
																						</div>
																						<div style="TEXT-INDENT: 21pt">
																								<font size="2">sprintf是个变参函数，使用时经常出问题，而且只要出问题通常就是能导致程序崩溃的内存访问错误，但好在由sprintf误用导致的问题虽然严重，却很容易找出，无非就是那么几种情况，通常用眼睛再把出错的代码多看几眼就看出来了。</font>
																						</div>
																						<div style="MARGIN: 0cm 0cm 0pt 42pt; TEXT-INDENT: -21pt">
																								<font size="2">
																										<span>Ø<span style="FONT: 7pt -Times New Roman-">         </span></span>缓冲区溢出</font>
																						</div>
																						<div style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: 21pt">
																								<font size="2">第一个参数的长度太短了，没的说，给个大点的地方吧。当然也可能是后面的参数的问题，建议变参对应一定要细心，而打印字符串时，尽量使用”%.ns”的形式指定最大字符数。</font>
																						</div>
																						<div style="MARGIN: 0cm 0cm 0pt 42pt; TEXT-INDENT: -21pt">
																								<font size="2">
																										<span>Ø<span style="FONT: 7pt -Times New Roman-">         </span></span>忘记了第一个参数</font>
																						</div>
																						<div style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: 21pt">
																								<font size="2">低级得不能再低级问题，用printf用得太惯了。//偶就常犯。：。（</font>
																						</div>
																						<div style="MARGIN: 0cm 0cm 0pt 42pt; TEXT-INDENT: -21pt">
																								<font size="2">
																										<span>Ø<span style="FONT: 7pt -Times New Roman-">         </span></span>变参对应出问题</font>
																						</div>
																						<div style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: 21pt">
																								<font size="2">通常是忘记了提供对应某个格式符的变参，导致以后的参数统统错位，检查检查吧。尤其是对应”*”的那些参数，都提供了吗？不要把一个整数对应一个”%s”，编译器会觉得你欺她太甚了（编译器是obj和exe的妈妈，应该是个女的，:P）。</font>
																						</div>
																						<div style="MARGIN: 13pt 0cm 13pt 21pt; TEXT-INDENT: -21pt">
																								<strong>
																										<font size="2">
																												<span>7.<span style="FONT: 7pt -Times New Roman-">      </span></span>strftime</font>
																								</strong>
																						</div>
																						<div style="TEXT-INDENT: 21pt">
																								<font size="2">sprintf还有个不错的表妹：strftime，专门用于格式化时间字符串的，用法跟她表哥很像，也是一大堆格式控制符，只是毕竟小姑娘家心细，她还要调用者指定缓冲区的最大长度，可能是为了在出现问题时可以推卸责任吧。这里举个例子：</font>
																						</div>
																						<p style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: 21pt">
																								<span style="BACKGROUND: #d9d9d9">
																										<font size="2">time_t t = time(0); </font>
																								</span>
																						</p>
																						<div>
																								<font size="2">
																								</font>
																						</div>
																						<p style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: 21pt">
																								<font size="2">
																								</font>
																						</p>
																						<div>
																								<font size="2">
																								</font>
																						</div>
																						<p style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: 21pt">
																								<font size="2">
																										<span style="BACKGROUND: #d9d9d9">//</span>
																										<span style="BACKGROUND: #d9d9d9">产生</span>
																										<span style="BACKGROUND: #d9d9d9">"YYYY-MM-DD hh:mm:ss"</span>
																										<span style="BACKGROUND: #d9d9d9">格式的字符串。</span>
																								</font>
																						</p>
																						<div>
																								<font size="2">
																								</font>
																						</div>
																						<p style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: 21pt">
																								<span style="BACKGROUND: #d9d9d9">
																										<font size="2">char s[32]; </font>
																								</span>
																						</p>
																						<div>
																								<font size="2">
																								</font>
																						</div>
																						<p style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: 21pt">
																								<span style="BACKGROUND: #d9d9d9">
																										<font size="2">strftime(s, sizeof(s), "%Y-%m-%d %H:%M:%S", localtime(&amp;t)); </font>
																								</span>
																						</p>
																						<div>
																								<font size="2">
																								</font>
																						</div>
																						<div style="TEXT-INDENT: 21pt">
																								<font size="2">sprintf在MFC中也能找到他的知音：CString::Format，strftime在MFC中自然也有她的同道：CTime::Format，这一对由于从面向对象哪里得到了赞助，用以写出的代码更觉优雅。</font>
																						</div>
																						<p style="TEXT-INDENT: 21pt">
																								<font size="2">
																								</font>
																						</p>
																						<div>
																								<font size="2">
																								</font>
																						</div>
																						<div style="MARGIN: 13pt 0cm 13pt 21pt; TEXT-INDENT: -21pt">
																								<strong>
																										<font size="2">
																												<span>8.<span style="FONT: 7pt -Times New Roman-">      </span></span>后记</font>
																								</strong>
																						</div>
																						<div style="TEXT-INDENT: 21pt">
																								<font size="2">本文介绍的所有这些功能，在MSDN中都可以很容易地查到，笔者只是根据自己的使用经验，结合一些例子，把一些常用的，有用的，而可能为许多初学者所不知的用法介绍了一点，希望大家不要笑话，也希望大家批评指正。</font>
																						</div>
																						<div style="TEXT-INDENT: 21pt">
																								<font size="2">有人认为这种带变参的函数会引起各种问题，因而不提倡使用。但笔者本人每每还是抵挡不了它们强大功能的诱惑，在实际工作中一直在使用。实际上，C#.NET从开始就支持变参，刚发布不久的Java5.0也支持变参了。</font>
																						</div>
																						<p style="TEXT-INDENT: 21pt">
																								<font size="2">
																								</font>
																						</p>
																						<div>
																								<font size="2">
																								</font>
																						</div>
																						<div style="TEXT-INDENT: 21pt">
																								<font size="2">感谢ericzhangali（另一个空间）仔细审阅了全稿，纠正了很多小错误，并提出了一些建议。也感谢laomai（老迈）阅读了全稿并给出了增删一些内容的建议。 </font>
																						</div>
																						<div>
																								<div>
																										<br />
																										<br />
																										<font size="2">①获取System时间: void GetSystemTime(LPSYSTEMTIME lpSystemTime); 下面是例子: <br />#include &lt;windows.h&gt; <br />#include &lt;stdio.h&gt; <br />#include &lt;stdlib.h&gt; <br />void main() { <br />SYSTEMTIME st; //定义存放时间的结构体 <br />char strTime[256]; <br />int n=0; <br />GetSystemTime(&amp;st); <br />n = sprintf(strTime,"Year:\t%d\n",st.wYear); <br />n += sprintf(strTime+n,"Month:\t%d\n",st.wMonth); <br />n += sprintf(strTime+n,"Day:\t%d\n",st.wDay); <br />n += sprintf(strTime+n,"Date:\t%d\n",st.wDayOfWeek); <br />n += sprintf(strTime+n,"Hour:\t%d\n",st.wHour); <br />n += sprintf(strTime+n,"Minute:\t%d\n",st.wMinute); <br />n += sprintf(strTime+n,"Second:\t%d\n",st.wSecond); <br />n += sprintf(strTime+n,"MilliSecond:\t%d\n",st.wMilliseconds); <br /><br />printf("%s",strTime); <br />system("pause"); <br />} <br /></font>
																								</div>
																						</div>
																				</div>
																		</div>
																</td>
														</tr>
												</tbody>
										</table>
								</td>
						</tr>
				</tbody>
		</table>
<img src ="http://www.cnitblog.com/guopingleee/aggbug/27889.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/guopingleee/" target="_blank">向左向右走</a> 2007-06-01 09:49 <a href="http://www.cnitblog.com/guopingleee/archive/2007/06/01/27889.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>sscanf和sprintf是scanf和printf家族用法</title><link>http://www.cnitblog.com/guopingleee/archive/2007/06/01/27888.html</link><dc:creator>向左向右走</dc:creator><author>向左向右走</author><pubDate>Fri, 01 Jun 2007 01:06:00 GMT</pubDate><guid>http://www.cnitblog.com/guopingleee/archive/2007/06/01/27888.html</guid><wfw:comment>http://www.cnitblog.com/guopingleee/comments/27888.html</wfw:comment><comments>http://www.cnitblog.com/guopingleee/archive/2007/06/01/27888.html#Feedback</comments><slash:comments>6</slash:comments><wfw:commentRss>http://www.cnitblog.com/guopingleee/comments/commentRss/27888.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/guopingleee/services/trackbacks/27888.html</trackback:ping><description><![CDATA[
		<font size="2">sscanf和sprintf是scanf和printf家族的一对成员，用于处理和分析字符串非常强大得两个函数<br />头文件 stdio.h<br />原型<br />int sscanf(<br />const char *buffer,<br />const char *format,<br />...<br />);<br />int sprintf(<br />char *buffer,<br />const char *format,<br />...<br />);<br />功能:类似于scanf和printf 但把字符串*buffer用于输入输出<br />1.sprintf用于格式化字符串<br />把变量打印到字符串中，从而获得数字的字符形式，这样不需要手工转换。<br />例如<br />char c[100];<br />int k=255;<br />sprintf(c,"%d",k);<br />//c包含"255"<br /><br />2.sprintf用于进制转换<br />可以方便地得到变量的十六进制和八进制字符序列，再稍加处理即可得到每一位的值。<br />char c[100];<br />int k=255;<br />sprintf(c,"%x",k);<br />//c包含"ff" c[0]='f' c[1]='f'<br /><br />3.sprintf用于连接字符串<br />方便地连接两个或者多个字符串<br />char buf[1024];<br />char a[100]="I ";<br />char b[100]="love ";<br />char c[100]="ACM."<br />sprintf(buf,"%s%s%s",a,b,c);<br />//buf 包含"I love ACM."<br /><br />4.sscanf用于处理输入<br />有些比较麻烦的输入输出用sscanf处理将会非常方便<br />如hrbeu1002 （这里给出的不是完整代码，其中输出部分只是简单地原样打印出来。）<br />因为scanf在使用除了%c以外的格式时都忽略换行符'\n'，题中用空行来区分不同case的要求<br />显得难以处理，如果使用sscanf的话，可以先把输入用scanf存入一块缓冲区当中，再用sscanf读取<br />这样大大减少了工作量。<br /><!--c1--></font>
		<div class="codetop">
				<font size="2">CODE</font>
		</div>
		<div class="codemain">
				<!--ec1-->
				<font size="2">#include &lt;stdio.h&gt;<br />int T[100];<br />int P[100];<br />int i;<br />bool Input()<br />{<br />int p=0;<br />char buf[1024];<br />i=0;<br />while(scanf("%c",&amp;buf[p])!=EOF)<br />{<br />    if(buf[p]==10)<br />    {<br />       if(p==0)return 1;<br />       sscanf(buf,"%d %d",&amp;T[i],&amp;P[i]);<br />       i++;<br />       p=-1;<br />    }<br />    p++; <br />}<br />return 0;<br />}<br />void output()<br />{<br />    int j;<br />    for(j=0;j&lt;i;j++)<br />    {<br />       printf("%d %d\n",T[j],P[j]);<br />    }<br />    printf("\n");<br />}<br /><br /><br />int main()<br />{<br />   while(Input())output();<br />   return 0;<br />}<!--c2--></font>
		</div>
		<!--ec2-->
		<br />
		<br />
		<font size="2">5.sscanf用于分析字符串<br />sscanf可以支持格式字符%[] 这为分析字符串提供了很大方便(其实scanf也支持%[])<br /><br />先看一下%[] 格式：<br />(1)-: 表示范围，如：%[1-9]表示只读取1-9这几个数字 %[a-z]表示只读取a-z小写字母，类似地 %[A-Z]<br /><br />只读取大写字母<br />(2)^: 表示不取，如：%[^1]表示读取除'1'以外的所有字符 %[^/]表示除/以外的所有字符<br />(3),: 范围可以用","相连接 如%[1-9,a-z]表示同时取1-9数字和a-z小写字母 <br />(4)原则：从第一个在指定范围内的数字开始读取，到第一个不在范围内的数字结束%s 可以看成%[] 的一<br /><br />个特例 %[^ ](注意^后面有一个空格！)<br /><br />这样使用sscanf+%[]可以轻松的分析字符串，很多字符串问题便迎刃而解了。<br />以hrbeu3001为例（不是完整代码，没有要求的格式）<br />只需2个sscanf函数，就能完成题目的要求，代码非常简洁。<br /><!--c1--></font>
		<div class="codetop">
				<font size="2">CODE</font>
		</div>
		<div class="codemain">
				<!--ec1-->
				<font size="2">#include &lt;stdio.h&gt;<br />#include &lt;string.h&gt;<br /><br />int main(int argc, char *argv[])<br />{<br />  char buf[1024],str1[100],str2[100],str3[100],str4[100],temp[100]="&lt;default&gt;";<br />  <br />  int count;<br />  scanf("%d",&amp;count);<br />  while(count--)<br />  {<br />     str1[0]='\0';<br />     str2[0]='\0';<br />     str3[0]='\0';<br />     str4[0]='\0';<br />     scanf("%s",buf);<br />     sscanf(buf,"%[^:]://%[^:,/]:%[,1-9]",str1,str2,str3,str4);<br />     sscanf(buf,"%[^:]://%[^:,/]/%[a-z,A-Z,/，~]",str1,str2,str4);<br />     if(str3[0]=='\0')strcpy(str3,temp);<br />     if(str4[0]=='\0')strcpy(str4,temp);<br />     printf("%s\n%s\n%s\n%s\n",str1,str2,str3,str4);<br />  }<br />  return 0;<br />}<!--c2--></font>
		</div>
<img src ="http://www.cnitblog.com/guopingleee/aggbug/27888.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/guopingleee/" target="_blank">向左向右走</a> 2007-06-01 09:06 <a href="http://www.cnitblog.com/guopingleee/archive/2007/06/01/27888.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>FTP命令用法(dos)</title><link>http://www.cnitblog.com/guopingleee/archive/2007/05/31/27856.html</link><dc:creator>向左向右走</dc:creator><author>向左向右走</author><pubDate>Thu, 31 May 2007 04:27:00 GMT</pubDate><guid>http://www.cnitblog.com/guopingleee/archive/2007/05/31/27856.html</guid><wfw:comment>http://www.cnitblog.com/guopingleee/comments/27856.html</wfw:comment><comments>http://www.cnitblog.com/guopingleee/archive/2007/05/31/27856.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/guopingleee/comments/commentRss/27856.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/guopingleee/services/trackbacks/27856.html</trackback:ping><description><![CDATA[
		<font size="2">假设我在某某服务器上的服务信息为： <br />FTP server :58.19.237.135 <br />User: heibang <br />Password: heibang7785 <br /><br />现在让我们打开Windows的开始菜单，执行“运行”命令，在对话框中输入ftp命令，按下“确定”按钮执行。 <br />其时将会切换至DOS窗口，出现提示符 <br /><br />ftp&gt; <br /><br />现在让我们输入命令连接FTP服务器： <br /><br />ftp&gt; open 58.19.237.135（回车） <br /><br />稍等片刻，屏幕提示连接成功： <br /><br />ftp&gt; connected to 58.19.237.135（回车） <br /><br />接下来服务器询问你用户名和口令，分别输入heibang和heibang7785，待认证通过即可。 <br /><br />下面进入正题，开始上传文件，比如说我们要把c:\index.html传至服务器的根目录中，可以这么键入： <br /><br />ftp&gt; put c:\index.html （回车） <br /><br />当屏幕提示你已经传输完毕，可以打入相关命令查看一番： <br /><br />ftp&gt; dir （回车） <br /><br />你就能看见你刚才上传的文件了。 <br /><br />刚刚讲的是上传，现在来看下载。假设要把服务器\images目录中的所有.jpg文件传至本机中，按以下指令操作： <br /><br />ftp&gt; cd images（回车） [注：进入\images目录] <br />ftp&gt; mget *.jpg <br /><br />上传与下载工作完毕，可以运行bye中断连接。 <br /><br />ftp&gt; bye（回车） <br /><br />最后为了方便大家记忆，总结一下常用的FTP命令： <br /><br />1. open：与服务器相连接； <br />2. send(put)：上传文件； <br />3. get：下载文件； <br />4. mget：下载多个文件； <br />5. cd：切换目录； <br />6. dir：查看当前目录下的文件； <br />7. del：删除文件； <br />8. bye：中断与服务器的连接。 <br /><br />命令虽然简单，但不一定人人皆知；再说“养兵千日，用兵一时”，说不定什么时候就会用得着的呢。如果想了解得更多，就打ftp&gt; help （回车）查看命令集吧。 <br /><br />ascii: 设定以ASCII方式传送文件(缺省值) <br /><br />bell: 每完成一次文件传送,报警提示 <br /><br />binary: 设定以二进制方式传送文件 <br /><br />bye: 终止主机FTP进程,并退出FTP管理方式 <br /><br />case: 当为ON时,用MGET命令拷贝的文件名到本地机器中,全部转换为小写字母 <br /><br />cd: 同UNIX的CD命令 <br /><br />cdup: 返回上一级目录 <br /><br />chmod: 改变远端主机的文件权限 <br /><br />close: 终止远端的FTP进程,返回到FTP命令状态,所有的宏定义都被删除 <br /><br />delete: 删除远端主机中的文件 <br /><br />dir [remote-directory] [local-file]: 列出当前远端主机目录中的文件.如果有本地文件,就将结果写至本地文件 <br /><br />get [remote-file] [local-file]: 从远端主机中传送至本地主机中 <br /><br />help [command]: 输出命令的解释 <br /><br />lcd: 改变当前本地主机的工作目录,如果缺省,就转到当前用户的HOME目录 <br /><br />ls [remote-directory] [local-file]: 同DIR <br /><br />macdef: 定义宏命令 <br /><br />mdelete [remote-files]: 删除一批文件 <br /><br />mget [remote-files]: 从远端主机接收一批文件至本地主机 <br /><br />mkdir directory-name: 在远端主机中建立目录 <br /><br />mput local-files: 将本地主机中一批文件传送至远端主机 <br /><br />open host [port]: 重新建立一个新的连接 <br /><br />prompt: 交互提示模式 <br /><br />put local-file [remote-file]: 将本地一个文件传送至远端主机中 <br /><br />pwd: 列出当前远端主机目录 <br /><br />quit: 同BYE <br /><br />recv remote-file [local-file]: 同GET <br /><br />rename [from] [to]: 改变远端主机中的文件名 <br /><br />rmdir directory-name: 删除远端主机中的目录 <br /><br />send local-file [remote-file]: 同PUT <br /><br />status: 显示当前FTP的状态 <br /><br />system: 显示远端主机系统类型 <br /><br />user user-name [password] [account]: 重新以别的用户名登录远端主机 <br /><br />?: 同HELP </font>
<img src ="http://www.cnitblog.com/guopingleee/aggbug/27856.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/guopingleee/" target="_blank">向左向右走</a> 2007-05-31 12:27 <a href="http://www.cnitblog.com/guopingleee/archive/2007/05/31/27856.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>linux 用法</title><link>http://www.cnitblog.com/guopingleee/archive/2007/05/30/27782.html</link><dc:creator>向左向右走</dc:creator><author>向左向右走</author><pubDate>Wed, 30 May 2007 06:33:00 GMT</pubDate><guid>http://www.cnitblog.com/guopingleee/archive/2007/05/30/27782.html</guid><wfw:comment>http://www.cnitblog.com/guopingleee/comments/27782.html</wfw:comment><comments>http://www.cnitblog.com/guopingleee/archive/2007/05/30/27782.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.cnitblog.com/guopingleee/comments/commentRss/27782.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/guopingleee/services/trackbacks/27782.html</trackback:ping><description><![CDATA[
		<p>，您好！</p>
		<p>
				<a href="http://linux.sheup.com/linux/linux6462.htm">http://linux.sheup.com/linux/linux6462.htm</a>
				<br />Linux 指令篇:档案目录管理--ls<br />2004-04-23 15:18 pm<br />来自：Linux文档<br />现载：<a href="http://www.8s8s.coM">Www.8s8s.coM</a><br />地址：无名</p>
		<p>名称 : ls </p>
		<p>使用权限 : 所有使用者 </p>
		<p>使用方式 : ls [-alrtAFR] [name...] </p>
		<p>说明 : 显示指定工作目录下之内容（列出目前工作目录所含之档案及子目录)。 </p>
		<p>参数 : </p>
		<p>-a 显示所有档案及目录 (ls内定将档案名或目录名称开头为"."的视为隐藏档，不会列出) <br />-l 除档案名称外，亦将档案型态、权限、拥有者、档案大小等资讯详细列出 <br />-r 将档案以相反次序显示(原定依英文字母次序) <br />-t 将档案依建立时间之先后次序列出 <br />-A 同 -a ，但不列出 "." (目前目录) 及 ".." (父目录) <br />-F 在列出的档案名称后加一符号；例如可执行档则加 "*", 目录则加 "/" <br />-R 若目录下有档案，则以下之档案亦皆依序列出 </p>
		<p>范例： <br />列出目前工作目录下所有名称是 s 开头的档案，愈新的排愈后面 : <br />ls -ltr s* </p>
		<p>将 /bin 目录以下所有目录及档案详细资料列出 : <br />ls -lR /bin </p>
		<p>列出目前工作目录下所有档案及目录；目录于名称后加 "/", 可执行档于名称后加 "*" : <br />ls -AF </p>
		<p>==============================================================</p>
		<p>Linux 指令篇:档案目录管理--locate<br />2004-04-23 15:18 pm<br />来自：Linux文档<br />现载：<a href="http://www.8s8s.coM">Www.8s8s.coM</a><br />地址：无名</p>
		<p>名称：locate <br />使用权限：所有使用者 <br />使用方式： locate [-q] [-d ] [--database=] <br />locate [-r ] [--regexp=] <br />locate [-qv] [-o ] [--output=] <br />locate [-e ] [-f ] ] [-c] </p>
		<p>locate [-Vh] [--version] [--help] <br />说明： </p>
		<p>locate 让使用者可以很快速的搜寻档案系统内是否有指定的档案。其方法是先建立一个包括系统内所有档案名称及路径的数据库，之后当寻找时就只需查询这个数据库，而不必实际深入档案系统之中了。 </p>
		<p>在一般的 distribution 之中，数据库的建立都被放在 contab 中自动执行。一般使用者在使用时只要用 </p>
		<p># locate your_file_name </p>
		<p>的型式就可以了。 参数： <br />-u <br />-U </p>
		<p>建立数据库，-u 会由根目录开始，-U 则可以指定开始的位置。 </p>
		<p>-e </p>
		<p>将 <br />排除在寻找的范围之外。 </p>
		<p>-l <br />如果 是 1．则启动安全模式。在安全模式下，使用者不会看到权限无法看到的档案。这会始速度减慢，因为 locate 必须至实际的档案系统中取得档案的权限资料。 </p>
		<p>-f <br />将特定的档案系统排除在外，例如我们没有到理要把 proc 档案系统中的档案放在数据库中。 </p>
		<p>-q <br />安静模式，不会显示任何错误讯息。 </p>
		<p>-n <br />至多显示 个输出。 </p>
		<p>-r <br />使用正规运算式 做寻找的条件。 </p>
		<p>-o <br />指定数据库存的名称。 </p>
		<p>-d </p>
		<p>指定数据库的路径 </p>
		<p>-h <br />显示辅助讯息 </p>
		<p>-v <br />显示更多的讯息 </p>
		<p>-V <br />显示程序的版本讯息 范例： </p>
		<p>locate chdrv : 寻找所有叫 chdrv 的档案 <br />locate -n 100 a.out : 寻找所有叫 a.out 的档案，但最多只显示 100 个 <br />locate -u : 建立数据库 </p>
		<p> </p>
		<p>
				<br />locate命令可以在搜寻数据库时快速找到档案，数据库由updatedb程序来更新，updatedb是由cron daemon周期性建立的，locate命令在搜寻数据库时比由整个由硬盘资料来搜寻资料来得快，但较差劲的是locate所找到的档案若是最近才建立或刚更名的，可能会找不到，在内定值中，updatedb每天会跑一次，可以由修改crontab来更新设定值。(etc/crontab) </p>
		<p>locate指定用在搜寻符合条件的档案，它会去储存档案与目录名称的数据库内，寻找合乎范本样式条件的档案或目录录，可以使用特殊字元（如”*”或”?”等）来指定范本样式，如指定范本为kcpa*ner, locate会找出所有起始字串为kcpa且结尾为ner的档案或目录，如名称为kcpartner若目录录名称为kcpa_ner则会列出该目录下包括子目录在内的所有档案。 </p>
		<p>locate指令和find找寻档案的功能类似，但locate是透过update程序将硬盘中的所有档案和目录资料先建立一个索引数据库，在执行loacte时直接找该索引，查询速度会较快，索引数据库一般是由操作系统管理，但也可以直接下达update强迫系统立即修改索引数据库。 <br />不过第一次在执行update後再使用locate寻找档案常会失败，此时就要执行slocate ˉu该命令（也可执行updatedb指令，其效果相同）来更新slocate数据库，该命令会在/usr/sbin下产生slocate执行档，再由locate到此数据库寻找所要找的资料。 <br /> </p>
		<p>============================================================================</p>
		<p>
				<br />Linux 指令篇:档案目录管理--ln<br />2004-04-23 15:18 pm<br />来自：Linux文档<br />现载：<a href="http://www.8s8s.coM">Www.8s8s.coM</a><br />地址：无名</p>
		<p>指令名称 : ln </p>
		<p>使用权限 : 所有使用者 </p>
		<p>使用方式 : ln [options] source dist，其中 option 的格式为 : </p>
		<p>[-bdfinsvF] [-S backup-suffix] [-V {numbered,existing,simple}] <br />[--help] [--version] [--] <br />说明 : Linux/Unix 档案系统中，有所谓的连结(link)，我们可以将其视为档案的别名，而连结又可分为两种 : 硬连结(hard link)与软连结(symbolic link)，硬连结的意思是一个档案可以有多个名称，而软连结的方式则是产生一个特殊的档案，该档案的内容是指向另一个档案的位置。硬连结是存在同一个档案系统中，而软连结却可以跨越不同的档案系统。 <br />ln source dist 是产生一个连结(dist)到 source，至于使用硬连结或软链结则由参数决定。 </p>
		<p>不论是硬连结或软链结都不会将原本的档案复制一份，只会占用非常少量的磁碟空间。 </p>
		<p>参数 : </p>
		<p>-f : 链结时先将与 dist 同档名的档案删除-d : 允许系统管理者硬链结自己的目录-i : 在删除与 dist 同档名的档案时先进行询问-n : 在进行软连结时，将 dist 视为一般的档案-s : 进行软链结(symbolic link)-v : 在连结之前显示其档名-b : 将在链结时会被覆写或删除的档案进行备份-S SUFFIX : 将备份的档案都加上 SUFFIX 的字尾-V METHOD : 指定备份的方式--help : 显示辅助说明--version : 显示版本 <br />范例 : <br />将档案 yy 产生一个 symbolic link : zz <br />ln -s yy zz </p>
		<p>将档案 yy 产生一个 hard link : zz <br />ln yy xx</p>
		<p> </p>
		<p>===============================================================================</p>
		<p> </p>
		<p>
				<br />Linux 指令篇:档案目录管理--find<br />2004-04-23 15:18 pm<br />来自：Linux文档<br />现载：<a href="http://www.8s8s.coM">Www.8s8s.coM</a><br />地址：无名</p>
		<p>名称 : find <br />用法 : find <br />使用说明 : </p>
		<p>
				<br />将档案系统内符合 expression 的档案列出来。你可以指要档案的名称、类别、时间、大小、权限等不同资讯的组合，只有完全相符的才会被列出来。 </p>
		<p>find 根据下列规则判断 path 和 expression，在命令列上第一个 - ( ) , ! 之前的部份为 path，之后的是 expression。如果 path 是空字串则使用目前路径，如果 expression 是空字串则使用 -print 为预设 expression。 </p>
		<p>expression 中可使用的选项有二三十个之多，在此只介绍最常用的部份。 </p>
		<p>-mount, -xdev : 只检查和指定目录在同一个档案系统下的档案，避免列出其它档案系统中的档案 <br />-amin n : 在过去 n 分钟内被读取过 <br />-anewer file : 比档案 file 更晚被读取过的档案 <br />-atime n : 在过去 n 天过读取过的档案 <br />-cmin n : 在过去 n 分钟内被修改过 <br />-cnewer file :比档案 file 更新的档案 <br />-ctime n : 在过去 n 天过修改过的档案 <br />-empty : 空的档案-gid n or -group name : gid 是 n 或是 group 名称是 name <br />-ipath p, -path p : 路径名称符合 p 的档案，ipath 会忽略大小写 <br />-name name, -iname name : 档案名称符合 name 的档案。iname 会忽略大小写 <br />-size n : 档案大小 是 n 单位，b 代表 512 位元组的区块，c 表示字元数，k 表示 kilo bytes，w 是二个位元组。-type c : 档案类型是 c 的档案。 <br />d: 目录 <br />c: 字型装置档案 <br />b: 区块装置档案 <br />p: 具名贮列 <br />f: 一般档案 <br />l: 符号连结 <br />s: socket <br />-pid n : process id 是 n 的档案 </p>
		<p>你可以使用 ( ) 将运算式分隔，并使用下列运算。 <br />exp1 -and exp2 <br />! expr <br />-not expr <br />exp1 -or exp2 <br />exp1, exp2 <br />范例: <br />将目前目录及其子目录下所有延伸档名是 c 的档案列出来。 <br /># find . -name "*.c" </p>
		<p>
				<br />将目前目录其其下子目录中所有一般档案列出 <br /># find . -ftype f </p>
		<p>
				<br />将目前目录及其子目录下所有最近 20 分钟内更新过的档案列出 <br /># find . -ctime -20 </p>
		<p> </p>
		<p>find . -name "*" -exec grep xxx {} ; -print |morexxx为你想要找的字符串 </p>
		<p> </p>
		<p> ========================================================================</p>
		<p> </p>
		<p>Linux 指令篇:档案目录管理--cut<br />2004-04-23 15:18 pm<br />来自：Linux文档<br />现载：<a href="http://www.8s8s.coM">Www.8s8s.coM</a><br />地址：无名</p>
		<p>名称：cut </p>
		<p>使用权限：所有使用者 </p>
		<p>用法：cut -cnum1-num2 filename </p>
		<p>说明：显示每行从开头算起 num1 到 num2 的文字。 </p>
		<p>范例： </p>
		<p>shell&gt;&gt; cat example <br />test2 <br />this is test1 <br />shell&gt;&gt; cut -c0-6 example ## print 开头算起前 6 个字元 <br />test2 <br />this i </p>
		<p>cut其实很有用 <br />-c m-n 表示显示每一行的第m个字元到第n个字元。例如： </p>
		<p>---------file----------- <br />liubi 23 14000 <br />---------file----------- <br /># cut -c 3-9,12-20 file <br />liubi 14000 </p>
		<p>-f m-n 表示显示第m栏到第n栏(使用tab分隔)。例如： <br />---------file----------- <br />liubi 23 14000 <br />---------file----------- <br /># cut -f 1,3 file <br />liubi 14000 </p>
		<p>
				<br />===============================================================</p>
		<p> </p>
		<p> </p>
		<p>Linux 指令篇:档案目录管理--cp<br />2004-04-23 15:18 pm<br />来自：Linux文档<br />现载：<a href="http://www.8s8s.coM">Www.8s8s.coM</a><br />地址：无名</p>
		<p>名称：cp </p>
		<p>使用权限：所有使用者 </p>
		<p>使用方式： </p>
		<p>cp [options] source dest <br />cp [options] source... directory </p>
		<p>说明：将一个档案拷贝至另一档案，或将数个档案拷贝至另一目录。 </p>
		<p>参数： </p>
		<p>-a 尽可能将档案状态、权限等资料都照原状予以复制。 <br />-r 若 source 中含有目录名，则将目录下之档案亦皆依序拷贝至目的地。 <br />-f 若目的地已经有相同档名的档案存在，则在复制前先予以删除再行复制。 <br />范例： <br />将档案 aaa 复制(已存在)，并命名为 bbb : <br />cp aaa bbb </p>
		<p>将所有的C语言程序拷贝至 Finished 子目录中 : <br />cp *.c Finished </p>
		<p> </p>
		<p> </p>
		<p>
				<br />==============================================================</p>
		<p> </p>
		<p> </p>
		<p>
				<br />Linux 指令篇:档案目录管理--chown<br />2004-04-23 15:18 pm<br />来自：Linux文档<br />现载：<a href="http://www.8s8s.coM">Www.8s8s.coM</a><br />地址：无名</p>
		<p>指令名称 : chown </p>
		<p>使用权限 : root </p>
		<p>使用方式 : chmod [-cfhvR] [--help] [--version] user[:group] file... </p>
		<p>说明 : Linux/Unix 是多人多工操作系统，所有的档案皆有拥有者。利用 chown 可以将档案的拥有者加以改变。一般来说，这个指令只有是由系统管理者(root)所使用，一般使用者没有权限可以改变别人的档案拥有者，也没有权限可以自己的档案拥有者改设为别人。只有系统管理者(root)才有这样的权限。 </p>
		<p>参数 : </p>
		<p>user : 新的档案拥有者的使用者 IDgroup : 新的档案拥有者的使用者群体(group)-c : 若该档案拥有者确实已经更改，才显示其更改动作-f : 若该档案拥有者无法被更改也不要显示错误讯息-h : 只对于连结(link)进行变更，而非该 link 真正指向的档案-v : 显示拥有者变更的详细资料-R : 对目前目录下的所有档案与子目录进行相同的拥有者变更(即以递回的方式逐个变更)--help : 显示辅助说明--version : 显示版本 <br />范例 : <br />将档案 file1.txt 的拥有者设为 users 群体的使用者 jessie : <br />chown jessie:users file1.txt </p>
		<p>将目前目录下的所有档案与子目录的拥有者皆设为 users 群体的使用者 lamport : <br />chmod -R lamport:users * </p>
		<p> </p>
		<p>========================================================================</p>
		<p>
				<br />=</p>
		<p> </p>
		<p>Linux 指令篇:档案目录管理--chmod<br />2004-04-23 15:18 pm<br />来自：Linux文档<br />现载：<a href="http://www.8s8s.coM">Www.8s8s.coM</a><br />地址：无名</p>
		<p>指令名称 : chmod </p>
		<p>使用权限 : 所有使用者 </p>
		<p>使用方式 : chmod [-cfvR] [--help] [--version] mode file... </p>
		<p>说明 : Linux/Unix 的档案调用权限分为三级 : 档案拥有者、群组、其他。利用 chmod 可以藉以控制档案如何被他人所调用。 </p>
		<p>参数 : </p>
		<p>mode : 权限设定字串，格式如下 : [ugoa...][[+-=][rwxX]...][,...]，其中 <br />u 表示该档案的拥有者，g 表示与该档案的拥有者属于同一个群体(group)者，o 表示其他以外的人，a 表示这三者皆是。 <br />+ 表示增加权限、- 表示取消权限、= 表示唯一设定权限。 <br />r 表示可读取，w 表示可写入，x 表示可执行，X 表示只有当该档案是个子目录或者该档案已经被设定过为可执行。 <br />-c : 若该档案权限确实已经更改，才显示其更改动作 <br />-f : 若该档案权限无法被更改也不要显示错误讯息 <br />-v : 显示权限变更的详细资料 <br />-R : 对目前目录下的所有档案与子目录进行相同的权限变更(即以递回的方式逐个变更) <br />--help : 显示辅助说明 <br />--version : 显示版本 </p>
		<p>范例 :将档案 file1.txt 设为所有人皆可读取 : <br />chmod ugo+r file1.txt </p>
		<p>将档案 file1.txt 设为所有人皆可读取 : <br />chmod a+r file1.txt </p>
		<p>将档案 file1.txt 与 file2.txt 设为该档案拥有者，与其所属同一个群体者可写入，但其他以外的人则不可写入 : <br />chmod ug+w,o-w file1.txt file2.txt </p>
		<p>将 ex1.py 设定为只有该档案拥有者可以执行 : <br />chmod u+x ex1.py </p>
		<p>将目前目录下的所有档案与子目录皆设为任何人可读取 : <br />chmod -R a+r * </p>
		<p>此外chmod也可以用数字来表示权限如 chmod 777 file <br />语法为：chmod abc file </p>
		<p>其中a,b,c各为一个数字，分别表示User、Group、及Other的权限。 </p>
		<p>r=4，w=2，x=1 <br />若要rwx属性则4+2+1=7； <br />若要rw-属性则4+2=6； <br />若要r-x属性则4+1=7。 </p>
		<p>范例： <br />chmod a=rwx file </p>
		<p>和 <br />chmod 777 file </p>
		<p>效果相同 <br />chmod ug=rwx,o=x file </p>
		<p>和 <br />chmod 771 file </p>
		<p>效果相同 <br />若用chmod 4755 filename可使此程序具有root的权限 </p>
		<p> </p>
		<p> </p>
		<p>
				<br /> --------------------------------------------------------------------</p>
		<p>
				<br />Linux 指令篇:档案目录管理--cd<br />2004-04-23 15:18 pm<br />来自：Linux文档<br />现载：<a href="http://www.8s8s.coM">Www.8s8s.coM</a><br />地址：无名</p>
		<p>名称 : cd </p>
		<p>使用权限 : 所有使用者 </p>
		<p>使用方式 : cd [dirName] </p>
		<p>说明 : 变换工作目录至 dirName。 其中 dirName 表示法可为绝对路径或相对路径。若目录名称省略，则变换至使用者的 home directory (也就是刚 login 时所在的目录)。 </p>
		<p>另外，"~" 也表示为 home directory 的意思，"." 则是表示目前所在的目录，".." 则表示目前目录位置的上一层目录。 </p>
		<p>范例 : 跳到 /usr/bin/ : <br />cd /usr/bin </p>
		<p>跳到自己的 home directory : <br />cd ~ </p>
		<p>跳到目前目录的上上两层 : <br />cd ../.. </p>
		<p>
				<br />cd - 返回进入当前目录前所在目录 </p>
		<p> </p>
		<p> </p>
		<p>
				<br /> ----------------------------------------------</p>
		<p> </p>
		<p>--Linux 指令篇:编码压缩打包--compress<br />2004-04-23 15:18 pm<br />来自：Linux文档<br />现载：<a href="http://www.8s8s.coM">Www.8s8s.coM</a><br />地址：无名</p>
		<p>名称：compress </p>
		<p>
				<br />使用权限：所有使用者 </p>
		<p>
				<br />使用方式：compress [-dfvcV] [-b maxbits] [file ...] </p>
		<p>
				<br />说明： <br />compress 是一个相当古老的 unix 档案压缩指令，压缩后的档案会加上一个 .Z 延伸档名以区别未压缩的档案，压缩后的档案可以以 uncompress 解压。若要将数个档案压成一个压缩档，必须先将档案 tar 起来再压缩。由于 gzip 可以产生更理想的压缩比例，一般人多已改用 gzip 为档案压缩工具。 </p>
		<p>
				<br />参数： <br />c 输出结果至标准输出设备（一般指荧幕） <br />f 强迫写入档案，若目的档已经存在，则会被覆盖 (force) <br />v 将程序执行的讯息印在荧幕上 (verbose) <br />b 设定共同字串数的上限，以位元计算，可以设定的值为 9 至 16 bits 。由于值越大，能使用的共同字串就 越多，压缩比例就越大，所以一般使用预设值 16 bits (bits) <br />d 将压缩档解压缩 <br />V 列出版本讯息 </p>
		<p>
				<br />范例： </p>
		<p>
				<br />将 source.dat 压缩成 source.dat.Z ，若 source.dat.Z 已经存在，内容则会被压缩档覆盖。 </p>
		<p> </p>
		<p>compress -f source.dat </p>
		<p> </p>
		<p>将 source.dat 压缩成 source.dat.Z ，并列印出压缩比例。 <br />-v 与 -f 可以一起使用 </p>
		<p> </p>
		<p>compress -vf source.dat </p>
		<p> </p>
		<p>将压缩后的资料输出后再导入 target.dat.Z 可以改变压缩档名。 </p>
		<p> </p>
		<p>compress -c source.dat &gt; target.dat.Z </p>
		<p> </p>
		<p>-b 的值越大，压缩比例就越大，范围是 9-16 ，预设值是 16 。 </p>
		<p> </p>
		<p>compress -b 12 source.dat </p>
		<p> </p>
		<p>将 source.dat.Z 解压成 source.dat ，若档案已经存在，使用者按 y 以确定覆盖档案，若使用 -df 程序则会自动覆盖档案。由于系统会自动加入 .Z 为延伸档名，所以 source.dat 会自动当作 source.dat.Z 处理。 </p>
		<p> </p>
		<p>compress -d source.dat <br />compress -d source.dat.Z </p>
		<p>Linux 指令篇:编码压缩打包--compress <br /><a href="http://linuxfab.cx/">http://linuxfab.cx/</a> (2001-04-30 14:32:45) <br />名称：compress </p>
		<p>
				<br />使用权限：所有使用者 </p>
		<p>
				<br />使用方式：compress [-dfvcV] [-b maxbits] [file ...] </p>
		<p>
				<br />说明： <br />compress 是一个相当古老的 unix 档案压缩指令，压缩后的档案会加上一个 .Z 延伸档名以区别未压缩的档案，压缩后的档案可以以 uncompress 解压。若要将数个档案压成一个压缩档，必须先将档案 tar 起来再压缩。由于 gzip 可以产生更理想的压缩比例，一般人多已改用 gzip 为档案压缩工具。 </p>
		<p>
				<br />参数： <br />c 输出结果至标准输出设备（一般指荧幕） <br />f 强迫写入档案，若目的档已经存在，则会被覆盖 (force) <br />v 将程序执行的讯息印在荧幕上 (verbose) <br />b 设定共同字串数的上限，以位元计算，可以设定的值为 9 至 16 bits 。由于值越大，能使用的共同字串就 越多，压缩比例就越大，所以一般使用预设值 16 bits (bits) <br />d 将压缩档解压缩 <br />V 列出版本讯息 </p>
		<p>
				<br />范例： </p>
		<p>
				<br />将 source.dat 压缩成 source.dat.Z ，若 source.dat.Z 已经存在，内容则会被压缩档覆盖。 </p>
		<p> </p>
		<p>compress -f source.dat </p>
		<p> </p>
		<p>将 source.dat 压缩成 source.dat.Z ，并列印出压缩比例。 <br />-v 与 -f 可以一起使用 </p>
		<p> </p>
		<p>compress -vf source.dat </p>
		<p> </p>
		<p>将压缩后的资料输出后再导入 target.dat.Z 可以改变压缩档名。 </p>
		<p> </p>
		<p>compress -c source.dat &gt; target.dat.Z </p>
		<p> </p>
		<p>-b 的值越大，压缩比例就越大，范围是 9-16 ，预设值是 16 。 </p>
		<p> </p>
		<p>compress -b 12 source.dat </p>
		<p> </p>
		<p>将 source.dat.Z 解压成 source.dat ，若档案已经存在，使用者按 y 以确定覆盖档案，若使用 -df 程序则会自动覆盖档案。由于系统会自动加入 .Z 为延伸档名，所以 source.dat 会自动当作 source.dat.Z 处理。 </p>
		<p> </p>
		<p>compress -d source.dat <br />compress -d source.dat.Z </p>
		<p> </p>
		<p> </p>
		<p>----------------------------------------------------------</p>
		<p> </p>
		<p>Linux 指令篇:终端机管理--reset<br />2004-04-23 15:18 pm<br />来自：Linux文档<br />现载：<a href="http://www.8s8s.coM">Www.8s8s.coM</a><br />地址：无名</p>
		<p>名称: reset, tset </p>
		<p>使用方法: tset [-IQqrs] [-] [-e ch] [-i ch] [-k ch] [-m mapping] [terminal] </p>
		<p>使用说明: </p>
		<p>reset 其实和 tset 是一同个命令，它的用途是设定终端机的状态。一般而言，这个命令会自动的从环境变数、命令列或是其它的组态档决定目前终端机的型态。如果指定型态是 '?' 的话，这个程序会要求使用者输入终端机的型别。 </p>
		<p>由于这个程序会将终端机设回原始的状态，除了在 login 时使用外，当系统终端机因为程序不正常执行而进入一些奇怪的状态时，你也可以用它来重设终端机o 例如不小心把二进位档用 cat 指令进到终端机，常会有终端机不再回应键盘输入，或是回应一些奇怪字元的问题。此时就可以用 reset 将终端机回复至原始状态。选项说明: </p>
		<p>
				<br />-p <br />将终端机类别显示在萤幕上，但不做设定的动作。这个命令可以用来取得目前终端机的类别。 <br />-e ch <br />将 erase 字元设成 ch <br />-i ch <br />将中断字元设成 ch <br />-k ch <br />将删除一行的字元设成 ch <br />-I <br />不要做设定的动作，如果没有使用选项 -Q 的话，erase、中断及删除字元的目前值依然会送到萤幕上。 <br />-Q <br />不要显示 erase、中断及删除字元的值到萤幕上。 <br />-r <br />将终端机类别印在萤幕上。 <br />-s <br />将设定 TERM 用的命令用字串的型式送到终端机中，通常在 .login 或 .profile 中用 <br />范例: <br />让使用者输入一个终端机型别并将终端机设到该型别的预设状态。 <br /># reset ? </p>
		<p> </p>
		<p>将 erase 字元设定 control-h <br /># reset -e ^B </p>
		<p> </p>
		<p>将设定用的字串显示在萤幕上 <br /># reset -s <br />Erase is control-B (^B). <br />Kill is control-U (^U). <br />Interrupt is control-C (^C). <br />TERM=xterm; </p>
		<p> </p>
		<p> </p>
		<p>
				<br />----------------------------------------------------------</p>
		<p> </p>
		<p>Linux 指令篇:起始管理--shutdown<br />2004-04-23 15:18 pm<br />来自：Linux文档<br />现载：<a href="http://www.8s8s.coM">Www.8s8s.coM</a><br />地址：无名</p>
		<p>名称 : shutdown </p>
		<p>使用权限 : 系统管理者 </p>
		<p>使用方式 : shutdown [-t seconds] [-rkhncfF] time [message] </p>
		<p>说明 : shutdown 可以用来进行关机程序，并且在关机以前传送讯息给所有使用者正在执行的程序，shutdown 也可以用来重开机。 </p>
		<p>参数 : </p>
		<p>-t seconds : 设定在几秒钟之后进行关机程序 <br />-k : 并不会真的关机，只是将警告讯息传送给所有只用者 <br />-r : 关机后重新开机 <br />-h : 关机后停机 <br />-n : 不采用正常程序来关机，用强迫的方式杀掉所有执行中的程序后自行关机 <br />-c : 取消目前已经进行中的关机动作 <br />-f : 关机时，不做 fcsk 动作(检查 Linux 档系统) <br />-F : 关机时，强迫进行 fsck 动作 <br />time : 设定关机的时间 <br />message : 传送给所有使用者的警告讯息 </p>
		<p> </p>
		<p> </p>
		<p>
				<br />Linux 指令篇:起始管理--reboot<br />2004-04-23 15:18 pm<br />来自：Linux文档<br />现载：<a href="http://www.8s8s.coM">Www.8s8s.coM</a><br />地址：无名</p>
		<p>名称：reboot <br />使用权限：系统管理者 <br />使用方式：reboot [-n] [-w] [-d] [-f] [-i] <br />说明：若系统的 runlevel 为 0 或 6 ，则重新开机，否则以 shutdown 指令（加上 -r 参数）来取代 <br />参数： <br />-n : 在重开机前不做将记忆体资料写回硬盘的动作 <br />-w : 并不会真的重开机，只是把记录写到 /var/log/wtmp 档案里 <br />-d : 不把记录写到 /var/log/wtmp 档案里（-n 这个参数包含了 -d） -f : 强迫重开机，不呼叫 shutdown 这个指令 <br />-i : 在重开机之前先把所有网络相关的装置先停止 <br />范例： <br />reboot 重开机。 <br />reboot -w 做个重开机的模拟（只有纪录并不会真的重开机）。 </p>
		<p> </p>
		<p>
				<br />--------------------------------------------------</p>
		<p> </p>
		<p>
				<br />Linux 指令篇:起始管理--init<br />2004-04-23 15:18 pm<br />来自：Linux文档<br />现载：<a href="http://www.8s8s.coM">Www.8s8s.coM</a><br />地址：无名</p>
		<p>名称：init <br />使用权限：开机时 <br />使用方式：init [0123456Ss] <br />说明：init 是所有行程（process）的父行程（parent），开机时一定会先从这个指令开始（可以用 ps -aux 看看第一个行程就是 init），并参考 /etc/inittab 档来完成整个开机程序，共有八个执行层级（runlevel），而改变只能透过 telinit 的指令来更改 <br />参数： <br />0 开机执行层级为 0 ，用来关闭系统 <br />1 开机执行层级为 1 ，用来进行单一使用者模式（single user mode） <br />4 开机执行层级为 4 ，表示进入 X window 时的模式 <br />6 开机执行层级为 6 ，用来重新开机 <br />S 或 s 不是直接使用的，配合开机执行层级 1 时使用，当加上S 或 s 表示开机后不参考 /etc/inittab 档 <br />　　　235 请参照 /etc/inittab 档案内容以及 /etc/rc.d/rc2.d，/etc/rc.d/rc3.d，/etc/rc.d/rc5.d 等目录 <br />范例： <br />由于这并不是让使用者可以单独下指令的执行档，请参照 /etc/inittab </p>
		<p> </p>
		<p> </p>
		<p>
				<br />--------------------------------------------------------------</p>
		<p> </p>
		<p> </p>
		<p> </p>
		<p>Linux 指令篇:起始管理--halt<br />2004-04-23 15:18 pm<br />来自：Linux文档<br />现载：<a href="http://www.8s8s.coM">Www.8s8s.coM</a><br />地址：无名</p>
		<p>名称：halt <br />使用权限：系统管理者 <br />使用方式：halt [-n] [-w] [-d] [-f] [-i] [-p] <br />说明：若系统的 runlevel 为 0 或 6 ，则关闭系统，否则以 shutdown 指令（加上 -h 参数）来取代 <br />参数： <br />-n : 在关机前不做将记忆体资料写回硬盘的动作 <br />-w : 并不会真的关机，只是把记录写到 /var/log/wtmp 档案里 <br />-d : 不把记录写到 /var/log/wtmp 档案里（-n 这个参数包含了 -d） -f : 强迫关机，不呼叫 shutdown 这个指令 <br />-i : 在关机之前先把所有网络相关的装置先停止 <br />-p : 当关机的时候，顺便做关闭电源（poweroff）的动作 <br />范例： <br />halt -p 关闭系统后关闭电源。 <br />halt -d 关闭系统，但不留下纪录。 </p>
		<p> </p>
		<p>----------------------------------------------------------------------------</p>
		<p> </p>
		<p>Linux 指令篇:讯息传送与信件管理--wall<br />2004-04-23 15:18 pm<br />来自：Linux文档<br />现载：<a href="http://www.8s8s.coM">Www.8s8s.coM</a><br />地址：无名</p>
		<p>名称 : wall </p>
		<p>使用权限 : 所有使用者 </p>
		<p>使用方式 : </p>
		<p>wall [ message ] <br />使用说明： <br />wall 会将讯息传给每一个 mesg 设定为 yes 的上线使用者。当使用终端机介面做为标准传入时, 讯息结束时需加上 EOF (通常用 Ctrl+D)。 </p>
		<p>例子 : </p>
		<p>传讯息"hi" 给每一个使用者 : <br />wall hi </p>
		<p> </p>
		<p> </p>
		<p>
				<br /> -------------------------------------------------------------</p>
		<p> </p>
		<p> </p>
		<p>Linux 指令篇:文件系统--mount<br />2004-04-23 15:18 pm<br />来自：Linux文档<br />现载：<a href="http://www.8s8s.coM">Www.8s8s.coM</a><br />地址：无名</p>
		<p>名称 : mount <br />使用权限 : 系统管理者或/etc/fstab中允许的使用者 <br />使用方式 : <br />mount [-hV] <br />mount -a [-fFnrsvw] [-t vfstype] <br />mount [-fnrsvw] [-o options [,...]] device | dir <br />mount [-fnrsvw] [-t vfstype] [-o options] device dir <br />说明 : </p>
		<p>将某个档案的内容解读成档案系统，然后将其挂在目录的某个位置之上。当这个命令执行成功后，直到我们使用 umnount 将这个档案系统移除为止，这个命令之下的所有档案将暂时无法被调用。 </p>
		<p>这个命令可以被用来挂上任何的档案系统，你甚至可以用 -o loop 选项将某个一般的档案当成硬盘机分割挂上系统。这个功能对于 ramdisk,romdisk 或是 ISO 9660 的影像档之解读非常实用。 </p>
		<p>参数 </p>
		<p>-V </p>
		<p>显示程序版本 <br />-h </p>
		<p>显示辅助讯息 <br />-v </p>
		<p>显示较讯息，通常和 -f 用来除错。 <br />-a <br />将 /etc/fstab 中定义的所有档案系统挂上。 </p>
		<p>-F <br />这个命令通常和 -a 一起使用，它会为每一个 mount 的动作产生一个行程负责执行。在系统需要挂上大量 NFS 档案系统时可以加快挂上的动作。 </p>
		<p>-f <br />通常用在除错的用途。它会使 mount 并不执行实际挂上的动作，而是模拟整个挂上的过程。通常会和 -v 一起使用。 </p>
		<p>-n <br />一般而言，mount 在挂上后会在 /etc/mtab 中写入一笔资料。但在系统中没有可写入档案系统存在的情况下可以用这个选项取消这个动作。 </p>
		<p>-s-r <br />等于 -o ro </p>
		<p>-w <br />等于 -o rw </p>
		<p>-L <br />将含有特定标签的硬盘分割挂上。 </p>
		<p>-U <br />将档案分割序号为 的档案系统挂下。-L 和 -U 必须在/proc/partition 这种档案存在时才有意义。 </p>
		<p>-t <br />指定档案系统的型态，通常不必指定。mount 会自动选择正确的型态。 </p>
		<p>-o async <br />打开非同步模式，所有的档案读写动作都会用非同步模式执行。 </p>
		<p>-o sync <br />在同步模式下执行。 </p>
		<p>-o atime <br />-o noatime <br />当 atime 打开时，系统会在每次读取档案时更新档案的『上一次调用时间』。当我们使用 flash 档案系统时可能会选项把这个选项关闭以减少写入的次数。 </p>
		<p>-o auto <br />-o noauto <br />打开/关闭自动挂上模式。 </p>
		<p>-o defaults <br />使用预设的选项 rw, suid, dev, exec, auto, nouser, and async. </p>
		<p>-o dev <br />-o nodev-o exec <br />-o noexec <br />允许执行档被执行。 </p>
		<p>-o suid <br />-o nosuid <br />允许执行档在 root 权限下执行。 </p>
		<p>-o user <br />-o nouser <br />使用者可以执行 mount/umount 的动作。 </p>
		<p>-o remount <br />将一个已经挂下的档案系统重新用不同的方式挂上。例如原先是唯读的系统，现在用可读写的模式重新挂上。 </p>
		<p>-o ro <br />用唯读模式挂上。 </p>
		<p>-o rw <br />用可读写模式挂上。 </p>
		<p>-o loop= <br />使用 loop 模式用来将一个档案当成硬盘分割挂上系统。 </p>
		<p>范例 </p>
		<p>将 /dev/hda1 挂在 /mnt 之下。 </p>
		<p>#mount /dev/hda1 /mnt </p>
		<p> </p>
		<p>将 /dev/hda1 用唯读模式挂在 /mnt 之下。 </p>
		<p>#mount -o ro /dev/hda1 /mnt </p>
		<p> </p>
		<p>
				<br />将 /tmp/image.iso 这个光碟的 image 档使用 loop 模式挂在 /mnt/cdrom之下。用这种方法可以将一般网络上可以找到的 Linux 光 碟 ISO 档在不烧录成光碟的情况下检视其内容。 </p>
		<p>#mount -o loop /tmp/image.iso /mnt/cdrom </p>
		<p>相关命令umount </p>
		<p> </p>
		<p> </p>
<img src ="http://www.cnitblog.com/guopingleee/aggbug/27782.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/guopingleee/" target="_blank">向左向右走</a> 2007-05-30 14:33 <a href="http://www.cnitblog.com/guopingleee/archive/2007/05/30/27782.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Linux 入门常用命令详解</title><link>http://www.cnitblog.com/guopingleee/archive/2007/05/30/27776.html</link><dc:creator>向左向右走</dc:creator><author>向左向右走</author><pubDate>Wed, 30 May 2007 03:46:00 GMT</pubDate><guid>http://www.cnitblog.com/guopingleee/archive/2007/05/30/27776.html</guid><wfw:comment>http://www.cnitblog.com/guopingleee/comments/27776.html</wfw:comment><comments>http://www.cnitblog.com/guopingleee/archive/2007/05/30/27776.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/guopingleee/comments/commentRss/27776.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/guopingleee/services/trackbacks/27776.html</trackback:ping><description><![CDATA[
		<table cellspacing="0" cellpadding="0" width="590" align="center" border="0">
				<tbody>
						<tr>
								<td>
										<span class="f14">
												<font size="2">
														<b>1.Linux进入与退出系统 <br /></b>
														<span style="FONT-FAMILY: 宋体">
																<b>进入</b>
														</span>
														<b>
																<span lang="EN-US">Linux</span>系统</b>：<br />必须要输入用户的账号，</font>
												<font size="2">
														<span style="FONT-FAMILY: 宋体">在系统安装过程中可以创建以下两种帐号：<br /></span>
														<span style="FONT-FAMILY: 宋体">　　</span>
														<span lang="EN-US">1</span>
														<span style="FONT-FAMILY: 宋体">．</span>
														<span lang="EN-US">root--</span>
												</font>
												<font size="2">
														<span style="FONT-FAMILY: 宋体">超级用户帐号（系统管理员），使用这个帐号可以在系统中做任何事情。<br /></span>
														<span style="FONT-FAMILY: 宋体">　　</span>
														<span lang="EN-US">2</span>
														<span style="FONT-FAMILY: 宋体">．普通用户</span>
														<span lang="EN-US">--</span>
												</font>
												<font size="2">
														<span style="FONT-FAMILY: 宋体">这个帐号供普通用户使用，可以进行有限的操作。<br /></span>
														<span style="FONT-FAMILY: 宋体">　　一般的</span>
														<span lang="EN-US">Linux</span>
												</font>
												<font size="2">
														<span style="FONT-FAMILY: 宋体">使用者均为普通用户，而系统管理员一般使用超级用户帐号完成一些系统管理的工作。如果只需要完成一些由普通帐号就能完成的任务，建议不要使用超级用户帐号，以免无意中破坏系统。影响系统的正常运行。<br /><span style="FONT-FAMILY: 宋体">　　</span>用户登录分两步：第一步，输入用户的登录名，系统根据该登录名识别用户；第二步，输入用户的口令，该口令是用户自己设置的一个字符串，对其他用户是保密的，是在登录时系统用来辨别真假用户的关键字。<br /><span style="FONT-FAMILY: 宋体">　　</span></span>
														<span style="FONT-FAMILY: 宋体">当用户正确地输入用户名和口令后，就能合法地进入系统。屏幕显示：</span>
												</font>
												<p class="MsoNormal" style="TEXT-INDENT: 21pt">
														<span lang="EN-US">
																<font size="2">[<b>root@loclhost /root] # </b></font>
														</span>
												</p>
												<p class="MsoNormal" style="TEXT-INDENT: 21pt">
														<font size="2">
																<span style="FONT-FAMILY: 宋体">这时就可以对系统做各种操作了。注意超级用户的提示符是“</span>
																<span lang="EN-US">#</span>
																<span style="FONT-FAMILY: 宋体">”，其他用户的提示符是“</span>
																<span lang="EN-US">$</span>
																<span style="FONT-FAMILY: 宋体">”。</span>
														</font>
														<span style="FONT-FAMILY: 宋体">
																<br />
																<br />
																<font size="2">
																		<strong>修改口令<br /></strong>
																		<span style="FONT-FAMILY: 宋体">　　</span>
																</font>
														</span>
														<font size="2">
																<span style="FONT-FAMILY: 宋体">为了更好的保护用户帐号的安全，</span>
																<span lang="EN-US">Linux</span>
																<span style="FONT-FAMILY: 宋体">允许用户随时修改自己的口令，修改口令的命令是</span>
																<span lang="EN-US">passwd</span>
														</font>
														<span style="FONT-FAMILY: 宋体">
																<font size="2">，它将提示用户输入旧口令和新口令，之后还要求用户再次确认新口令，以避免用户无意中按错键。如果用户忘记了口令，可以向系统管理员申请为自己重新设置一个。<br /><br /></font>
														</span>
														<font size="2">
																<span style="FONT-FAMILY: 宋体">
																		<strong>虚拟控制台<br /></strong>
																		<span style="FONT-FAMILY: 宋体">　　</span>
																</span>
																<span lang="EN-US">Linux</span>
																<span style="FONT-FAMILY: 宋体">是一个真正的多用户操作系统，它可以同时接受多个用户登录。</span>
																<span lang="EN-US">Linux</span>
																<span style="FONT-FAMILY: 宋体">还允许一个用户进行多次登录，这是因为</span>
																<span lang="EN-US">Linux</span>
																<span style="FONT-FAMILY: 宋体">和</span>
																<span lang="EN-US">UNIX</span>
																<span style="FONT-FAMILY: 宋体">一样，提供了虚拟控制台的访问方式，允许用户在同一时间从控制台进行多次登录。虚拟控制台的选择可以通过按下</span>
																<span lang="EN-US">Alt</span>
																<span style="FONT-FAMILY: 宋体">键和一个功能键来实现，通常使用</span>
																<span lang="EN-US">F1-F6</span>
																<span style="FONT-FAMILY: 宋体">例如，用户登录后，按一下</span>
																<span lang="EN-US">Alt-F2</span>
																<span style="FONT-FAMILY: 宋体">键，用户又可以看到</span>
																<span lang="EN-US">"login:"</span>
																<span style="FONT-FAMILY: 宋体">提示符，说明用户看到了第二个虚拟控制台。然后只需按</span>
																<span lang="EN-US">Alt-F1</span>
																<span style="FONT-FAMILY: 宋体">键，就可以回到第一个虚拟控制台。</span>
																<span style="FONT-FAMILY: 宋体">一个新安装的</span>
																<span lang="EN-US">Linux</span>
																<span style="FONT-FAMILY: 宋体">系统默认允许用户使用</span>
																<span lang="EN-US">Alt-F1</span>
																<span style="FONT-FAMILY: 宋体">到</span>
																<span lang="EN-US">Alt-F6</span>
																<span style="FONT-FAMILY: 宋体">键来访问前六个虚拟控制台。虚拟控制台可使用户同时在多个控制台上工作，真正体现</span>
																<span lang="EN-US">Linux</span>
														</font>
														<span style="FONT-FAMILY: 宋体">
																<font size="2">系统多用户的特性。用户可以在某一虚拟控制台上进行的工作尚未结束时，切换到另一虚拟控制台开始另一项工作。<br /><br /></font>
														</span>
														<font size="2">
																<span style="FONT-FAMILY: 宋体">
																		<b>退出系统<br /></b>
																</span>
																<span style="FONT-FAMILY: 宋体">
																		<span style="FONT-FAMILY: 宋体">　　</span>不论是超级用户，还是普通用户，需要退出系统时，在</span>
																<span lang="EN-US">shell</span>
																<span style="FONT-FAMILY: 宋体">提示符下，键入</span>
																<span lang="EN-US">exit</span>
																<span style="FONT-FAMILY: 宋体">命令即可</span>
														</font>
												</p>
										</span>
								</td>
						</tr>
				</tbody>
		</table>
<img src ="http://www.cnitblog.com/guopingleee/aggbug/27776.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/guopingleee/" target="_blank">向左向右走</a> 2007-05-30 11:46 <a href="http://www.cnitblog.com/guopingleee/archive/2007/05/30/27776.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Linux命令使用技巧集锦</title><link>http://www.cnitblog.com/guopingleee/archive/2007/05/30/27775.html</link><dc:creator>向左向右走</dc:creator><author>向左向右走</author><pubDate>Wed, 30 May 2007 03:42:00 GMT</pubDate><guid>http://www.cnitblog.com/guopingleee/archive/2007/05/30/27775.html</guid><wfw:comment>http://www.cnitblog.com/guopingleee/comments/27775.html</wfw:comment><comments>http://www.cnitblog.com/guopingleee/archive/2007/05/30/27775.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/guopingleee/comments/commentRss/27775.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/guopingleee/services/trackbacks/27775.html</trackback:ping><description><![CDATA[　1. 使用虚拟控制台 　　 <br /><br />　　登录后按Alt+F2键这时又可以看到"login:"提示符, 这 个就是第二个虚拟控制台. 一般新安装的Linux有四个虚拟控 制台, 可以用Alt+F1~Alt+F4来访问. 虚拟控制台最有用的时 候是当一个程序出错锁住输入时可以切换到其他虚拟控制台 ? <br /><br />　　2. 拷贝与粘贴 　 <br /><br />　　字符界面: 不管是Slackware 还是RedHat 安装后每次启 动时都会自动运行一个叫gpm的程序, 该程序运行后就可以用 鼠标来拷贝与粘贴了. 具体做法是按住鼠标左键拖动使要拷贝的地方反白, 这时反白的区域已经被拷贝, 再按鼠标右键拷贝的内容就会被粘贴在光标所在位置了. X-Window下: 拷贝的操作与字符界面下一样, 三键鼠标的话 按中键粘贴, 两键鼠标的话同时按左右键粘贴(须在配置XF86 时在鼠标的设置里选择 Emulate 3 Button). <br /><br />　　3. 快速进入某些目录 <br /><br />　　键入 cd ~ 可进入用户的home目录. 键入 cd - 可进入上一个进入的目录. <br /><br />　　4. 软驱的使用 <br /><br />　　如果是Linux 的ext2文件系统用如下命令: #mount -t ext2 /dev/fd0 /mnt dos格式的软盘则用命令: #mount -t msdos /dev/fd0 /mnt 然后就可以在/mnt里访问软盘的内容了, 注意在取出软盘之 前要先卸掉软盘上的文件系统, #umount /mnt 否则会导致信息丢失. 在软盘上建立文件系统可用如下命令: #mke2fs /dev/fd0 1440 <br /><br />　　5. RedHat下显示彩色目录列表 　　 <br /><br />　　打开/etc/bashrc, 加入如下一行: alias ls="ls --color" 下次启动bash时就可以像在Slackware里那样显示彩色的目录列表了, 其中颜色的含义如下: 蓝色--&gt;目录 绿色--&gt;可执行文件红色--&gt;压缩文件 浅蓝色--&gt;链接文件 灰色--&gt;其他文件 <br /><br />　　6. 显示文件的类型 　　 <br /><br />　　用命令 file 可以使你知道某个文件究竟是ELF格式的可执行文件, 还是shell script文件或是其他的什么格式 例如: #file startx <br /><br />    7 .命令文件的路径 　　 <br /><br />　　当你键入一些命令如find, shutdown, mount, startx时是否 想过要知道这些文件究竟放在哪个目录里? 用命令 whereis 可以实现,如 #whereis startx <br /><br />　　8. 查找文件 <br /><br />　　find 命令要加一些参数才能查到文件, 如: #find /usr -name XF86Setup -print 在/usr里查找文件XF86Setup. <br /><br />　　9. 删除无用的core文件 <br /><br />　　程序运行出后有时候会产生一个名为core的文件, 这个文件一般很大而且没什么用, 可以删除掉以释放空间. <br /><br />　　10. 一次解开.tar.gz文件 <br /><br />　　解开.tar.gz文件一般要先用gunzip解压再用tar解包, 在Linux下可以一次完成, 如: #tar zxpvf sample.tar.gz <br /><br />　　11. 显示win95分区里的长文件名 　　 <br /><br />　　如果你发现win95分区里的长文件命不能显示, 可以重新 用vfat方式来mount. 对于启动时就mount的分区可以修改文 件/etc/fstab, 将里面的msdos字样改为vfat. 如果无法用 vfat mount, 则要重新编译一下核心, 加入对vfat的支持. <br /><br />　　12. Linux 里的Norton Commander 　　 <br /><br />　　在提示符下键入命令mc后你就会看到一个与Norton Commander很相似的界面, 实际上功能也很相似甚至更强大, 比如可以直接对.tar.gz 压缩包里的文件进行操作(有点像 ZipMagic). <br /><br />　　13. 启动后直接进入X <br /><br />　　编辑/etc/inittab文件, 把id:3:initdefautl改为 id:4:initdefautl. 不过搜索路径可能会有些问题, 关机时 你得直接进入/sbin 里去执行 shutdown. <br /><br />　　14. 后台运行 X 程序 <br /><br />　　执行一个X程序时别忘了在后面加一个&amp;号,如 #netscape &amp; 否则的话在你推出执行的程序之前再无法在那个终端窗口里输入命盍? <br /><br />　　15. 强行退出 X <br /><br />　　有时候在 X 里由于程序出错鼠标键盘都不起作用, 这时 候不用着急, 因为在Linux下几乎不会像在Win95里那样恶性 死机, 你只须键入Ctrl+Alt+BackSpace键就可以回到字符界 面下了. <br /><br />    16. 重装Win9x后lilo失效无法启动Linux 　 <br /><br />　　只须先用软盘启动Linux然后运行一次lilo即可。对于 RedHat可以用命令mkbootdisk来制作启动盘，例如： mkbootdisk --devices /dev/fd0 2.0.34-1 其中2.0.34-1是 /lib/modules下的一个目录。 <br /><br />　　17. 把dos/windows改为缺省启动的OS 　 <br /><br />　　RedHat把Linux作为lilo缺省启动的OS，即出现 boot: 提示符后直接回车启动Linux。如果想改为dos/Windows，修 改文件/etc/lilo.conf，把有关启动dos的部分放在前面，再 运行一次lilo即可。例如把lilo.conf从： boot=/dev/hda <br /><br />　　map=/boot/map <br /><br />　　install=/boot/boot.b <br /><br />　　prompt <br /><br />　　timeout=50 <br /><br />　　image=/boot/vmlinuz-2.0.34-1 <br /><br />　　label=linux <br /><br />　　root=/dev/hdc5 <br /><br />　　read-only <br /><br />　　other=/dev/hda1 <br /><br />　　label=dos <br /><br />　　table=/dev/hda <br /><br />　　改为： <br /><br />　　boot=/dev/hda <br /><br />　　map=/boot/map <br /><br />　　install=/boot/boot.b <br /><br />　　prompt <br /><br />　　timeout=50 <br /><br />　　other=/dev/hda1 <br /><br />　　label=dos <br /><br />　　table=/dev/hda <br /><br />　　image=/boot/vmlinuz-2.0.34-1 <br /><br />　　label=linux <br /><br />　　root=/dev/hdc5 <br /><br />　　read-only <br /><br />　　18. 去掉引导区内的lilo信息 <br /><br />　　安装lilo后如果硬盘数量或分区情况有改变的话将导致硬盘不能启动，这时只须用软盘启动dos再运行 fdisk/mbr 即可。(这个方法还可清除任何引导区病毒) <br /><br />　　19. 让 X 支持 AGP 显卡 <br /><br />　　下载一个 AX 4.1 即 AcceleratedX 4.1 ， 一个商业版 的 X Server 。除 AGP 显卡外 AX 还支持很多牌号的显卡。 另外还可以用AX 带的设置程序 Xsetup 方便的对分辨率，刷 新率等参数进行设置。不过我也不知道用AGP卡效果如何，因 为我现在还在用老掉牙的 S3 765 。 <br /><br />    20. 把 man 或 info 的信息存为文本文件 <br /><br />　　以 tcsh 为例： man tcsh 　 col -b &gt; tcsh.txt info tcsh -o tcsh.txt -s <br /><br />　　21. 用当前路径作提示符 <br /><br />　　对 bash 来说，在 .bashrc 里加一行： PS1="\$PWD\\$" 对 tcsh 来说，在 .tcshrc 里加一行： set prompt="%/&gt;" <br /><br />　　22. 压缩可执行文件 <br /><br />　　Linux 下有一个类似 dos 里的 pklite 和 lzexe 的命 令 -- gzexe 。而且压缩率一般都可以超过 50% ，在空间紧 张时很有用。比如： <br /><br />　　/dosc/temp# ls -al <br /><br />　　total 148 <br /><br />　　-rwxr-xr-x 1 root root 149564 Dec 8 15:33 gawk <br /><br />　　/dosc/temp# gzexe <br /><br />　　gawk gawk: 54.5% <br /><br />　　/dosc/temp# ls -al <br /><br />　　total 216 <br /><br />　　-rwxr-xr-x 1 root root 68710 Dec 8 15:36 gawk <br /><br />　　-rwxr-xr-x 1 root root 149564 Dec 8 15:33 gawk <br /><br />　　/dosc/temp# <br /><br />　　23. 查看 Linux 启动时的信息 　 <br /><br />　　Linux 启动时屏幕显示的信息来不及看清就一闪而过， 如果对这些信息感兴趣的话可以在启动完后用命令 dmesg 查看。 <br /><br />　　24. 处理文件名内含有特殊字符的文件 　 <br /><br />　　如果有一个文件名叫 -file 如果想删除它，键入 rm -file 会显示 invalid option ，原来由于文件名的第一个字符为 - ， Linux 把文件名当作选项了，可以加 -- 解决 这个问题， 如 rm -- -file 。如果是其他特殊字符的话可 以在特殊字符前加一个 \ ，或者用双引号把整个文件名括起来。 <br /><br />　　25. 一次处理一整个目录 <br /><br />　　Linux/UNIX 的很多常用命令如 rm ， cp 等都有一个参 数---- -r ， 是递归的意思， 命令里加了参数 -r 就可以对目标目录及其下所有子目录进行操作，如： rm -rf /test (f 是 force 意为强行) ， 该命令完全删除 根目录下的子目录 test ，作用类似于 dos 下的 deltree ，当然使用这个命令时要特别小心。再如： cp -r /test /test1 有类似 dos 下 xcopy /s 的作用。 <br /><br />    26. 修改登录画面 <br /><br />　　对本机： 先修改文件 /etc/issue 改为相要显示的内容， 再修改文件 /etc/rc.d/rc.local(RedHat) 或 /etc/rc.d/rc.S(Slackware) 把下面几句注释掉： <br /><br />　　# This will overwrite /etc/issue at every boot. So, make any changes you <br /><br />　　# want to make to /etc/issue here or you will lose them when you reboot. <br /><br />　　echo "" &gt; /etc/issue <br /><br />　　echo "Red Hat Linux $R" &gt;&gt; /etc/issue <br /><br />　　echo "Kernel $(uname -r) on $a $(uname -m)" &gt;&gt; /etc/issue　　 <br /><br />　　cp -f /etc/issue /etc/issue.net <br /><br />　　echo &gt;&gt; /etc/issue <br /><br />　　不然的话每次重新启动 /etc/issue 都会被更改。 <br /><br />　　对 telnet 的远地机器： 先把文件 /etc/usr/sbin/in.telnetd 改名，如改为 in.telnetd.exe ，再编一个名为 in.telnetd 的 shell 脚 本， 在显示完需要的内容后再调用 in.telnetd.exe 。如：　　 <br /><br />　　#!/bin/sh cat /etc/login.banner #需要在登录提示符前显示的内容 echo -n "" exec /usr/sbin/in.telnetd.exe <br /><br />　　27. 几个有用的别名 <br /><br />　　几个能方便操作和减少误操作的别名，建议把它们放到启动 文件里， 如 /etc/bashrc 。 　　 <br /><br />　　alias rm='rm -i' <br /><br />　　alias cp='cp -i' <br /><br />　　alias mv='mv -i' <br /><br />　　#前三个别名的作用是在删除、覆盖文件之前先提示确认， RedHat已经自动 #加上了，强烈建议Slackware的用户也加上，因为 Linux/UNIX下文件一旦删 #除就再也无法恢复了。　　 <br /><br />　　alias l='ls -l' <br /><br />　　alias cd..='cd ..' <br /><br />　　alias utar='tar xvfz' #解 *.tar.gz 文件 <br /><br />　　alias inforpm='rpm -qpi' #显示rpm包的信息 <br /><br />　　alias instrpm='rpm -Uhv' #安装rpm包 <br /><br />　　alias listrpm='rpm -qpl' #列rpm包内的文件 <br /><br />　　alias uistrpm='rpm -e' #反安装rpm包 <br /><br />　　28. 使用命令补齐 <br /><br />　　所谓命令补齐(Command-Line Completion)是指当键入的 字符足以确定目录下一个唯一的文件时只须按 Tab 键就可以 自动补齐该文件名的剩下部分，例如要把目录 /freesoft 下 的文件 gcc-2.8.1.tar.gz 解包，当键入到 tar xvfz /freesoft/g 时如果该文件是该目录下唯一以 g 起头的文件 的话就可以按下 Tab 键，这时命令会被自动补齐为：tar xvfz /freesoft/gcc-2.8.1.tar.gz ，非常方便。 <br /><br />　　29. 最后一条技巧 　 <br /><br />　　有时间的话多看看系统提供的FAQ文件，因为通常遇到的 问题大多数都能在里面找到答案。 <br /><img src ="http://www.cnitblog.com/guopingleee/aggbug/27775.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/guopingleee/" target="_blank">向左向右走</a> 2007-05-30 11:42 <a href="http://www.cnitblog.com/guopingleee/archive/2007/05/30/27775.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Linux常用命令简</title><link>http://www.cnitblog.com/guopingleee/archive/2007/05/30/27774.html</link><dc:creator>向左向右走</dc:creator><author>向左向右走</author><pubDate>Wed, 30 May 2007 03:29:00 GMT</pubDate><guid>http://www.cnitblog.com/guopingleee/archive/2007/05/30/27774.html</guid><wfw:comment>http://www.cnitblog.com/guopingleee/comments/27774.html</wfw:comment><comments>http://www.cnitblog.com/guopingleee/archive/2007/05/30/27774.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/guopingleee/comments/commentRss/27774.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/guopingleee/services/trackbacks/27774.html</trackback:ping><description><![CDATA[su <br />　　su命令是最基本的命令之一，常用于不同用户间切换。例如，如果登录为 user1，要切换为user2，只要用如下命令： <br />　　$su user2 <br />　　然后系统提示输入user2口令，输入正确的口令之后就可以切换到user2。完成之后就可以用exit命令返回到user1。 <br />　　su命令的常见用法是变成根用户或超级用户。如果发出不带用户名的su命令 ，则系统提示输入根口令，输入之后则可切换为根用户。 <br />　　如果登录为根用户，则可以用su命令成为系统上任何用户而不需要口令。 <br />　　<br />　　pwd <br />　　pwd命令也是最常用最基本的命令之一，用于显示用户当前所在的目录。 <br />　　<br />　　cd <br />　　cd命令不仅显示当前状态，还改变当前状态，它的用发跟dos下的cd命令基本一致。 <br />　　cd ..可进入上一层目录 <br />　　cd -可进入上一个进入的目录 <br />　　cd ~可进入用户的home目录 <br />　　<br />　　ls <br />　　ls命令跟dos下的dir命令一样，用于显示当前目录的内容。 <br />　　如果想取得详细的信息，可用ls -l命令， 这样就可以显示目录内容的详细信息。 <br />　　如果目录下的文件太多，用一屏显示不了，可以用ls -l |more分屏显示 。 <br />　　<br />　　find <br />　　find命令用于查找文件。这个命令可以按文件名、建立或修改日期、所有者(通常是建立文件的用户)、文件长度或文件类型进行搜索。 <br />　　find命令的基本结构如下： <br />　　$find <br />　　其中指定从哪个目录开始搜索。指定搜索条件。表示找到文件怎么处理。一般来说，要用-print动作，显示 整个文件路径和名称。如果没有这个动作，则find命令进行所要搜索而不显示结果，等于白费劲。 <br />　　例如，要搜索系统上所有名称为ye的文件，可用如下命令： <br />　　$find / -name ye -print <br />　　这样就可以显示出系统上所有名称为ye的文件。 <br />　　<br />　　tar <br />　　tar最初用于建立磁带备份系统，目前广泛用于建立文件发布档案。可用如下方法建立tar档案： <br />　　$tar cvf <br />　　例如，如果要将当前目录中所有文件存档到ye.tar中，可用如下命令： <br />　　$tar cvf ye.tar *.* <br />　　要浏览档案内容，将c选项变成t。如果要浏览ye.tar档案中的内容，可用如下命令： <br />　　$tar tvf ye.tar <br />　　要取出档案内的内容，将c选项变成x。如果要将ye.tar档案中的内容取到当前目录中，可用如下命令： <br />　　$tar xvf ye.tar <br />　　<br />　　gzip <br />　　gzip命令用于压缩文件。 例如，如果要将ye.txt文件压缩，可用如下命令： <br />　　$gzip ye.txt <br />　　这样就可以压缩文件并在文件名后面加上gz扩展名，变成文件ye.txt.gz。 <br />　　解压缩文件可用gzip -d命令实现： <br />　　$gzip -d ye.txt.gz <br />　　这样就可以解压缩文件并删除gz扩展名。除此之外还可以用gunzip命令来解 压缩文件，效果跟用gzip -d命令一样。 <br />　　旧版的tar命令不压缩档案，可用gzip压缩。例如： <br />　　$tar cvf ye.tar *.txt <br />　　$gzip ye.tar <br />　　则可建立压缩档案ye.tar.gz。 <br />　　新版的tar可以直接访问和建立gzip压缩的tar档案，只要在tar命令中加上z 选项就可以了。例如： <br />　　$tar czvf ye.tar *.txt <br />　　生成压缩档案ye.tar.gz， <br />　　$tar tzvf ye.tar *.txt <br />　　显示压缩档案ye.tar.gz的内容，而 <br />　　$tar xzvf ye.tar *.txt <br />　　取出压缩档案ye.tar.gz的内容。 <br />　　<br />　　mkdir <br />　　这个命令很简单，跟dos的md命令用法几乎一样，用于建立目录。 <br />　　<br />　　cp <br />　　cp命令用于复制文件或目录。 <br />　　cp命令可以一次复制多个文件，例如： <br />　　$cp *.txt *.doc *.bak /home <br />　　将当前目录中扩展名为txt、doc和bak的文件全部复制到/home目录中。 <br />　　如果要复制整个目录及其所有子目录，可以用cp -R命令。 <br />　　<br />　　rm <br />　　rm命令用于删除文件或目录。 <br />　　rm命令会强制删除文件，如果想要在删除时提示确认，可用rm -i命令。 <br />　　如果要删除目录，可用rm -r命令。rm -r命令在删除目录时，每删除一个文件或目录都会显示提示，如果目录太大，响应每个提示是不现实的。这时可以用 rm -rf命令来强制删除目录，这样即使用了-i标志也当无效处理。 <br />　　<br />　　mv <br />　　mv命令用于移动文件和更名文件。例如： <br />　　$mv ye.txt /home <br />　　将当前目录下的ye.txt文件移动到/home目录下， <br />　　$mv ye.txt ye1.txt <br />　　将ye.txt文件改名为ye1.txt。 <br />　　类似于跟cp命令，mv命令也可以一次移动多个文件，在此不再赘叙。 <br />　　<br />　　reboot <br />　　重启命令，不必多说。 <br />　　<br />　　halt <br />　　关机命令，不必多说 <img src ="http://www.cnitblog.com/guopingleee/aggbug/27774.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/guopingleee/" target="_blank">向左向右走</a> 2007-05-30 11:29 <a href="http://www.cnitblog.com/guopingleee/archive/2007/05/30/27774.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[推荐]『 XML基础 』书</title><link>http://www.cnitblog.com/guopingleee/archive/2007/04/17/25806.html</link><dc:creator>向左向右走</dc:creator><author>向左向右走</author><pubDate>Tue, 17 Apr 2007 02:24:00 GMT</pubDate><guid>http://www.cnitblog.com/guopingleee/archive/2007/04/17/25806.html</guid><wfw:comment>http://www.cnitblog.com/guopingleee/comments/25806.html</wfw:comment><comments>http://www.cnitblog.com/guopingleee/archive/2007/04/17/25806.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/guopingleee/comments/commentRss/25806.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/guopingleee/services/trackbacks/25806.html</trackback:ping><description><![CDATA[
		<a href="http://bbs.xml.org.cn/dispbbs.asp?boardID=1&amp;ID=20676">http://bbs.xml.org.cn/dispbbs.asp?boardID=1&amp;ID=20676</a>
		<br />
		<br />
		<strong>[推荐]『 XML基础 』之XML常见问题合集！<br /></strong>
		<div width="100%">
				<div style="FLOAT: right">
						<strong>
						</strong>
				</div>
				<div>说明：本贴所列的贴子均取自本站的[精华贴、原创贴、转贴、问贴、学习笔记]等，因贴子数量比较大，因此不能一次全部列出，只能在无聊时或者见到重复发贴求助的时候根据实际情况逐步添加。有很多是原创，不能把他（她）们的名字一个一个都列出来，见谅！ 
<p></p><p><br />1、[精华]<a class="contentlink" href="http://bbs.xml.org.cn/dispbbs.asp?boardID=1&amp;ID=54" target="_blank"><font color="#4455aa">使用XML的五种场合</font></a></p><p>2、[精华]<a class="contentlink" href="http://bbs.xml.org.cn/dispbbs.asp?boardID=1&amp;ID=56" target="_blank"><font color="#4455aa">XML基本规则</font></a></p><p>3、[精华]<a class="contentlink" href="http://bbs.xml.org.cn/dispbbs.asp?boardID=1&amp;ID=53" target="_blank"><font color="#4455aa">XML FAQ (en)</font></a></p><p>4、[精华]<a class="contentlink" href="http://bbs.xml.org.cn/dispbbs.asp?boardID=1&amp;ID=5298" target="_blank"><font color="#4455aa">Web设计中如何使用XML数据源对象（DSO）</font></a></p><p>5、[精华]<a class="contentlink" href="http://bbs.xml.org.cn/dispbbs.asp?boardID=1&amp;ID=5303" target="_blank"><font color="#4455aa">为什么order-by无效？</font></a></p><p>6、[精华]<a class="contentlink" href="http://bbs.xml.org.cn/dispbbs.asp?boardID=1&amp;ID=5435" target="_blank"><font color="#4455aa">Php:XML分析函数Expat祥解</font></a></p><p>7、[精华]<a class="contentlink" href="http://bbs.xml.org.cn/dispbbs.asp?boardID=1&amp;ID=5423" target="_blank"><font color="#4455aa">把数据转换成XML格式的好处</font></a></p><p>8、[精华]<a class="contentlink" href="http://bbs.xml.org.cn/dispbbs.asp?boardID=1&amp;ID=5538" target="_blank"><font color="#4455aa">XML与HTML的结合</font></a></p><p>9、<a class="contentlink" href="http://bbs.xml.org.cn/dispbbs.asp?boardID=1&amp;ID=5486" target="_blank"><font color="#4455aa">xml中的空格之完全解说</font></a></p><p>10、[精华]<a class="contentlink" href="http://bbs.xml.org.cn/dispbbs.asp?boardID=1&amp;ID=5775" target="_blank"><font color="#4455aa">XML 指南 CHM版 - by 蓝色理想</font></a></p><p>11、[精华]<a class="contentlink" href="http://bbs.xml.org.cn/dispbbs.asp?boardID=1&amp;ID=6257" target="_blank"><font color="#4455aa">[心得]实现跨站数据共享,可能会遇到的问题集</font></a></p><p>12、[精华]<a class="contentlink" href="http://bbs.xml.org.cn/dispbbs.asp?boardID=1&amp;ID=6226" target="_blank"><font color="#4455aa">三线程数据移位货舱-xml-高级应用</font></a></p><p>13、<a class="contentlink" href="http://bbs.xml.org.cn/dispbbs.asp?boardID=1&amp;ID=6185" target="_blank"><font color="#4455aa">请问"XML文档必须有一个顶层元素"怎么回事?</font></a></p><p>14、[精华]<a class="contentlink" href="http://bbs.xml.org.cn/dispbbs.asp?boardID=1&amp;ID=6388" target="_blank"><font color="#4455aa">数据岛是否可以排序！！？？</font></a></p><p>15、<a class="contentlink" href="http://bbs.xml.org.cn/dispbbs.asp?boardID=1&amp;ID=6342" target="_blank"><font color="#4455aa">解析XML与面向Web的数据挖掘技术</font></a></p><p>16、<a class="contentlink" href="http://bbs.xml.org.cn/dispbbs.asp?boardID=1&amp;ID=6469" target="_blank"><font color="#4455aa">xml中动态调用xsl样式单</font></a></p><p>17、<a class="contentlink" href="http://bbs.xml.org.cn/dispbbs.asp?boardID=1&amp;ID=6416" target="_blank"><font color="#4455aa">在ASP中操纵xml的问题</font></a></p><p>18、<a class="contentlink" href="http://bbs.xml.org.cn/dispbbs.asp?boardID=1&amp;ID=6497" target="_blank"><font color="#4455aa">CSS与XSL简述(各自用途与优缺点)（转）</font></a></p><p>19、<a class="contentlink" href="http://bbs.xml.org.cn/dispbbs.asp?boardID=1&amp;ID=6465" target="_blank"><font color="#4455aa">diegor：XML学习笔记</font></a></p><p>20、<a class="contentlink" href="http://bbs.xml.org.cn/dispbbs.asp?boardID=1&amp;ID=6461" target="_blank"><font color="#4455aa">串行化XML(一)</font></a><a class="contentlink" href="http://bbs.xml.org.cn/dispbbs.asp?boardID=1&amp;ID=6462" target="_blank"><font color="#4455aa">串行化xml(三)</font></a></p><p>21、<a class="contentlink" href="http://bbs.xml.org.cn/dispbbs.asp?boardID=1&amp;ID=6608" target="_blank"><font color="#4455aa">用数据岛生成翻页程序(有助于理解数据岛的含义)!</font></a></p><p>22、<a class="contentlink" href="http://bbs.xml.org.cn/dispbbs.asp?boardID=1&amp;ID=6575" target="_blank"><font color="#4455aa">怎么用XML在数据岛里实现下拉列表框?</font></a></p><p>23、<a class="contentlink" href="http://bbs.xml.org.cn/dispbbs.asp?boardID=1&amp;ID=7149" target="_blank"><font color="#4455aa">我的图怎么不显示</font></a></p><p>24、<a class="contentlink" href="http://bbs.xml.org.cn/dispbbs.asp?boardID=1&amp;ID=7345" target="_blank"><font color="#4455aa">怎么样在XML文件中存放图片？请大虾指点指点！！</font></a></p><p>25、<a class="contentlink" href="http://bbs.xml.org.cn/dispbbs.asp?boardID=1&amp;ID=7413" target="_blank"><font color="#4455aa">javascript用DOM对XML文件进行增加、删除等操后，如何存存储XML文件？？？</font></a></p><p>26、[精华]<a class="contentlink" href="http://bbs.xml.org.cn/dispbbs.asp?boardID=1&amp;ID=7537" target="_blank"><font color="#4455aa">XML轻松学习总节篇（转贴搜集）</font></a></p><p>27、[精华]<a class="contentlink" href="http://bbs.xml.org.cn/dispbbs.asp?boardID=1&amp;ID=8390" target="_blank"><font color="#4455aa">动态增加xml对象节点函数</font></a></p><p>28、[精华]<a class="contentlink" href="http://bbs.xml.org.cn/dispbbs.asp?boardID=1&amp;ID=8480" target="_blank"><font color="#4455aa">独立文档中结构完整的XML(XML文档规则)（一）</font></a>　<a class="contentlink" href="http://bbs.xml.org.cn/dispbbs.asp?boardID=1&amp;ID=8481" target="_blank"><font color="#4455aa">结构完整的XML文档——XML文档规则（二）</font></a></p><p>29、<a class="contentlink" href="http://bbs.xml.org.cn/dispbbs.asp?boardID=1&amp;ID=8662" target="_blank"><font color="#4455aa">新手疑惑：通过loadxml的方式解析据库中的记录是再本地解析的还是服务器端解析的</font></a></p><p>30、[精华]<a class="contentlink" href="http://bbs.xml.org.cn/dispbbs.asp?boardID=1&amp;ID=8932" target="_blank"><font color="#4455aa">使用 xsl 对 xml 文档进行动态排序，分页显示的扩展</font></a></p><p>31、[精华]<a class="contentlink" href="http://bbs.xml.org.cn/dispbbs.asp?boardID=1&amp;ID=8930" target="_blank"><font color="#4455aa">用XML数据岛创建上下文菜单</font></a></p><p>32、[精华]<a class="contentlink" href="http://bbs.xml.org.cn/dispbbs.asp?boardID=1&amp;ID=8925" target="_blank"><font color="#4455aa">使用 ASP.NET 实现 XML 密钥管理服务</font></a></p><p>33、[精华]<a class="contentlink" href="http://bbs.xml.org.cn/dispbbs.asp?boardID=1&amp;ID=8924" target="_blank"><font color="#4455aa">XML for Microsoft Windows 2000 的新增功能</font></a></p><p>34、[精华]<a class="contentlink" href="http://bbs.xml.org.cn/dispbbs.asp?boardID=1&amp;ID=8920" target="_blank"><font color="#4455aa">在 HTML 中增加 XML 的好处是什么？</font></a></p><p>35、[精华]<a class="contentlink" href="http://bbs.xml.org.cn/dispbbs.asp?boardID=1&amp;ID=8918" target="_blank"><font color="#4455aa">在 XML 对象模型中如何处理空白字符？</font></a></p><p>36、[精华]<a class="contentlink" href="http://bbs.xml.org.cn/dispbbs.asp?boardID=1&amp;ID=8917" target="_blank"><font color="#4455aa">如何处理属性中的空白字符？</font></a></p><p>37、[精华]<a class="contentlink" href="http://bbs.xml.org.cn/dispbbs.asp?boardID=1&amp;ID=8916" target="_blank"><font color="#4455aa">在元素内容中如何处理空白字符？</font></a></p><p>38、[精华]<a class="contentlink" href="http://bbs.xml.org.cn/dispbbs.asp?boardID=1&amp;ID=8915" target="_blank"><font color="#4455aa">如何在 XML 中使用 HTML 实体？</font></a></p><p>39、[精华]<a class="contentlink" href="http://bbs.xml.org.cn/dispbbs.asp?boardID=1&amp;ID=8914" target="_blank"><font color="#4455aa">本地化和 XML/DHTML 菜单</font></a></p><p>40、[精华]<a class="contentlink" href="http://bbs.xml.org.cn/dispbbs.asp?boardID=1&amp;ID=8906" target="_blank"><font color="#4455aa">XML的术语</font></a></p><p>41、[精华]<a class="contentlink" href="http://bbs.xml.org.cn/dispbbs.asp?boardID=1&amp;ID=8904" target="_blank"><font color="#4455aa">Web设计中如何使用XML数据</font></a></p><p>42、[精华]<a class="contentlink" href="http://bbs.xml.org.cn/dispbbs.asp?boardID=1&amp;ID=8391" target="_blank"><font color="#4455aa">XML初学者必读</font></a></p><p>43、<a class="contentlink" href="http://bbs.xml.org.cn/dispbbs.asp?boardID=1&amp;ID=8983" target="_blank"><font color="#4455aa">新手问题!如何让一个XML文件支持中文？</font></a></p><p>44、[精华]<a class="contentlink" href="http://bbs.xml.org.cn/dispbbs.asp?boardID=1&amp;ID=8912" target="_blank"><font color="#4455aa">为什么使用 XML？</font></a></p><p>45、[精华]<a class="contentlink" href="http://bbs.xml.org.cn/dispbbs.asp?boardID=1&amp;ID=8600" target="_blank"><font color="#4455aa">XML手册(第四版) 超星图书</font></a></p><p>46、[精华]<a class="contentlink" href="http://bbs.xml.org.cn/dispbbs.asp?boardID=1&amp;ID=9184" target="_blank"><font color="#4455aa">具体实现XML的三种方式</font></a></p><p>47、[精华]<a class="contentlink" href="http://bbs.xml.org.cn/dispbbs.asp?boardID=1&amp;ID=9270" target="_blank"><font color="#4455aa">名域问题求详解!</font></a></p><p>48、[原创]卷积内核——XML初学进阶学习笔记</p><p><br /><a class="contentlink" href="http://bbs.xml.org.cn/dispbbs.asp?boardID=1&amp;ID=9248" target="_blank"><font color="#4455aa">XML初学进阶学习笔记</font></a></p><p><a class="contentlink" href="http://bbs.xml.org.cn/dispbbs.asp?boardID=1&amp;ID=9249" target="_blank"><font color="#4455aa">XML初学进阶学习笔记(续1)</font></a></p><p><a class="contentlink" href="http://bbs.xml.org.cn/dispbbs.asp?boardID=1&amp;ID=9250" target="_blank"><font color="#4455aa">XML初学进阶学习笔记(续2)</font></a></p><p><a class="contentlink" href="http://bbs.xml.org.cn/dispbbs.asp?boardID=1&amp;ID=9251" target="_blank"><font color="#4455aa">XML初学进阶学习笔记(续3)</font></a></p><p><a class="contentlink" href="http://bbs.xml.org.cn/dispbbs.asp?boardID=1&amp;ID=9252" target="_blank"><font color="#4455aa">XML初学进阶学习笔记(续4)</font></a></p><p><a class="contentlink" href="http://bbs.xml.org.cn/dispbbs.asp?BoardID=1&amp;id=9253" target="_blank"><font color="#4455aa">XML初学进阶学习笔记(续5)</font></a></p><p><a class="contentlink" href="http://bbs.xml.org.cn/dispbbs.asp?boardID=1&amp;ID=9301" target="_blank"><font color="#4455aa">XML初学进阶学习笔记(续6)</font></a></p><p><a class="contentlink" href="http://bbs.xml.org.cn/dispbbs.asp?boardID=1&amp;ID=9302" target="_blank"><font color="#4455aa">XML初学进阶学习笔记(续7)</font></a></p><p><a class="contentlink" href="http://bbs.xml.org.cn/dispbbs.asp?boardID=1&amp;ID=9304" target="_blank"><font color="#4455aa">XML初学进阶学习笔记(续8)</font></a></p><p><a class="contentlink" href="http://bbs.xml.org.cn/dispbbs.asp?boardID=1&amp;ID=9305" target="_blank"><font color="#4455aa">XML初学进阶学习笔记(续9)</font></a></p><p><a class="contentlink" href="http://bbs.xml.org.cn/dispbbs.asp?boardID=1&amp;ID=9306" target="_blank"><font color="#4455aa">XML初学进阶学习笔记(续10)</font></a></p><p><a class="contentlink" href="http://bbs.xml.org.cn/dispbbs.asp?boardID=1&amp;ID=9307" target="_blank"><font color="#4455aa">XML初学进阶学习笔记(续11)</font></a></p><p><a class="contentlink" href="http://bbs.xml.org.cn/dispbbs.asp?boardID=1&amp;ID=9308" target="_blank"><font color="#4455aa">XML初学进阶学习笔记(续12)</font></a></p><p><a class="contentlink" href="http://bbs.xml.org.cn/dispbbs.asp?boardID=1&amp;ID=9309" target="_blank"><font color="#4455aa">XML初学进阶学习笔记(续13)</font></a></p><p><a class="contentlink" href="http://bbs.xml.org.cn/dispbbs.asp?boardID=1&amp;ID=9310" target="_blank"><font color="#4455aa">XML初学进阶学习笔记(续14)</font></a></p><p><a class="contentlink" href="http://bbs.xml.org.cn/dispbbs.asp?boardID=1&amp;ID=9311" target="_blank"><font color="#4455aa">XML初学进阶学习笔记(续15)</font></a></p><p>49、<a class="contentlink" href="http://bbs.xml.org.cn/dispbbs.asp?boardID=1&amp;ID=9659" target="_blank"><font color="#4455aa">XML Schema 与 XML DTD的技术比较与分析</font></a></p><p>50、<a class="contentlink" href="http://bbs.xml.org.cn/dispbbs.asp?boardID=1&amp;ID=9662" target="_blank"><font color="#4455aa">请问xls文件中的超链接如何传递参数？</font></a></p><p>51、<a class="contentlink" href="http://bbs.xml.org.cn/dispbbs.asp?boardID=1&amp;ID=7795" target="_blank"><font color="#4455aa">DTD中如何定义一个没有顺序要求的元素</font></a></p><p>52、<a class="contentlink" href="http://bbs.xml.org.cn/dispbbs.asp?boardID=1&amp;ID=9712" target="_blank"><font color="#4455aa">怎么样用ASP读取节点</font></a></p><p>53、<a class="contentlink" href="http://bbs.xml.org.cn/dispbbs.asp?boardID=1&amp;ID=9878" target="_blank"><font color="#4455aa">请教关于xml中的超链接！</font></a></p><p>54、<a class="contentlink" href="http://bbs.xml.org.cn/dispbbs.asp?boardID=1&amp;ID=9769" target="_blank"><font color="#4455aa">xslt与xsl它们之间是什么关系？</font></a></p><p>55、<a class="contentlink" href="http://bbs.xml.org.cn/dispbbs.asp?boardID=1&amp;ID=9923" target="_blank"><font color="#4455aa">为什么图片不能正常显示？</font></a></p><p>56、<a class="contentlink" href="http://bbs.xml.org.cn/dispbbs.asp?boardID=1&amp;ID=10561" target="_blank"><font color="#4455aa">『XML和数据库』</font></a></p><p>57、<a class="contentlink" href="http://bbs.xml.org.cn/dispbbs.asp?boardID=1&amp;ID=10087" target="_blank"><font color="#4455aa">请问用xmlhttp调用繁体出现乱码怎么解决</font></a></p><p>58、<a class="contentlink" href="http://bbs.xml.org.cn/dispbbs.asp?boardID=1&amp;ID=10119" target="_blank"><font color="#4455aa">在一个xml中包括另外一个xml文件</font></a></p><p>59、<a class="contentlink" href="http://bbs.xml.org.cn/dispbbs.asp?boardID=1&amp;ID=10036" target="_blank"><font color="#4455aa">加载有外国和特殊字符的文档</font></a></p><p>60、<a class="contentlink" href="http://bbs.xml.org.cn/dispbbs.asp?boardID=1&amp;ID=10646" target="_blank"><font color="#4455aa">XML将结果输出到字符串里的使用方法</font></a></p><p>61、<a class="contentlink" href="http://bbs.xml.org.cn/dispbbs.asp?boardID=1&amp;ID=11133" target="_blank"><font color="#4455aa">xsl中如何使用textarea</font></a></p><p>62、<a class="contentlink" href="http://bbs.xml.org.cn/dispbbs.asp?boardID=1&amp;ID=11034" target="_blank"><font color="#4455aa">在XSL中用元素名作为称判断条件？</font></a></p><p>63、[精华]<a class="contentlink" href="http://bbs.xml.org.cn/dispbbs.asp?boardID=1&amp;ID=13421" target="_blank"><font color="#4455aa">建立MSXML 测试环境</font></a></p><p>64、<a class="contentlink" href="http://bbs.xml.org.cn/dispbbs.asp?boardID=1&amp;ID=13422" target="_blank"><font color="#4455aa">存取XML实体与卷标</font></a></p><p>65、<a class="contentlink" href="http://bbs.xml.org.cn/dispbbs.asp?boardID=1&amp;ID=13364" target="_blank"><font color="#4455aa">请问命名空间的意思</font></a></p><p>66、<a class="contentlink" href="http://bbs.xml.org.cn/dispbbs.asp?boardID=1&amp;ID=13676" target="_blank"><font color="#4455aa">XML轻松学习手册（1）XML快速入门</font></a></p><p><a class="contentlink" href="http://bbs.xml.org.cn/dispbbs.asp?boardID=1&amp;ID=13679" target="_blank"><font color="#4455aa">XML轻松学习手册（2）XML概念</font></a></p><p><a class="contentlink" href="http://bbs.xml.org.cn/dispbbs.asp?boardID=1&amp;ID=13680" target="_blank"><font color="#4455aa">XML轻松学习手册（3）XML的术语</font></a></p><p><a class="contentlink" href="http://bbs.xml.org.cn/dispbbs.asp?boardID=1&amp;ID=13681" target="_blank"><font color="#4455aa">XML轻松学习手册（4）XML语法</font></a></p><p><a class="contentlink" href="http://bbs.xml.org.cn/dispbbs.asp?boardID=1&amp;ID=13682" target="_blank"><font color="#4455aa">XML轻松学习手册（5）XML实例解析</font></a></p><p>67、[精华]<a class="contentlink" href="http://bbs.xml.org.cn/dispbbs.asp?boardID=1&amp;ID=13734" target="_blank"><font color="#4455aa">XML入门的常见问题</font></a></p><p>68、[精华]<a class="contentlink" href="http://bbs.xml.org.cn/dispbbs.asp?boardID=1&amp;ID=13624" target="_blank"><font color="#4455aa">XML 规范化形式简介</font></a></p><p>69、[精华]<a class="contentlink" href="http://bbs.xml.org.cn/dispbbs.asp?boardID=1&amp;ID=11503" target="_blank"><font color="#4455aa">命名空间详解</font></a></p><p>70、<a class="contentlink" href="http://bbs.xml.org.cn/dispbbs.asp?boardID=1&amp;ID=6959" target="_blank"><font color="#4455aa">了解 XML 命名空间</font></a></p><p>71、[精华]<a class="contentlink" href="http://bbs.xml.org.cn/dispbbs.asp?boardID=1&amp;ID=14123" target="_blank"><font color="#4455aa">Java更新XML的四种常用方法简介</font></a></p><p>72、[问题]<a class="contentlink" href="http://bbs.xml.org.cn/dispbbs.asp?boardid=1&amp;id=22707&amp;star=1#7572" target="_blank"><font color="#4455aa">根据各元素的值显示不同颜色</font></a><br />（end26）</p><p>73、[精华]<a class="contentlink" href="http://bbs.w3china.org/dispbbs.asp?boardID=1&amp;ID=6256" target="_blank"><font color="#4455aa">小鞋子：ASP中以二进制将图片存入XML文件中(显示,和存入)</font></a></p><p>74、[问题]<a class="contentlink" href="http://bbs.w3china.org/dispbbs.asp?boardID=1&amp;ID=31270" target="_blank"><font color="#4455aa">请问下，怎样把图片数据保存到XML里面？不是保存地址</font></a></p></div>
		</div>
<img src ="http://www.cnitblog.com/guopingleee/aggbug/25806.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/guopingleee/" target="_blank">向左向右走</a> 2007-04-17 10:24 <a href="http://www.cnitblog.com/guopingleee/archive/2007/04/17/25806.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>