<?xml version="1.0" encoding="gb2312"?>

<!-- RSS generated by oioj.net on 4/16/2004 ; 感谢LeXRus提供 RSS 2.0 文档; 此文件可自由使用，但请保留此行信息 --> 
<!-- Source download URL: http://blogger.org.cn/blog/rss2.asp       -->
<rss version="2.0">

<channel>
<title>mixianger的博客</title>
<link>http://blogger.org.cn/blog/blog.asp?name=mixianger</link>
<description>AlexMi的博客</description>
<copyright>blogger.org.cn</copyright>
<generator>W3CHINA Blog</generator>
<webMaster>webmaster@blogger.org.cn</webMaster>
<item>
<title><![CDATA[利用struts commons BeanUtils写的一个自动生成toString()方法的工具]]></title>
<link>http://blogger.org.cn/blog/more.asp?name=mixianger&amp;id=13156</link>
<author>mixianger</author>
<pubDate>2006/4/4 11:20:57</pubDate>
<description><![CDATA[<a>import java.util.Iterator;<br>import java.util.Map;<br><br>import org.apache.commons.beanutils.BeanUtils;<br>/**<br>&nbsp;* <br>&nbsp;* @author darkrice<br>&nbsp;* <br>&nbsp;*/<br>public class BeanTools {<br>&nbsp;&nbsp;&nbsp; public static void generateToStringMethod(Class clzss){<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; Object obj;<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; try {<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; obj = clzss.newInstance();<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; Map map =BeanUtils.describe(obj);<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; map.remove("class");<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; //map.remove("amendList");<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; String signature = "\npublic String toString(){\n";<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; StringBuffer sb = new StringBuffer(signature);<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; String newSb = "\n\tStringBuffer sb = new StringBuffer();\n";<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; sb.append(newSb);<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; for (Iterator it = map.keySet().iterator(); it.hasNext();) {<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; String key = (String) it.next();<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; String str = "\tsb.append(" + key + ");sb.append(\"\\t\");\n";<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; sb.append(str);<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; sb.append("}");<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; System.out.print(sb.toString());<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; } catch (Throwable t) {<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp; }<br>}<br>　</a>]]></description>
</item><item>
<title><![CDATA[UNIX常用命令[转]]]></title>
<link>http://blogger.org.cn/blog/more.asp?name=mixianger&amp;id=11215</link>
<author>mixianger</author>
<pubDate>2006/1/15 18:26:08</pubDate>
<description><![CDATA[UNIX常用命令<br><br>1.1 ls <br><br>[语法]： ls [-RadCxmlnogrtucpFbqisf1] [目录或文件......] <br>[说明]： ls 命令列出指定目录下的文件，缺省目录为当前目录 ./，缺省输出顺序为纵向按字符顺序排列。 <br>-R 递归地列出每个子目录的内容 <br>-a 列出所有文件，包括第一个字符为“.”的隐藏文件 <br>-d 若后面参数是目录，则只列出目录名而不列出目录内容，常与-l选项连 <br>用以显示目录状态。 <br>-C 输出时多列显示 <br>-x 横向按字符顺序排列 <br>-m 输出按流式格式横向排列，文件名之间用逗号(，)分隔 <br>-l 长列表输出，显示文件详细信息，每行一个文件，从左至右依次是： <br>文件存取模式 链接数 文件主 文件组 文件字节数 上次修改时间 <br>其中文件存取模式用10个字母表示，从左至右的意义如下： <br>第一个字母表示文件种类，可以是以下几种情况： <br>d 为目录文件 <br>l 为链接 <br>b 为块文件 <br>c 为字符型文件 <br>p 为命名管道（FIFO) <br>- 为普通文件 <br>后面9个字母分别表示文件主、同组用户、其他用户对文件的权力，用r表示可读，w 表示可写，x 表示可执行。如果是设备文件，则在文件字节数处显示：主设备 从设备。 <br>-n 与-l选项相同，只是文件主用数字(即UID)显示，文件组用数字 <br>(即GID)表示 <br>-o 与-l选项相同，只是不显示文件组 <br>-g 与-l选项相同，只是不显示文件主 <br>-r 逆序排列 <br>-t 按时间顺序排列而非按名字 <br>-u 显示时间时使用上次访问时间而非上次修改时间 <br>-c 显示时间时使用上次修改i节点时间而非上次修改时间 <br>-p 若所列文件是目录文件，则在其后显示斜杠(/) <br>-F 在目录文件后加’/’，在可执行文件后加’*’ <br>-b 文件名中若有非打印字符，则用八进制显示该字符 <br>-q 文件名中的打印字符用’?’表示 <br>-i 显示节点号 <br>-s 显示文件长度时使用块长度而非字节长度 <br>-f 将后面的参数解释为目录并列出其中的每一项 <br>-1 每行仅列一项 <br>[例子]: <br>ls 列出当前目录下的文件 <br>ls -al /bin 以长列表的形式列出目录 /bin 下的所有文件，包括隐藏文件 <br><br>1.2 pwd <br><br>[语法]: pwd <br>[说明]： 本命令用于显示当前的工作目录 <br>[例子]: <br>pwd 显示出当前的工作目录 <br><br>1.3 cd <br><br>[语法]: cd [目录] <br>[说明]：本命令用于改变当前的工作目录，无参数时使用环境变量$HOME 作为其参数，$HOME 一般为注册时进入的路径。 <br>[例子]： <br>cd 回到注册进入时的目录 <br>cd /tmp 进入 /tmp 目录 <br>cd ../ 进入上级目录 <br>1.4 mkdir <br><br>[语法]: mkdir [-m 模式] [-p] 目录名 <br>[说明]: 本命令用于建立目录，目录的存取模式由掩码（umask)决定，要求对其父目录具有写权限，目录的UID和GID为实际UID和GID <br>-m 按指定存取模式建立目录 <br>-p 建立目录时建立其所有不存在的父目录 <br>[例子]: <br>mkdir tmp 在当前目录下建立子目录 tmp <br>mkdir -m 777 /tmp/abc 用所有用户可读可写可执行的存取模式 <br>建立目录 /tmp/aaa ，存取模式参看命令 chmod <br>mkdir -p /tmp/a/b/c 建立目录 /tmp/a/b/c ，若不存在目录 /tmp/a <br>及/tmp/a/b 则建立之 <br><br><br>1.5 rmdir <br><br>[语法]: rmdir [-p] [-s] 目录名 <br>[说明]: 本命令用于删除目录 <br>-p 删除所有已经为空的父目录 <br>-s 当使用-p 选项时，出现错误不提示 <br>[例子]: <br>rmdir /tmp/abc 删除目录 /tmp/abc <br>rmdir -p /tmp/a/b/c 删除目录 /tmp/a/b/c ，若目录 /tmp/a /b <br>及/tmp/a 空，则删除 <br><br><br><br>1.6 cat <br><br>[语法]: cat [-u] [-s] [-v[-t] [-e]] 文件... <br>[说明]: 显示和连接一个或多个文件至标准输出 <br>-u 无缓冲的输出(缺省为有缓冲输出) <br>-s 对不存在的文件不作提示 <br>-v 显示出文件中的非打印字符，控制字符显示成^n ，n为八进制数字， <br>其他非打印字符显示成M-x ， x 为该字符低7位的8进制数值 <br>-t 在使用-v 选项时，将制表符（tab） 显示成 ^I，将换页符 <br>（formfeed）显示成 ^ L <br>-e 在使用-v 选项时，在每一行的行尾显示 $ <br>[例子]: <br>cat file 显示文件 <br>cat -s -v -e file1 file2 file3 逐个显示文件 file1 file2 file3 <br><br>1.7 head <br><br>[语法]: head [-n] [文件 ...] <br>[说明]: 将文件的头n 行显示输出,缺省值为 10 行，显示多个文件时，在每个文件的前面加上 ==&gt; 文件名 &lt;== <br>[例子]： <br>head -9999 file1 file2 显示文件 file1 和 file2 的头 9999 行 <br><br><br>1.8 more <br><br>[语法]: more [-cdflrsuw] [－ 行数] [+ 行数] [+ / 模式 ] [ 文件 ... ] <br>[说明]: 将文件显示在终端上，每次一屏，在左下部显示 －－more－－，若是从文件读出而非从管道，则在后面显示百分比，表示已显示的部分，按回车键则上滚一行，按空格键则上滚一屏，未显示完时可以使用more 命令中的子命令。 <br>-c 显示文件之前先清屏 <br>-d 当输错命令时显示错误信息而不是响铃(bell) <br>-f 不折叠显示长的行 <br>-l 不将分页控制符(CTRL D)当作页结束 <br>-r 一般情况下，more 不显示控制符，本选项使more 显示控制符， <br>例如，将 (CTRL C) 显示成 ^ C <br>-s 将多个空行转换成一个空行显示 <br>-u 禁止产生下划线序列 <br>-w 一般情况下 more 显示完后立即推出，本选项在显示完后作提 <br>示，敲任意键后推出 <br>-n 行数 指定每屏显示的行数 <br>+ 行号 从指定行号开始显示 <br>+/模式 在文件中搜索指定模式，从模式出现行的上两行开始显示 文件未显示完时，可以使用more 命令中的子命令，命令中除了! 和 / 以外均不回显，也不用敲回车，当命令破坏 more 提示行时，可用退格键恢复提示行。在以下子命令操作中，i 表示数字，缺省值为 1。 <br>i 空格 上滚一屏多 i 行 <br>i 回车 上滚 i 行 <br>i CTRL+D i 缺省时上滚 11 行，否则上滚 i 行 <br>id i 缺省时上滚 11 行，否则上滚 i 行 <br>iz i 缺省时上滚一屏，否则定义每屏为 i 行 <br>is 跳过 i 行后显示一屏 <br>if 跳过 i 屏后显示一屏 <br>i CTRL+B 跳回 i 屏后显示一屏 <br>b 跳回 一屏后显示一屏 <br>q 或 Q 推出 more <br>= 显示当前行号 <br>v 从当前行开始编辑当前文件编辑器由环境变量 <br>$EDITOR定义 <br>h 显示帮助信息 <br>i / 模式 向前搜索，直至模式的第 i 次出现 ， 从该行的上 两行开始显示一屏 <br>in 向前搜索，直至上一模式的第 i 次出现 ， 从该行 的上两行开始显示一屏 <br>单引号 回到上次搜索的出发点，若无搜索则回到开始位置 <br>! 命令 激活一个sh 去执行指定的命令 <br>i ： n 跳到后面第 i 个文件，若不存在则跳到最后一个文件 <br>：f 显示当前文件名和行号 <br>：q 或 ：Q 推出 more <br>. (点) 重复上次命令 <br>[ 例子]: <br>more -c +50 file 清屏后，从第50行开始显示文件 file <br>more -s -w file1 file2 file3 显示文件 file1 file2 file3 <br><br>1.9 cp <br><br>[语法]: cp [ -p ] [ -r ] 文件 1 [ 文件 2 ...] 目标 <br>[说明]: 将文件1(文件2 ...)拷贝到目标上，目标不能与文件同名， 若目标是文件名，则拷贝的文件只能有一个，若目标是目录， 则拷贝的文件可以有多个，若目标文件不存在，则建立这个文件，若存在，则覆盖其以前的内容，若目标是目录，则将文件拷贝到这个目录下。 <br>- i 在覆盖已存在文件时作提示，若回答 y 则覆盖，其他则中止 <br>- p 不仅拷贝文件内容，还有修改时间，存取模式，存取控制表， 但不拷贝 <br>UID 及 GID <br>- r 若文件名为目录，则拷贝目录下所有文件及子目录和它们的文件，此时 <br>目标必须为目录 <br>[例子]: <br>cp file1 file2 将文件 file1 拷贝到文件 file2 <br>cp file1 file2 /tmp 将文件 file1 和文件 file2 拷贝到目录 /tmp 下 <br>cp -r /tmp /mytmp 将目录 /tmp 下所有文件及其子目录拷贝至目录/mytmp <br><br>1.10 mv <br><br>[语法]: mv [-f] [-i] 文件1 [文件2...] 目标 <br>[说明]: 将文件移动至目标，若目标是文件名，则相当于文件改名 <br>- i 在覆盖已存在文件时作提示，若回答 y 则覆盖，其他则中止 <br>- f 覆盖前不作任何提示 <br>[例子]: <br>mv file1 file2 将文件 file1 改名为 file2 <br>mv file1 file2 /tmp 将文件 file1 和文件 file2 移动到目录 /tmp 下 <br><br>1.11 rm <br><br>[语法]: rm [-f] [-i] 文件... <br>或 rm -r [-f] [-i] 目录名... [文件] <br>[说明]: 用来删除文件或目录 <br>- f 删除文件时不作提示 <br>- r 递归地删除目录及其所有子目录 <br>- i 删除文件之前先作提示 <br>[例子]: <br>rm file1 删除文件 file1 <br>rm -i /tmp/* 删除目录 /tmp 下的所有文件 <br>rm -r /mytmp 递归地删除目录 /mytmp <br><br><br>1.12 chmod <br><br>[语法]: chmod [-R] 模式 文件... <br>或 chmod [ugoa] {+|-|=} [rwxst] 文件... <br>[说明]: 改变文件的存取模式，存取模式可表示为数字或符号串，例如： <br>chmod nnnn file ， n为0-7的数字，意义如下: <br>4000 运行时可改变UID <br>2000 运行时可改变GID <br>1000 置粘着位 <br>0400 文件主可读 <br>0200 文件主可写 <br>0100 文件主可执行 <br>0040 同组用户可读 <br>0020 同组用户可写 <br>0010 同组用户可执行 <br>0004 其他用户可读 <br>0002 其他用户可写 <br>0001 其他用户可执行 <br>nnnn 就是上列数字相加得到的，例如 chmod 0777 file 是指将文件 file 存取权限置为所有用户可读可写可执行。 <br>-R 递归地改变所有子目录下所有文件的存取模式 <br>u 文件主 <br>g 同组用户 <br>o 其他用户 <br>a 所有用户 <br>+ 增加后列权限 <br>- 取消后列权限 <br>= 置成后列权限 <br>r 可读 <br>w 可写 <br>x 可执行 <br>s 运行时可置UID <br>t 运行时可置GID <br>[例子]: <br>chmod 0666 file1 file2 将文件 file1 及 file2 置为所有用户可读可写 <br>chmod u+x file 对文件 file 增加文件主可执行权限 <br>chmod o-rwx 对文件file 取消其他用户的所有权限 <br><br><br>1.13 chown <br><br>[语法]: chown [-R] 文件主 文件... <br>[说明]: 文件的UID表示文件的文件主，文件主可用数字表示， 也可用一个有效的用户名表示，此命令改变一个文件的UID，仅当此文件的文件主或超级用户可使用。 <br>-R 递归地改变所有子目录下所有文件的存取模式 <br>[例子]: <br>chown mary file 将文件 file 的文件主改为 mary <br>chown 150 file 将文件 file 的UID改为150 <br><br><br>1.14 chgrp <br><br>[语法]: chgrp [-R] 文件组 文件... <br>[说明]： 文件的GID表示文件的文件组，文件组可用数字表示， 也可用一个有效的组名表示，此命令改变一个文件的GID，可参看chown。 <br>-R 递归地改变所有子目录下所有文件的存取模式 <br>[例子]: <br>chgrp group file 将文件 file 的文件组改为 group <br><br><br>1.15 cmp <br><br>[语法]: cmp [-l] [-s] 文件1 文件2 <br>[说明]: 比较两个文件，若文件1 为 - ，则使用标准输入， 两个文件相同则无提示，不同则显示出现第一个不同时的字符数和行号。 <br>-l 显示每个不同处的字节数(10进制)和不同的字节(8进制) <br>-s 不作任何提示，只返回码 <br>[例子]: <br>cmp file1 file2 比较文件 file1 和 file2 <br>cmp -l file1 file2 比较文件file1 和 file2 的每处不同 <br><br>1.16 diff <br><br>[语法]: diff [-be] 文件1 文件2 <br>[说明]: 本命令比较两个文本文件，将不同的行列出来 <br>-b 将一串空格或TAB转换成一个空格或TAB <br>-e 生成一个编辑角本，作为ex或ed的输入可将文件1转换成文件2 <br>[例子]: <br>diff file1 file2 <br>diff -b file1 file2 <br>diff -e file1 file2 &gt;edscript <br><br><br>1.17 wc <br><br>[语法]: wc [-lwc] 文件... <br>[说明]: 统计文件的行、字、字符数，若无指定文件，则统计标准输入 <br>-l 只统计行数 <br>-w 只统计字数 <br>-c 只统计字符数 <br>[例子]: <br>wc -l file1 file2 统计文件file1和file2 的行数 <br><br><br>1.18 split <br><br>[语法]: split [-n] [ 文件 [名字]] <br>[说明]: split 将指定大文件分解为若干个小文件，每个文件长度为n行(n 缺省时为1000)，第一个小文件名为指定的名字后跟aa，直至zz，名字缺省值为x，若未指定大文件名，则使用标准输入 <br>[例子]: <br>split -500 largefile little <br>将文件largefile 每500行写入一个文件，第一个文件名为littleaa <br><br><br>1.19 touch <br><br>[语法]: touch [-amc] [mmddhhmm[yy]] 文件... <br>[说明]: 将指定文件的访问时间和修改时间改变，若指定文件不存在则创建之，若无指定时间，则使用当前时间，返回值是未成功改变时间的文件个数，包括不存在而又未能创建的文件。 <br>-a 只改变访问时间 <br>-m 只改变修改时间 <br>-c 若文件不存在，不创建它且不作提示 <br>mmddhhmm[yy] 两位表示 月日时分[年] <br>[例子]: <br>touch file <br>更新文件file的时间 <br>touch 0701000097 HongKong <br>将文件HongKong的时间改为97年7月1日0时0分 <br><br><br>1.20 file <br><br>[语法]: file [-f 文件名文件] 文件... <br>[说明]: file 对指定文件进行测试，尽量猜测出文件类型并显示出来 <br>-f 文件名文件 文件名文件是一个包含了文件名的文本文件， -f 选项测试 <br>文件名文件中所列出的文件 <br>[例子]: <br>file * 显示当前目录下所有文件的类型 <br><br><br>1.21 pack <br><br>[语法]: pack 文件... <br>[说明]: pack 将指定文件转储为压缩格式，文件名后加 .z ， 文件存取模式，访问时间，修改时间等均不变 <br>[例子]: <br>pack largefile 将largefile 压缩后转储为largefile.z <br><br><br>1.22 pcat 显示压缩文件 <br><br>[语法]: pcat 文件... <br>[说明]: pcat 显示输出压缩文件 <br><br>[例子]: <br>pcat largefile.z 显示压缩前的largefile <br>pcat largefile.z &gt; oldfile 显示压缩前的laregfile，并将其重定向到 <br>文件oldfile中 <br><br><br>1.23 unpack <br><br>[语法]: unpack 文件... <br>[说明]: 将压缩后的文件解压后转储为压缩前的格式 <br>[例子]: <br>unpack largefile.z 将压缩文件largefile.z解压后转储为largefile <br><br><br>1.24 find <br><br>[语法]: find 路径名... 表达式 <br>[说明]: find 命令递归地遍历指定路径下的每个文件和子目录，看该文件是否能使表达式值为真，以下 n 代表一个十进制整数，+n 代表打印 n ， -n 代表小于 n ，下面是合法表达式说明： <br>-name 模式 文件名与模式匹配则为真，(\ 为转意符) <br>-perm [-]八进制数 文件存取模式与八进制数相同则为真若有- 选项，则文件存 <br>取模式含有八进制数规定模式即为真 <br>-size n[c] 文件块长度为 n 则真(一块为512字节)，若 <br>有c 选项，则文件字节长度为 n 则真 <br>-atime n 若文件的最近访问时间为 n 天前则为真， <br>find 命令将改变其访问的目录的访问时间 <br>-mtime n 若文件的最近修改时间为 n 天前则为真 <br>-ctime n 若文件状态为 n 天前改变则为真 <br>-exec 命令 { }\; 若命令返回值为0则真，{ }内为命令参数， <br>此命令必须以 \; 为结束 <br>-ok 命令 { }\; 与 exec 相同，只是在命令执行前先提示，若 <br>回答 y 则执行命令 <br>-print 显示输出使表达式为真的文件名 <br>-newer 文件 若文件的访问时间比newer 指定的文件新则真 <br>-depth 先下降到搜索目录的子目录，然后才至其自身 <br>-mount 仅查找包含指定目录的文件系统 <br>-local 文件在当前文件系统时为真 <br>-type c 文件类型为 c 则真，c 取值可为 b(块文件) c (字符文件) <br>d(目录) l (符号链接) p (命名管道) f (普通文件) <br>\( 表达式 \) 表达式为真则真 <br>-links n 文件链接数为 n 时为真 <br>-user 用户 当文件属于用户时为真，用户可用数字表示UID <br>-nouser 当文件不属于 /etc/passwd 中的一个用户时为真 <br>-group 文件组 当文件属于文件组时为真，文件组可用数字表示GID <br>-nogroup 当文件不属于 /etc/group 中的一个组时为真 <br>-fstype 类型 当文件所属文件系统类型为指定类型时真 <br>-inum n 当文件 i 节点号为 n 时为真 <br>-prune 当目录名与模式匹配时，不再搜索其子目录 <br>可以用逻辑操作符将简单表达式连接成复杂表达式 <br>逻辑操作符有 ! 表示非操作， -o 表示或操作，两个表达式并列则表示 <br>与操作 <br>[例子]: <br>find / -name find* -print <br>从根目录开始搜索文件名如 find* 的文件并显示之 <br>find ./ -exec sleep{1}\; -print <br>每秒显示一个当前目录下的文件 <br>find $HOME \(-name a.out -o -name '*.o' \) -atime +7 -exec rm {} \; <br>从$HOME目录开始搜索，删除所有文件名为a.out 或 *.o 且访问时间在7天前的文件 <br><br><br>1.25 grep <br><br>[语法]: grep [选项] 模式 [文件...] <br>[说明]: 在指定的文件中搜索模式，并显示所有包含模式的行，模式是一个正规表达式，在使用正规表达式时，最好将其引在单引号(') 中，若指定文件为缺省，则使用标准输入，正规表达式可以是： <br>. 匹配任意一个字符 <br>* 匹配0个或多个*前的字符 <br>^ 匹配行开头 <br>$ 匹配行结尾 <br>[] 匹配[ ]中的任意一个字符，[]中可用 - 表示范围， <br>例如[a-z]表示字母a 至z 中的任意一个 <br>\ 转意字符 <br>命令中的选项为： <br>-b 显示块号 <br>-c 仅显示各指定文件中包含模式的总行数 <br>-i 模式中字母不区分大小写 <br>-h 不将包含模式的文件名显示在该行上 <br>-l 仅显示包含模式的文件名 <br>-n 显示模式所在行的行号 <br>-s 指定文件若不存在或不可读，不提示错误信息 <br>-v 显示所有不包含模式的行 <br>[例子]: <br>grep 'good' * 在所有文件中搜索含有字符串 good 的行 <br>grep '^myline' mytext 在文件mytext中搜索行首出现myline字符串的行 <br><br><br>1.26 vi <br><br>[语法]：vi [-wn] [-R] 文件... <br>[说明]: vi 是一个基于行编辑器 ex 上的全屏幕编辑器，可以在vi 中使用 ex，ed的全部命令，vi选项中 -wn 指将编辑窗口大小置为n行，-R 为将编辑的文件置为只读模式， vi 工作模式分为命令模式和输入模式，一般情况下在命令模式下，可敲入vi命令，进入输入模式下时可以编辑要编辑的文本，命令 a A i I o O c C s S R 可进入输入模式，在输入模式下按 ESC 键可推出输入模式，回到命令模式，在命令模式中敲入： 命令，则可进入ex方式，在屏幕底部出现提示符 ： ，此时可使用任意ex命令，屏幕底行也用来作/ ? ! 命令的提示行，大多数命令可以在其前面加数字，表示命令执行的重复次数，下面简单介绍一下vi 的命令集，^ 表示(CTRL)键 <br>^B 退回前一页，前面加数字表示重复次数，每次换页时 <br>保留上一页的两行 <br>^D 在命令模式下，表示下滚屏幕的一半，在输入模式下，表示回退至 <br>左边的自动缩进处 <br>^E 显示屏幕底线之下的一行 <br>^F 前进一页，前面加数字表示重复次数，每次换页时 <br>保留上一页的两行 <br>^G 显示当前文件名，当前行号和文件总行数，并用百分号当前行在 <br>整个文件中的位置 <br>^H(退格) 在命令模式下，光标左移一格；在输入模式下，删去前面的字符 <br>^I(TAB) 在输入模式下，产生一串空格 <br>^J(LF) 光标下移一行 <br>^L 刷新屏幕，即将屏幕重新显示 <br>^M(回车) 在命令模式下，光标移动至下行开头 <br>在输入模式下，开辟一新行 <br>^N 光标下移一行 <br>^P 光标上移一行 <br>^Q 在输入模式下，将其后的非打印字符作为正文插入 <br>^R 刷新屏幕 <br>^U 屏幕上滚一半，前面加数字时表示上滚的行数，此数字对 <br>以后的^D ^U 命令有效 <br>^V 在输入模式下，将其后的非打印字符作为正文插入 <br>^W 在输入模式下，使光标回退一个字 <br>^Y 显示屏幕底线之上的一行 <br>^Z 暂停编辑，退回上层Shell <br>^[(ESC) 退出输入模式，回到命令模式 <br>! 暂时退出编辑，执行Shell命令 <br>(双引号) 用于标志有名缓冲区，编号缓冲区1-9用于保存被删去的正文，字 <br>母名缓冲区a-z供用户存放自定义的正文 <br>$ 将光标移动到当前行尾，前加数字则表示前移行数，如2$表示移动 <br>到下一行行尾 <br>% 将光标移动到配对的小括号()或大括号{}上去 <br>( 退回句子开头 <br>) 前移到句子开头 <br>- 退到上一行第一个非空格字符 <br>. 重复上一次改变缓冲区内容的命令 <br>/ 模式 向前搜索模式，将光标移动到模式出现处，模式是一个正规 <br>表达式，(参看 grep) <br>： 在屏幕底部提示：，其后可使用ex命令 <br>? 功能同 / ，但方向是向前查找 <br>[[ 光标回退至前一节分界处 <br>\ 转意符 <br>]] 光标前移至节分界处 <br>^(不是CTRL) 光标移至当前行第一个非空字符上 <br>' 连续两个''表示将光标移至其移动前的位置，'后跟字母表示光标字 <br>母标记的行首(参看 m 命令) <br>A 在行尾插入正文，进入输入模式 <br>B 光标回退一个字 <br>C 替换光标后的内容 <br>D 删除光标后的内容 <br>E 光标前移到字尾 <br>F 字符 在当前行向左查找指定字符 <br>G 光标移动到其前面数字指定的行，若未指定则移动到最后一行 <br>H 光标移动到屏幕顶行，若前面有数字，则移动到屏幕上该数字 <br>指定的行 <br>I 在行开头插入正文 <br>J 连接两行，若前面有数字则连接数字指定的行 <br>L 光标移动到屏幕底行，若前面有数字，则移动到屏幕底线往上数该 <br>数字指定的行 <br>M 光标移动到屏幕中线 <br>N 使用模式查找/或?时，重复找下一个匹配的模式，但方向与上次相 <br>反，其功能同 n ，但方向相反 <br>O 在当前行上开辟一新行 <br>P 将上次被删除的正文插入光标前面，可在其前面加缓冲区编号，编 <br>号1-9用于保存被删去的正文，字母名缓冲区a-z供用户存放自定 <br>义的正文 <br>Q 从vi 推出进入ex命令状态 <br>R 替换字符串 <br>S 替换整行 <br>T 字符 向左查找字符 <br>U 将当前行恢复至第一次修改前的状态 <br>W 光标移至下一个字首 <br>X 删除光标前的字符 <br>Y 将当前行存入无名缓冲区，前面加数字表示存入的行数，也可用有 <br>名缓冲区来保存，以后可用命令p或P将其取出 <br>ZZ 存盘退出vi <br>a 光标后插入正文 <br>b 光标回退至上一个字首 <br>cw 替换当前字 <br>c) 替换当前句子 <br>dw 删除一个字 <br>dd 删除一行 <br>e 光标移到下一个字末 <br>f 字符 在当前行向前查找字符 <br>h 光标左移一格 <br>i 在光标前插入正文 <br>j 光标下移一行 <br>k 光标上移一行 <br>l 光标右移一格 <br>m 字母 用字母标记当前行，以后可用 '字母使光标移动到当前行， <br>(参看'命令) <br>n 重复上次 / 或 ? 命令 <br>o 在当前行下开辟一新行 <br>p 将用户缓冲区内容放到光标位置(参看P命令) <br>r 替换当前字符 <br>s 用一串字符替换当前字符 <br>t 字符 光标移动至字符前 <br>u 取消上次操作 <br>w 光标移至下一字首 <br>x 删除当前字符 <br>yw 将当前字存入无名缓冲区，前面可加x，表示存入名字为x的有名 <br>缓冲区(x为a-z)，也可加数字表示存入的字数，以后可用P或p命 <br>令取出 <br>yy 将当前行存入无名缓冲区，用法参看yw <br>{ 光标移动至前一段开头 <br>| 光标移至行首，若前面加数字，则移到数字指定行的行首 <br>} 光标移至下一段开头 <br>在：提示符下，常用命令如下: <br>：w 当前文件存盘 <br>：w! 强制存盘 <br>：w 文件 将内容写入指定文件 <br>：w! 文件 强制写入指定文件 <br>：x，y w 文件 将 x至 y 行写入指定文件中 <br>：r 文件 将文件读到光标位置 <br>：r ! 命令 将系统命令的输出读到光标位置 <br>：q 退出编辑 <br>：q! 强制退出 <br>：x 与命令ZZ相同 <br>：e 文件名 编辑另一文件 <br>：e ! 重新编辑文件，放弃任何改变 <br>：sh 执行sh，结束后回到编辑 <br>：! 命令 执行命令后回到编辑 <br>：n 编辑下一文件 <br>：n 文件表 重新定义待编辑文件表 <br>：set 设置 vi 的选项，例如 set nu 表示每行前显示行号，在选项前 <br>加no则表示清除该选项，例如 set nonu 表示每行前不显示行 <br>号，下面是一些常用的选项: <br>ai 自动缩进 <br>aw 编辑下一文件前自动存盘 <br>ic 查找字符串时不区分大小写 <br>nu 每行前显示行号 <br>sm 输入)及}时显示与之配对的( 或 { <br>slow 插入时延迟屏幕刷新 <br>ws 使查找能绕过文件尾从头进行 <br>wa 写文件之前不作对文件的检查 <br><br><br><br><br>第二章 设备管理 <br><br>2.1 stty <br>[语法]: stty [-a] [-g] [选项] <br>[说明]: 本命令设置终端，无参数时报告终端设置，本命令功能十分强大，应谨慎使用，下面仅介绍部分常用功能 <br>-a 显示当前终端所有设置 <br>-g 以能作为 stty 命令参数的方式显示终端设置 <br>以下是终端常用设置，在设置前加-表示清除设置: <br>1．控制方式 <br>ispeed 0 110 300 600 1200 1800 2400 4800 9600 19200 38400 <br>本命令设置终端输入波特率，若为0则使用缺省波特率。 <br>例如 stty ispeed 9600 <br>ospeed 0 110 300 600 1200 1800 2400 4800 9600 19200 38400 <br>本命令设置终端输出波特率，参看 ispeed。 <br>2．输入方式 <br>ingbrk(-ignbrk) 忽略(不忽略)中断(BREAK) <br>brkint(-brkint) 设置(清除)信号INTR为中断信号 <br>inlcr(-inlcr) 将换行转换(不转换)成回车 <br>icrnl( -icrnl) 将回车转换(不转换)成换行 <br>igncr(-ignrc) 忽略(不忽略)回车 <br>iuclc( -iuclc) 将大写字母转换(不转换)成小写字母 <br>3．输出方式 <br>olcut(-olcut) 将小写字母转换(不转换)为大写字母 <br>onlcr(-onlcr) 输出时将换行符转换(不转换)为回车换行 <br>ocrnl(-ocrnl) 输出时将回车符转换(不转换)为换行符 <br>4．本地方式 <br>echo (-echo) 设置(清除)回显 <br>stwrap(-stwrap) 截断(不截断)大于79个字符的行 <br>echoctl(-echoctr) 将控制键回显为^ <br>2.2 tty <br><br>[语法]: tty <br>[说明]: 显示出终端的设备名 <br>[例子]: <br>tty <br><br><br>2.3 lp <br><br>[语法]: lp 文件... <br>[说明]: 将文件送打印机打印 <br>[例子]: <br>lp myfile 将文件myfile 送打印机输出 <br><br><br>2.4 lpstat <br><br>[语法]: lpstat [选项] [打印任务号] <br>[说明]: 显示打印机状态，选项的意义如下： <br>-a [打印机表] 显示打印机表中指定的打印机可否接收打印请求 <br>-c [打印机类名] 显示打印机种类及在该打印机种类下的成员 <br>-d 显示系统预设的打印机 <br>-p [打印机表] 显示打印机表中打印机状态 <br>-r 显示lp 请求程序表( lp request scheduler) <br>-s 打印系统统计表 <br>-t 打印所有状态信息 <br>-u [用户] 显示由用户发出的打印请求 <br>-v [打印机名表] 显示每个打印机名称，是对应于该打印机设备文件的路径名 <br>[例子]: <br>lpstat -t 打印所有状态信息 <br><br>2.5 cancel <br><br>[语法]: cancel 打印任务号 <br>cancel 打印机名 <br>cancel -u 用户名 [打印机] <br>[说明]: 本命令可按打印机名，打印任务，用户来取消打印任务 <br>[例子]: <br>cancel -u mary 取消用户 mary 的所有打印请求 <br><br><br>2.6 enable <br><br>[语法]: enable 打印机表 <br>[说明]: 本命令可激活一个或多个打印机 <br><br><br>2.7 disable <br><br>[语法]: disable [-cw] 打印机表 <br>[说明]: 使一个或多个打印机不能打印 <br>-c 立即取消正在打印的打印请求 <br>-w 等正在打印的内容打完后，才禁止打印机 <br><br><br>2.8 sync <br><br>[语法]: sync <br>[说明]: 将磁盘缓冲区内容写回磁盘 <br>2.9 mount <br><br>[语法]: mount [-r] 设备 目录 <br>[说明]: 将设备安装到目录下 <br>-r 以只读方式安装 <br><br><br>2.10 umount <br><br>[语法]: umount 设备 <br>[说明]: 将已安装的文件系统卸下 <br><br><br>2.11 tar <br><br>[语法]: tar -c[vwfbL] [设备] [块] 文件... <br>tar -r[vwfbL] [设备] [块] 文件... <br>tar -t[vfL] [设备] [文件...] <br>tar -u[vwfbL] [设备] [块] 文件... <br>tar -x[lmovwfL] [设备] [文件...] <br>[说明]: 将多个文件归档，命令中各参数的意义为： <br>r 附加方式归档 <br>x 抽取文件 <br>t 显示文件 <br>u 附加方式归档，同时删除旧版文件 <br>c 建立新档案文件 <br>v 显示所处理的文件名 <br>w 处理文件前，要求用户确认 <br>f 文件名 使用指定文件名作为档案文件 <br>bn 每次读写 n 块，缺省值为1，最大值为20 <br>m 将新的文件修改时间设为获取时的时间 <br>o 获取出来的文件以下达tar指令的UID和GID存储 <br>[例子]: <br>tar cvf file.tar * <br>tar tvf file.tar <br><br><br>2.12 df <br><br>[语法]: df [-t] [文件系统] <br>[说明]: 显示剩余 i 节点和块数，使用 -t 选项，还显示总块数和 i 节点数 <br>[例子]: df -t <br><br><br>2.13 du <br><br>[语法]: du [-ars] [目录] <br>[说明]: 显示磁盘空间专用情况 <br>-r 提供无法打开的文件信息 <br>-s 仅显示指定目录所占空间的总和 <br>-a 显示文件大小及目录总空间，其后可根文件名作参数 <br><br><br>第三章 进程管理 <br><br>3.1 sleep <br><br>[语法]: sleep 时间 <br>[说明]: 挂起参数指定的秒数 <br><br><br>3.2 ps <br><br>[语法]: ps [ -efl] [ -t 终端表] [ -u 用户表] [ -g 组表] <br>[说明]: 显示出有关进程的状态 <br>-e 显示出现在正在运行的所有进程 <br>-f 显示所有信息 <br>-l 产生一个长列表 <br>-t 显示指定终端进程 <br>-u 显示指定用户进程 <br>-g 显示指定组进程 <br><br><br>3.3 at <br><br>[语法]: at [-f 命令文件] [-m] [-q 队列] -t 时间 <br>[说明]: at命令由cron管理，在未来一个指定的时间内执行一组命令，命令可以从指定文件读入，也可从键盘读入，从键盘读入时以EOF结束，(通常为CTRL D) <br>-f 从指定命令文件中读入命令 <br>-m 命令执行完后给用户发邮件 <br>-q 将命令放入指定队列 <br>-t 指定时间 指定的时间格式为 [[CC]YY]MMDDhhmm[.ss]，CC表示 <br>年的前两位，YY表示年的后两位，MM表示月，DD表示日，hh表 <br>示时，mm表示分，ss表示秒 <br><br><br>3.4 kill <br><br>[语法]: kill -信号 进程号 <br>[说明]: kill 将信号传递给指定进程，信号意义如下： <br>1 暂停(hangup) <br>2 中断(interrupt) <br>3 退出(quit) <br>4 非法指令(illeqgal instruction) <br>5 跟踪中断(trace trap) <br>6 Abort <br>7 EMT 指令(Emulation trap) <br>8 浮点格式异常(floating point exception) <br>9 kill(不可忽略) <br>10 通道错误(bus error) <br>11 不合法内存段 <br>12 错误的系统调用参数 <br>13 写入不可读的连通管道 <br>14 alarm clock <br>15 软件结束信号 <br>16 用户定义信号一 <br>17 用户定义信号二 <br>[例子]: <br>kill -9 444 杀死进程号为 444 的进程 <br><br>第四章 系统管理和用户管理 <br><br>4.1 who <br><br>[语法]: who <br>who am i <br>[说明]: 列出现在系统中的用户，who am i 显示自己 <br><br><br>4.2 whodo <br><br>[语法]: whodo [-h] [-l] [用户] <br>[说明]: 显示系统中用户及进程，若指定用户，则只列出该用户的信息 <br>-h 不显示头部信息 <br>-l 长列表格式输出 <br><br><br>4.3 passwd <br><br>[语法]: passwd [用户] <br>[说明]: 修改密码，指定用户则修改指定用户密码 <br><br><br>4.4 logname <br><br>[语法]: logname <br>[说明]: 取得当前用户注册名 <br><br><br>4.5 su <br><br>[语法]: su [- ] [用户名] <br>[说明]: su 命令使当前用户成为指定用户，若无指定，则成为超级用户，但必须输入该用户的密码，-选项表示用该用户的注册环境成为该用户 <br><br><br>4.6 time <br><br>[语法]: time 命令 <br>[说明]: 执行命令，并在执行完后显示其运行的时间 <br><br><br>4.7 date <br><br>[语法]: date <br>date mmddhhmm[yy] <br>[说明]: date 无参数时用于显示系统时间，修改时间时参数形式为 <br>月日时分[年] <br><br><br>4.8 shutdown <br><br>[语法]: shutdown [-y] [-gn] [-in] <br><br>[说明]: UNIX 系统必须先关闭系统，再关电源 <br>-y 对提示的所有问题都回答 y <br>-gn 给其他用户n 秒的时间退出，缺省值为60秒 <br>-in 系统退到第n种方式，方式如下： <br>0 关机 <br>1 单用户模式 <br>2 多用户模式 <br>3 网络下的多用户模式 <br>6 关机并重新启动 <br><br><br>4.9 fsck <br><br>[语法]: fsck [-y] <br>[说明]: 本命令用于检查和修复文件系统，当文件系统出现混乱时，可使用本命令，-y选项表示对所有提问都回答YES <br><br><br><br><br><br><br><br>第五章 通信和邮件 <br><br>5.1 wall <br><br>[语法]: wall <br>[说明]: 向所有用户广播通知信息，常用于警告所有用户 <br><br><br>5.2 mesg <br><br>[语法]: mesg [-n] [-y] <br>[说明]: mesg 用 -n 参数则禁止其他用户用 write 发消息，用 -y 参数则允许接收消息，若无参数则报告现在的状况 <br><br><br>5.3 write <br><br>[语法]: write 用户 终端 <br>[说明]: write 与指定的终端上的用户直接对话，直到接收到文件结束符 <br>[例子]: <br>write mary console <br><br><br>5.4 mailx <br><br>[语法]: mailx [选项] [名字] <br>[说明]: 本命令用于发送和接收邮件，名字是收信人的用户名，本命令有许多内部命令，选项说明如下： <br>-e 检查是否有邮件，若有则返回0 <br>-f 文件名 从文件中读取邮件而非从邮箱中 <br>-H 只显示信件标题 <br>-s 标题 设定标题为指定标题 <br>[命令说明] <br>. 当前信件 <br>n 第 n 封信 <br>^ 第一封未被处理的信 <br>$ 最后一封信 <br>* 所有的信 <br>n-m 第n 封至第m封信 <br>用户 由指定用户发出的信 <br>/ 字符串 标题中包含字符串的信 <br>：c 满足指定类型c的信，类型可为 <br>d 已删除的信 <br>n 信传送的信 <br>o 旧信件 <br>r 已读过的信 <br>u 未读过的信 <br>p 一次显示多封信 <br>t 显示某封信的前若干行 <br>si 显示信件字符数 <br>h 显示信件标题 <br>d 删除信件 <br>u 恢复信件 <br>s [信件表] 文件名 <br>将信件存入指定文件中 <br>q 退出 <br>r 回信 <br>~e 编辑信件 <br>~r 文件 从文件中读取信件 <br>[例子]: <br>mailx mary &lt; myletter <br><br>第六章 Shell 编程 <br><br>shell 不但是 Unix 的用户交互界面，还是一门程序设计语言，系统注册进入时就会执行一个shell命令文件 .profile ，下面对shell中的常用命令作简单介绍。 <br>$n shell 程序命令行中的第n 个参数，n为0-9，当n 为0时表示命令名 <br>$# 命令行中参数的个数 <br>$$ 本shell 命令的进程号 <br>$! 最后一个后台进程的代号 <br>$* 所有命令行参数 <br>$@ 与$*相似，但其值不同 <br>$HOME 注册时进入的目录 <br>$PATH 命令的搜索目录 <br>$PS1 系统第一个提示符，一般为$ <br>$PS2 系统第二个提示符，一般为&gt; <br>shift [n] 将命令行参数往左移一位，但$0不变 <br>变量名=字符串 将字符串赋予变量名，以后可用$变量名引用该变量 <br>export 变量名表 将变量名表所列变量传递给子进程 <br>read 变量名表 从标准输入读字符串，传给指定变量 <br>echo 变量名表 将变量名表指定的变量显示到标准输出 <br>set 显示设置变量 <br>env 显示目前所有变量 <br>if 条件执行，语法是： if 条件 <br>then 指令 <br>fi <br>case 分支执行，语法是： case 字符串变量 in <br>值1) 指令... <br>值2) 指令... <br>... <br>esac <br>while 条件为真时循环，语法是： <br>while 条件 <br>do <br>指令... <br>done <br>until 条件为假时循环，语法是： <br>until 条件 <br>do <br>指令... <br>done <br>for 变量在表中时循环，语法是： <br>for 变量名 in 字组表 <br>do <br>指令... <br>done <br>break 从循环中退出，语法： <br>break n <br>n 表示跳出循环的层数 <br>continue 继续循环，语法： <br>continue n <br>n 表示退到包含continue 语句的第n 层继续循环 <br>exit 退出shell <br>func shell内部可定义函数，语法： func 函数名() <br>{ <br>指令... <br>} <br>expr 将其后的串解释为表达式并计算其值，运算符前后需有空格 <br>trap 捕获信号，语法 trap n ，捕获信号 n (信号说明参见kill) <br>test 条件测试，语法 test [选项] 参数 <br>选项 -f 文件 若文件存在且可读则真 <br>-w 文件 若文件存在且可写则真 <br>-x 文件 若文件存在且可执行则真 <br>-f 文件 若文件存在且为普通文件则真 <br>-d 文件 若文件存在且为目录文件则真 <br>-p 文件 若文件存在且为fifo文件则真 <br>-s 文件 若文件存在且不空则真 <br>-z 串 若串长度为0则真 <br>-n 串 若串长度不为0则真 <br>串 若串不是空串则真 <br>串1=串2 若串1等于串2则真 <br>串1!=串2 若串1不等于串2则真 <br>n1 -eq n2 若n1与n2数值相当则真 <br>n1 -ne n2 若n1与n2数值不相当则真 <br>n1 -lt n2 若n1小于n2则真 <br>n1 -le n2 若n1小于等于n2则真 <br>n1 -gt n2 若n1大于n2则真 <br>n1 -ge n2 若n1大于等于n2则真 <br>可用 与 -a 或 -o 非 ! 将条件表达式连接起来 <br><br><br><br><br>第七章 数学计算命令 <br><br>[语法]: bc [-c] [-l] [文件...] <br>[说明]: bc是一个交互式的高精度计算工具，采用类似于C语言的语法，能够从指定文件指定文件中读出命令执行，然后再进入交互式执行，事实上，bc是dc的预编译器，它自动激活dc，将语句经预编译后传递给dc，退出bc的命令是quit，bc中的ibase，obase，scale分别表示输入基数，输出基数，小数点右边的位数。 <br>-c bc 只编译，而不将编译结果送dc，将其送到标准输出上 <br>-l 预定义一个数学函数库，可在bc中使用以下函数 <br>s(x) sine <br>c(x) cosine <br>e(x) exponential <br>l(x) log <br>a(x) arctangent <br>j(n，x) Bessel <br>[例子]: <br>bc -l 进入bc <br>scale=10 将小数位定为10位 <br>e(1) 计算e的小数点后10位 <br>quit 退出bc <br><br><br><br><br>附录 UNIX 常用命令简单说明 <br><br>UNIX 命令大多数可用联机帮助手册 man 获得帮助，下面是常用命令及简单说明，可供用户快速查找使用。 <br><br>命令 功能简述 <br><br>acctcom 等于进程记帐文件 <br>accton 启动或中止记帐进程 <br>adb 汇编语言调试工具 <br>admin 创建和管理SCCS文件 <br>ar 档案文件和库文件管理程序 <br>as 汇编器 <br>asa 回车控制 <br>at 在指定时间执行程序 <br>awk 模式搜索和处理语言 <br>banner 制作标题 <br>basename 生成文件基本名(无前。后缀) <br>batch 命令的延迟执行 <br>bc 计算器 <br>bdiff 大型文件比较 <br>bfs 大文件搜索 <br>break 退出循环 <br>cal 打印日历表 <br>calendar 打印日历表 <br>cancel 取消打印任务 <br>case 分支语句 <br>cb C语言整理程序 <br>cd 改变当前目录 <br>cc C语言编译器 <br>cdc SCCS实用程序 <br>cflow 生成C语言流程图 <br>checkeq 数学公式排版命令 <br>chgrp 改变文件组 <br>chmod 改变文件存取模式 <br>chown 改变文件主 <br>chroot 改变根目录 <br>cksum 显示校验和 <br>clri 清除指定的I节点 <br>cmp 文件比较 <br>col 过滤反向换行 <br>comb SCCS实用程序 <br>comm 显示两个排序文件的公共行 <br>command 执行简单命令 <br>continue 进入下一循环 <br>cp 复制文件 <br>cpio 复制文件档案 <br>cpp C语言预处理程序 <br>crash 检查系统内存映象 <br>create 建立临时文件 <br>cref 生成交叉引用表 <br>cron 在指定时间执行一组命令 <br>crontab 为命令cron 准备crontab文件 <br>crypt 加密/解密 <br>csplit 将一个文件分解 <br>ct 远程终端注册 <br>ctags 创建供vi使用的标识符 <br>cu 呼叫另一UNIX系统 <br>cut 断开一文件中所选择的字段 <br>cxref 生成C程序交叉访问表 <br>date 打印和设置时间 <br>dc 桌面计算器 <br>dd 转换和复制文件 <br>delta SCCS实用程序 <br>deroff 去掉排版格式 <br>devnm 标识设备名 <br>df 显示可用磁盘空间 <br>diff 显示两个文件的差异 <br>diff3 显示三个文件的差异 <br>dircmp 目录比较 <br>dis 反汇编程序 <br>du 显示对磁盘的占用情况 <br>dump 对指定文件备份 <br>echo 回显指定参数 <br>ed 行编辑器 <br>edit 文本编辑器 <br>egrep 在文件中查找指定模式 <br>env 设置命令执行环境 <br>eqn 数学公式排版命令 <br>eval 执行指定命令 <br>ex 行编辑器 <br>exec 执行指定命令 <br>exit 进程中止 <br>expand 使表格占满行宽 <br>export 将变量传递给子程序 <br>expr 计算表达式值 <br>factor 因式分解 <br>false 返回FALSE <br>fgrep 在文件中查找指定模式 <br>file 确定文件类型 <br>find 查找符号条件的文件 <br>fmt 安排简单的文本格式 <br>fold 折行 <br>for 循环语句 <br>fsck 文件系统检查和修复 <br>fsdb 文件系统调试程序 <br>fumount 强制性拆协指定资源 <br>function 函数说明 <br>fuser 列出使用文件的进程 <br>fwtmp 产生记帐记录 <br>get SCCS实用程序 <br>getconf 查找配置参数 <br>getopt 获得命令中的选择项 <br>getopts 获得命令中的选择项 <br>getty 设置终端类型、模式、行律等 <br>grep 在文件中查找指定模式 <br>head 打印文件的头若干行 <br>hexdump 按十六进制转储文件 <br>id 显示用户号 <br>if 条件语句 <br>init UNIX 初启进程 <br>install 安装一个文件到文件系统 <br>ipcrm 删除IPC队列 <br>ipcs 显示IPC状态 <br>join 连接两个文件（关系操作〕 <br>kill 中止指定进程 <br>killall 中止所有活动进程 <br>labelit 给文件系统提供标号 <br>ld 目标文件链接编辑器 <br>lex 词法分析程序 <br>line 读一行 <br>link 连接文件 <br>lint C程序检查程序 <br>ln 链接文件 <br>local 建立局部变量 <br>logger 显示注册信息 <br>login 注册 <br>logname 获取注册名 <br>look 在排序文件中查找某行 <br>lorder 查找目标库的次序关系 <br>lp 打印文件 <br>lpr 打印文件 <br>lpstat 显示打印队列状态 <br>ls 目录列表 <br>mail 发送或接收电子邮件 <br>mailx 发送、接收或处理电子邮件 <br>make 执行有选择的编译 <br>makekey 生成加密码 <br>man 显示命令用法 <br>mesg 接收或取消对话方式 <br>mkdir 建立目录 <br>mkfifo 建立FIFO文件 <br>mkfs 建立文件系统 <br>mknod 建立文件系统的I节点 <br>mount 安装文件系统 <br>mv 移动文件 <br>mvdir 移动目录 <br>ncheck 按节点号生成节点名清单 <br>neqn 数学公式排版命令 <br>newgrp 把用户加入到新组 <br>news 打印消息 <br>nice 改变命令执行优先级 <br>nl 给文件加行号 <br>nm 显示目标文件符号表 <br>nohup 忽略挂起或退出执行命令 <br>nroff 文本文件排版 <br>od 按八进制转储文件 <br>pack 压缩文件 <br>passwd 改变口令 <br>paste 文件合并 <br>pax 可移植档案管理程序 <br>pcat 显示压缩格式文件 <br>pg 分屏显示 <br>pr 按打印格式显示文件 <br>pstat 报告系统信息 <br>pwck 口令文件校验程序 <br>pwd 显示当前工作目录 <br>quot 检查文件系统所有权 <br>ratfor 转换成标准FORTRANC程序 <br>read 从标准输入读一行 <br>readonly 标记变量为只读 <br>red 文本编辑器 <br>regcmp 正规表达式编辑 <br>restor 文件系统恢复程序 <br>restore 文件系统恢复程序 <br>return 返回语句 <br>rev 颠倒文件中每行字符次序 <br>rm 删除文件 <br>rmdel SCCS使用程序 <br>rmdir 删除目录 <br>rsh(net) 远程SHELL <br>rsh(sec) 受限SHELL <br>runacct 运行日常记帐程序 <br>sact SCCS实用程序 <br>sag 打印系统活动图 <br>sar 报告系统活动 <br>sccsdiff SCCS实用程序 <br>sdb 符号调试器 <br>sdiff 并列显示两个文件的差别 <br>sed 流编辑器 <br>sendto 发送邮件 <br>set 设置选项或参数 <br>setmnt 建立文件系统安装表 <br>sh SHELL解释器 <br>shift 命令行参数移位 <br>shl SHELL层（layer)管理程序 <br>shutdown 关机 <br>size 显示目标文件长度 <br>sleep 挂起进程一段时间 <br>sort 文件排序和合并 <br>spell 拼写错误检查程序 <br>spellin 拼写错误检查 <br>spellout 拼写错误检查 <br>spline 按平滑曲线输出数据 <br>split 分解一个文件 <br>strings 在目标文件中寻找可打印字符 <br>strip 删除符号表 <br>stty 设置终端模式 <br>su 改变用户 <br>sum 显示文件校验和及块数 <br>sync 更新磁盘 <br>tabs 设置制表符 <br>tbl 表格排版 <br>tee 在管道上建立多通路 <br>tic 终端数据库编译程序 <br>time 打印执行命令所花时间 <br>tiemx 报告命令所花时间及活动 <br>touch 更新文件时间 <br>tput 恢复终端或查询数据库 <br>tr 转换字符 <br>trap 捕获信号 <br>troff 文本文件排版 <br>true 返回TRUE <br>tsort 拓扑排序 <br>tty 显示终端设备名 <br>umask 设置文件掩码 <br>umount 拆卸文件系统 <br>uname 显示系统名 <br>unget SCCS实用程序 <br>uniq 删除文件中重复行 <br>units 度量单位转换 <br>unlink 删除文件 <br>unpack 将压缩文件还原 <br>until 循环语句 <br>update 更新磁盘 <br>val SCCS实用程序 <br>vc SCCS实用程序 <br>vi 全屏幕编辑器 <br>volcopy 文件系统的文字拷贝 <br>wait 等待所有字进程结束 <br>while 循环语句 <br>who 显示谁在使用系统 <br>whodo 显示哪些用户在做什么 <br>write 和另一用户直接对话 <br>xargs 建立参数表并执行命令 <br>yacc 语法分析程序生成器<br><br>]]></description>
</item><item>
<title><![CDATA[C/C++复习笔记 三]]></title>
<link>http://blogger.org.cn/blog/more.asp?name=mixianger&amp;id=11212</link>
<author>mixianger</author>
<pubDate>2006/1/15 16:42:38</pubDate>
<description><![CDATA[<a><span style="font-weight: bold;">内联函数</span><br><br>宏：<br><br>宏不是函数<br>由于处理器展开，没有函数调用的开销<br><br>C++的内联函数可以取代宏，必须在函数定义中把函数定义成inline<br>内联函数和宏一样的是：他是由编译器其展开，也有函数的检查<br><br>使用内联函数：编译器把内联函数放到符号表里，当有内联函数调用时，检查调用是否正确，返回值使用是否正确，然后将宏展开。<br><br>为了macros的一些陷阱，建议永远使用内联函数。<br><br>对于内联函数,内联函数是一些小而逻辑简单的代码，编译时，如果符合内联的要求，编译器会把声明称内联的函数直接将代码或编译后的代插入到调用处，这样可以减少函数调用的开销。<br><br>声明内联函数要使用inline关键字，声明为内联的函数必须定义和声明写在一起。<br><br>Class的成员函数如果写在class内则默认为内联函数。<br><br>inline 声明只是对编译器的一个建议，并不一定会被使用。<br><br>&nbsp;<br><br style="font-weight: bold;"><span style="font-weight: bold;">static关键字</span><br><br>全局变量extern int a=0;对所有编译单元可见，在进入main函数之前就被初始化。<br><br>文件内定义的static变量,告诉编译器这是个一个内部连接<br><br>函数里的static 变量，在第一次调用时被初始化，static可以保证函数在两次调用是值不变。静态对象的析构函数是在main退出时，或者在exit()调用之前，调用的。<br><br>&nbsp;<br><br><span style="font-weight: bold;">名词空间namespace</span><br><br>1) namespace只能在全局范畴定义，但它们之间可以互相嵌套。<br><br>2) 在namespace定义的结尾，右大括号的后面不必要跟一个分号。<br><br>3) 一个namespace可以在多个头文件中用一个标识符来定义，就好象重复定义一个类一样。<br><br>4)一个namespace的名字可以用另一个名字来作它的别名，这样我们就不必敲打那些开发商提供的冗长的名字了。比如说namespace alex = ThisIsAelxLongNamespace;<br><br>5) 我们不能像类那样去创建一个名字空间的实例<br><br>1.每个编译单元可以有一个没有命名的名词空间。<br><br>//cu.cpp<br><br>namespace{<br><br>class object{}...<br><br>}<br><br>&nbsp;&nbsp; 2. 友元:可以在一个名字空间的类定义之内插入一个friend 声明,这个友元也属这个namespace<br><br>使用名词空间namespace<br><br>1.alex::Student::age=5;//象使用类一样使用namespace<br><br>2.使用using指令using namespace std;using namespace alex;using namespace chirs;<br><br>如果alex 和chirs都有一个love 函数的话，就会发生冲突，<br><br>3.使用using声明：<br><br>void func(){<br><br>using namespace alex;//using指令<br><br>using chris::love;//uisng声明<br><br>love();//chirs::love();<br><br>alex::love();//必须这么使用<br><br>}<br><br>&nbsp;<br><br><span style="font-weight: bold;">new and delete关键字</span><br><br>内存区域的划分<br><br>1.静态存储区域：存放static变量<br><br>2.栈:函数调用使用的空间<br><br>3.堆:动态存储区域<br><br>在c中<br>1 malloc()申请内存时候需要判断是否成功<br>2 malloc申请的内存必须进行显示类型转换<br>3 不要忘记free()<br><br>在C++中，要在堆中申请存储空间，你要使用new关键字<br><br>使用new关键字之后，会先申请空间，成功地话会调用构造函数初始化。<br><br>要释放new申请的内存必须 要使用delete.<br><br>&nbsp;<br><br><span style="font-weight: bold;">指针和引用以及拷贝构造(copy-constructor)</span><br><br>A reference (&amp;) is like a constant pointer that is automatically dereferenced. It is usually used for function argument lists and function return values. But you can also make a free-standing reference.<br><br>1.引用在建立时必须初始化,<br><br>2.一旦初始化华引用之后,就不能更改<br><br>3.引用不能指向NULL值。<br><br>const referance<br><br>也就是指向常量的引用 //const int&amp; =1;<br><br>f(const int&amp; i );g(int &amp;i);f(1);//!g(1);<br><br>pointer referance<br><br>int** p;可以写成 int*&amp; p;<br><br>也就是说int** p 指的是int* p的指针的引用<br><br>你的函数可以改成这样:<br><br>f(int** p){<br><br>p++;<br><br>}调用时:int* ip=&amp;i;f(&amp;ip);<br><br>g(int*&amp; p){<br><br>p++;<br><br>}调用时:g(p)<br><br>&nbsp;<br><br>The copy-constructor is used by the compiler to pass and return objects by value into and out of functions.<br><br>默认拷贝构造函数的形式:<br><br>class X{<br><br>public:<br><br>X(const &amp;X);<br><br>}<br><br>&nbsp;<br><br><span style="font-weight: bold;">继承</span><br><br>继承的语法<br><br>默认为私有继承，:public为共有继承<br><br>class D:Base{}<br><br>&nbsp;<br><br><span style="font-weight: bold;">虚函数</span><br><br>当建立虚函数时，编译器会自动为该对象建立一个虚表，存放对象方法地址。<br><br>建立虚函数时要使用virtual关键字。virtual myVFun(){}<br><br>纯虚函数，virtual myVFun()=0;<br><br>如果声明了纯虚函数的话，或者派生类中有没有重载的virtual类，则不能用建立该对象的实力。<br><br>使用多态时，用的是指针和引用，如果使用传值的话，会造成对象切片，即在调用时，会调用基类的拷贝构造函数，只把派生类和基类共有的部分拷贝，使派生类数据丢失。<br><br>虚机制在构造函数和析构函数中不工作。<br>析构函数必须为虚函数<br><br></a><span style="font-size: 11pt; font-family: 宋体; color: black;"></span>]]></description>
</item><item>
<title><![CDATA[C/C++复习笔记 二]]></title>
<link>http://blogger.org.cn/blog/more.asp?name=mixianger&amp;id=11211</link>
<author>mixianger</author>
<pubDate>2006/1/15 16:40:23</pubDate>
<description><![CDATA[<span style="font-weight: bold;">关于访问权限的控制</span><br><br><span style="font-weight: bold;">public,private,protected</span>以及<span style="font-weight: bold;">friend</span>.<br><br>默认的struct的访问权限是public<br><br>默认的class的访问权限是private<br><br>关于protected 对于某个class的子类，是可访问的。<br><br>关于friend<br><br>全局函数,struct,class以及他们的成员函数声明为友元之后，就以访问实体的私有成员.<br><br>例如在<br><br>#ifndef FRINEND_H_<br><br>#define FRINEND_H_<br><br>&nbsp;<br><br>class X;//declaretion X<br><br>&nbsp;<br><br>class Z{<br><br>public:<br><br>void showXi(X* x);<br><br>};<br><br>&nbsp;<br><br>class X{<br><br>private:<br><br>int i;<br><br>public:<br><br>void init();<br><br>friend class Y;//声明Y是X的友元<br><br>friend void Z::showXi(X* x);//声明Z::showXi(X* x)是X的友元<br><br>};<br><br>&nbsp;<br><br>class Y{<br><br>public:<br><br>Y(X* x);<br><br>};<br><br>&nbsp;<br><br>#endif /*FRINEND_H_*/<br><br>&nbsp;<br><br><span style="font-weight: bold;">数组的初始化</span><br><br>C++中编译器没有强制要求初始化数组，但初始化数组是非常重要的。<br><br>比如说: int arry[10];这样编译器会在内存中申请一块大小为10的连续块，每块的大小为 sizeof(int)个字节，这个根据编译器的实现不同可能会有不同，这10个连续块没有被初始化，你可能会看到各种各样的结果。<br><br>比如:<br><br>for(int i=0;i&lt;10;i++){<br><br>cout&lt;&lt;i;//你可能看到各种奇怪的数字。<br><br>}<br><br>数组的初始化：<br><br>你可以这样做: int arry[10]={0,1,2,3,4,5,6,7,8,9}; 结果是0123456789<br><br>也可以只简单写成: int arry[10]={0};结果是000000000<br><br>这种情况下编译器会报错误:int arry[2]={0,1,2,3};初始化值得个数太多。<br>&nbsp;<br><br><span style="color: rgb(153, 0, 0);">Note* :在C++中，数组是不会做越界检查的，一定小心数据越界。</span><br><br>比如说:<br><br>int arry[4]={0};<br><br>for(int i=0;i&lt;5;i++){<br><br>cout&lt;&lt;arry[i];//!这样编译器是不会报错的,但这很危险<br><br>}<br><br><span style="color: rgb(153, 0, 0);">特别小心类的数组，是调用类的默认构造函数初始化的，如果一个类没有了默认构造函数该类的数组是不能被初始化的。</span><br><br><br><br><span style="font-weight: bold;">函数重载以及缺省参数</span><br><br>1.函数重载<br><br>是通过函数的参数列表实现的<br><br>2.缺省参数<br><br>int method(int var1=5){<br><br>cout&lt;&lt;var1;<br><br>}<br><br>你可以这样调用method();输出是5;也可以这么调用method(3);输出是3。<br><br>&nbsp;<br><br><span style="font-weight: bold;">缺省参数的两条原则：</span><br><br>1.只有参数列表的后部参数才可是缺省的，也就是说，我们不可以在一个缺省参数后面又跟一个非缺省的参数。<br><br>2.第二，一旦我们开始使用缺省参数，那么这个参数后面的所有参数都必须是缺省的。<br><br>个人认为这可能造成调用上的混乱……<br><br>比如说:<br><br>如果同时声明并定义了<br><br>int method(int var1=5)和int method()编译是不会出现问题的，但你无法调用method()方法，因为编译器不知道你使用的前者还是后者。<br><br>当然，缺省参数本身的目的就是为了减少函数重载的个数，应该省去method()方法。<br><br>&nbsp;<br><br><span style="font-weight: bold;">const关键字</span><br><br>&nbsp;<br>const 是常量，这就意味着你不能改变他们的值<br>&nbsp;<br><br>在header files<br><br>用于定义某个常量作用类似于C中的宏定义<br><br>在c中我们是这么做的<br><br>#define MAX_SIZE 100<br><br>int arry[MAX_SIZE];<br><br>这种方式会有些问题，比如说MAX_SIZE 没有类型，只是在变异期间将MAX_SIZE替换成100。在复杂的宏中尤其明显<br>例如：#define f(x) (x+1)<br><br>f(1)展开之后的形式是：(1+1),f(1.0)的形式是(1.0+1)<br><br>很显然一个值是int 一个float型<br><br>在C++中我们使用<br><br>const int CONST_MAX_SIZE = 100;<br><br>以及内联(inline)函数实现宏<br><br><span style="font-weight: bold;">const 与指针</span><br><br>NOTE* const是右结合的<br><br>const int*以及int* const<br><br>const int* 定义了一个指向cosnt int 类型变量的指针常量的指针<br><br>比如说：cosnt string str =”Alex Loves Chris!”;<br><br>要定义str的指针必须这么定义:<br><br>const string* stu = &amp;str;因为str本身为const string类型<br><br>你可以这么做<br><br>const string str ="Alex loves chris!";<br><br>const string str2="chris loves alex";<br><br>string str3 ="we love each other!";<br><br>const string* ps = &amp;str;<br><br>ps = &amp;str2;<br><br>//!ps = &amp;str3;<br><br>而int* const定义了一个指向 int型变量的指针，而且这个指针指不能改变，也就是说它是个指针常量<br><br>string str ="Alex loves chris!";<br><br>string str2="chris loves alex";<br><br>string str3 ="we love each other!";<br><br>string* const ps = &amp;str;<br><br>//!ps = &amp;str2;<br><br>//!ps = &amp;str3;ps 是const值，不能被改变<br><br>&nbsp;<br><span style="font-weight: bold;">const 与函数参数以及返回值</span><br><br>你可以把函数参数设置为const型，这样可以防止，函数对参数(指针，和引用)不必要修改,但这样作也许是更好的办法：<br><br>void method(const int&amp; i){//传const引用<br><br>//!i++; //客户程序调用时const int i=10;method(i);<br><br>}<br><br>void method(int&amp; pi){//这样做可以隐藏实现<br><br>const int&amp; cpi= pi;//客户程序在调用时int i=10;method(i);<br><br>//!cpi++;<br><br>}<br><br>&nbsp;<br><br>函数重载根据的是函数参数类型，包括引用&amp;和指针*的修饰，但在调用时会忽略掉引用修饰，这就使纯粹的传值和传引用的调用冲突，要避免出现这种情况。<br><br><br><span style="font-weight: bold;">const 返回值</span><br><br>对于内建类型，编译器不关心返回的是否是const 值。<br><br>对于const int method();和int method();对编译器来说没什么因为返回的本事就是一个常量。所以应该尽量避免返回const内建类型。(因为没什么用处) <br><br>但对于class(返回的是引用?还是值?)以及指针,如果返回的const值,必须用const值处理.<br><br>关于返回的是引用还是值:函数调用时在堆栈中进行的对于基本类型返回的一定是值,tinking in c++中说函数如果返回一个object需要调用拷贝构造函数，这个是不是以为着返回了一个值？但在gcc中却没有调用！<br><br>但对于自定义类型的话<br><br><span style="font-weight: bold;">const参数</span><br><br>建议对于非内建类型的传递使用const，这样可以使嵌套使用<br><br>比如：Object getObject();<br><br>void method(const Object&amp; obj);<br><br>加了const修饰你可以这么使用:method(getObject());<br><br>如果直接使用void method2(Object&amp; obj);<br><br>method2(getObject());是不能通过编译的,说method2的参数时临时变量。<br><br>&nbsp;<br>在C++中(g++中)<br><br>Object obj;// 栈中,调用默认构造函数,obj为Object引用<br><br>Object obj = Object();//栈中，调用相应构造函数，再将引用付给obj<br><br>Object obj=getObject();//栈中，调用拷贝构造函数<br><br>Object* obj = new Object();//堆中，调用相应构造函数，返回指针<br><br>Object obj2 = obj；调用拷贝构造函数。<br><br>这其实可以看成是在C++中引用必须初始化来解释，Object obj只是建立了一个引用，编译器要初始化这个引用就会出现上面的情况。<br><br><br><br>C++中的引用其实就是一个const pointer，首先它是一个指针，这个指针必须初始化，const值，你可以改变这个指针所指向的存储区域的内容，但你不能改变这个指针的值。<br><br>1.A reference must be initialized when it is created. (Pointers can be initialized at any time.)<br><br>2.Once a reference is initialized to an object, it cannot be changed to refer to another object. (Pointers can be pointed to another object at any time.)<br><br>3.You cannot have NULL references. You must always be able to assume that a reference is connected to a legitimate piece of storage.<br><br><span style="font-weight: bold;">类中的const</span><br><br>1.const变量<br><br>可以使用参数初始化列初始化<br><br>构造函数初始化列<br><br>class Student{<br><br>public:<br><br>Student(){}<br><br>//参数列表，这些成员变量将会在构造函数内代码运行之前被初始化<br><br>Student(string name ,int age):_name(name),_age(age){}<br><br>private:<br><br>static const int SIZE=100;<br><br>string courses[SIZE];<br><br>string _name;<br><br>int _age;<br><br>}<br><br>static const可以直接初始化<br><br>2.const对象<br><br>const Student stu =Student();const对象只能调用const方法<br><br>3.const方法<br><br>如果某个没有修改这个类,这个方法可以声明成const方法,反过来,如果一个函数声明称const,那么它就不能修改这个类。<br><br><br><p class="MsoNormal" style="text-align: left;" align="left"><span style="font-size: 11pt; font-family: 宋体; color: black;"></span><span style="font-size: 11pt; font-family: &quot;Courier New&quot;;" lang="EN-US"><o:p></o:p></span></p>]]></description>
</item><item>
<title><![CDATA[C/C++复习笔记 一]]></title>
<link>http://blogger.org.cn/blog/more.asp?name=mixianger&amp;id=11210</link>
<author>mixianger</author>
<pubDate>2006/1/15 16:35:13</pubDate>
<description><![CDATA[<a><span style="font-weight: bold;">Variable(变量)</span><br><br>用来存储数据的可变对象，在C/C++中当定义一个变量之后编译器就会给这个变量分配一定的存储空间。<br><br><span style="font-weight: bold;">Function(函数)</span><br><br>创建一个函数<br><br>type functionName(type var... ){<br><br>...<br><br>(return var；)<br><br>}<br><br><span style="font-weight: bold;">函数返回值：</span><br><br>第一type是函数的返回值可以是任何内建类型(int,float)，或者自定义类型(strut,class)<br><br>也可以是void即不会返回任何值。<br><br><span style="font-weight: bold;">函数参数列表：</span><br><br>第二个type 以及后面的var 就是函数的参数列表。<br><br>在c中当参数传递一般认为有两种形式，传值和传值指针。在C++中除了以上两种形式以外还有一种传引用(reference)。你可以把reference看成是一种安全的指针类型。<br><br>&nbsp;<br><span style="font-weight: bold;">流程控制</span><br><br>1.if else<br><br>2.switch-case<br><br>3.for<br><br>4.while<br><br>5.do-while<br><br>6.goto<br><br>&nbsp;<br>1和2是条件控制，3，4，5是迭代(iterator)控制(循环),6无条件跳转(建议不使用)<br><br><span style="font-weight: bold;">break 和continue关键字</span><br>break是用于跳出整个循环，continue是用于跳过某次循环<br><br>比如说：<br><br>for(int i=0;i&lt;10;i++){<br><br>if(i%2==0)<br><br>continue;//如果i是0或者偶数跳过<br><br>else<br><br>print(i);//如果是奇数打印这个数<br><br>}<br><br>out:0,2,4,6,8<br><br>&nbsp;<br>int i=10;<br><br>while(true){<br><br>if(i==7){<br><br>break;//跳出循环<br><br>}else{<br><br>print(i);<br><br>}<br><br>i--;<br><br>}<br><br>out:10,9,8<br><br>&nbsp;<br><br>&nbsp;<br><span style="font-weight: bold;">struct以及class</span><br><br>在C/C++中定义一个结构体struct<br><br>typedef strut stu{//定义结构体<br><br>long stuID;<br><br>string name;<br><br>string dep;<br><br>char sex;<br><br>int age;<br><br>}Student；//结构体别名<br><br>这里的typedef就是给这个这个结构体stu起一个别名叫student<br><br style="font-weight: bold;"><span style="font-weight: bold;">关于边界对齐</span><br><br>对于struct内存分配，编译器会对struct中成员进行边界对齐，例如：上例中int age的内存起始地址必须是sizeof(int)的正整倍数，因此会对char sex后面会空若干个字符，如果使用sizeof(Student)时，得到数字大于所有字段加起来的值。因此,在写strut时应该尽量将同类型的变量放在一起,特别是char类型,这样可以节省空间。<br><br><span style="font-weight: bold;">关于struct的自引用</span><br><br>stuct在建立时如果要引用自己，比如：<br><br>typedef struct stu{//定义结构体<br><br>long stuID;<br><br>string name;<br><br>string dep;<br><br>char sex;<br><br>int age;<br>//!struct stu monitor 编译错误，因为struct没有建立，这样就陷入循环中<br><span style="color: rgb(153, 0, 0);">struct stu* monitor;//要这样使用</span><br>}Student；<br><br><br><span style="font-weight: bold;">&nbsp;</span><br style="font-weight: bold;"><span style="font-weight: bold;">class的声明</span><br><br>在C++中只要定义一个变量,编译器就会为这个变量分配空间,可以使用new关键字在堆里申请空间.<br><br>ClassName obj;//在栈里分配,程序结束后会被收回<br><br>和ClassName obj2 = new ClassName();都会被分配空间,如果不使用delete是不会被收回的,内存泄露memory leak<br><br><br><br><span style="font-weight: bold;">声明以及定义</span><br><br>声明一个名称，告诉编译器这个名称，定义就是告诉编译器分配制定的存储空间，对于变量来说，分配的是这个变量存储数据的空间，对于函数来说是一个指向存储着函数代码的空间的函数指针<br><br>在头文件中声明:<br><br>#ifndef HEADFILENAME_H_<br><br>#define HEADFILENAME_H_<br><br>...<br><br>&nbsp;<br><br>#endif //HEADFILENAME_H_<br><br><br><br>使用构造函数(Constructor)和析构函数进行初始化和清理<br><br>class Student{<br><br>public :<br><br>Student();//缺省构造函数<br><br>Student(string name);//自定义构造函数<br><br>Student(Student&amp;);//拷贝构造函数<br><br>~Student();<br><br>void setName();<br><br>string getName();<br><br>private:<br><br>string _name;<br><br>};<br><br>&nbsp;<br><br>构造函数和析构函数的调用不依赖于程序员，编译器<span style="font-weight: bold;">自动调用</span><br><br>构造函数用于初始化一些变量，而析构函数用于清理诸如网络连接，屏幕显示(以及该对象执行过程中所使用的某些对象，比如用new产生的，在这里可以用delete清除)等等。<br><br>1.缺省构造函数<br><br>不带参数的构造函数<br><br>2.拷贝构造函数<br><br>参数为自身引用的构造函数<br><br>&nbsp;<br><span style="color: rgb(153, 0, 0);">NOTE*:析构函数不会自动清理自身内存（他不是垃圾回收器grabage collector）。</span><br><br>&nbsp;<br><br><span style="font-weight: bold;">函数参数传递--传指针引用以及传值</span><br><br>在C++中一直都有传值和传指针的说法。<br><br>C++中的指针<br><br>指针的定义，Type* p；<br><br>string* p; Student* stu;等等，所谓指针就是指向特定存储空间的一个变量。<br><br>比如说 string str = “Aelx Loves Chris!”;<br><br>string* p = &amp;str;<br><br>&nbsp;<br><br><span style="font-weight: bold;">C++中的引用</span><br><br>引用的定义,引用必须指向某个值，Type&amp; r= variable;//或者是某个常量。<br><br>比如说： int&amp; r = 12; Student&amp; stu =student;<br><br>举个错误例子 string&amp; s=NULL;//!Error<br><br>C++中的引用可以看成是变量的别名,这就意味着,如果任何一个改变了,两个就都改变了<br><br>比如说:交换两个值<br><br>void changeByPointer(string* str1,string* str2){//传指针<br><br>string t;<br><br>t=*str1; //把str1所指向的空间的值付给t<br><br>*str1= *str2;//把str2错指向的空间的内容放入str1的空间<br><br>*str2= t;<br><br>}<br><br>void changeByReference(string&amp; str1,string&amp; str2){//传引用<br><br>string t=str1;<br><br>str1=str2;<br><br>str2=t;<br><br>}<br><br>&nbsp;<br><br>void changeByValue(string str1,string str2){//传值，交换会成功，但不会影响外部<br><br>string t =str1;<br><br>str1=str2;str2=t;<br><br>}<br><br>&nbsp;<br>参数传递过程中，传引用和传值本质上都是对该存储区域的直接操作，而传值，在传递过程中是，会在堆栈中建立一个区域，存放参数的副本，在函数内部对这些副本的操作，不会影响到外部，当函数运行结束后，这些副本都回失效。<br><br><br><br></a>]]></description>
</item><item>
<title><![CDATA[一天的工作]]></title>
<link>http://blogger.org.cn/blog/more.asp?name=mixianger&amp;id=11129</link>
<author>mixianger</author>
<pubDate>2006/1/9 18:12:57</pubDate>
<description><![CDATA[<font size="4"></font><a><font size="4">　今天头儿终于给了点事情做~现在对我来说画页面也是一种幸福~<br>休息了半年了，一直在等项目下来，可就是遥遥无期，昨天看了头儿的blog，上面看到他也再急，香港那边在忙什么？<br>&nbsp;&nbsp;&nbsp; 本来以为刚来公司进入这个大项目可以很好的获得一些大项目经验（毕竟编码经验是时间问题），到现在个人的得到的结论是，乱，非常乱~各个方面的协调好像也是很大的问题……<br><br>&nbsp;&nbsp; 公司有时间有钱等项目，我有什么，呵呵，所以还是得去学习~</font><br></a>]]></description>
</item><item>
<title><![CDATA[java写的几种排序算法]]></title>
<link>http://blogger.org.cn/blog/more.asp?name=mixianger&amp;id=11064</link>
<author>mixianger</author>
<pubDate>2006/1/7 19:48:16</pubDate>
<description><![CDATA[<font size="3"><a>public class MySort{<br>&nbsp;&nbsp; &nbsp;public static void main(String[] args){<br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; int[] x={0,2,8,5,7,1,4};<br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; //popSort(x);<br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; selectSort(x);<br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; for(int i=0;i&lt;x.length;i++){<br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; System.out.print(x[i]);<br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp; &nbsp;}<br>&nbsp;&nbsp; &nbsp;public static void popSort(int[] x){<br>&nbsp;&nbsp; &nbsp; &nbsp;&nbsp;&nbsp; for(int i=0;i&lt;x.length;i++){<br>&nbsp;&nbsp; &nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; for(int j=i;j&gt;0&amp;&amp;x[j]&lt;x[j-1];j--){<br>&nbsp;&nbsp; &nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; swap(x,j-1,j);<br>&nbsp;&nbsp; &nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp; &nbsp; &nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp; &nbsp;}<br>&nbsp;&nbsp; &nbsp;public static void insertSort(int[] x){<br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; for(int i=1;i&lt;x.length;i++){<br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; if(x[i]&lt;x[i-1]){//find postion<br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; int t =x[i];<br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; int j=i;<br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; do{//move<br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; x[j]=x[j-1];<br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; j--;<br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }while(x[j]&gt;t);<br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; x[j+1]=t;//insert<br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp; &nbsp;}<br>&nbsp;&nbsp; &nbsp;private static void selectSort(int[] x){<br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; int j=0;int i=0;<br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; for(i=0;i&lt;x.length;i++){<br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; for(j=i+1;j&lt;x.length;j++){<br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; if(x[j]&lt;x[i]){<br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; swap(x,i,j);<br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp; &nbsp;}<br><br>&nbsp;&nbsp; &nbsp;private static void shellSort(int[] x){<br><br>&nbsp;&nbsp; &nbsp;}<br>&nbsp;&nbsp; &nbsp;private static void swap(int[]x ,int i, int j){<br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; int t = x[i];<br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; x[i]=x[j];<br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; x[j]=t;<br>&nbsp;&nbsp; &nbsp;}<br>}</a></font>]]></description>
</item>
</channel>
</rss>