﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>C++博客-壮志未酬誓不休</title><link>http://www.cppblog.com/xujiaona/</link><description /><language>zh-cn</language><lastBuildDate>Tue, 14 Apr 2026 23:09:10 GMT</lastBuildDate><pubDate>Tue, 14 Apr 2026 23:09:10 GMT</pubDate><ttl>60</ttl><item><title>vi命令综述</title><link>http://www.cppblog.com/xujiaona/archive/2007/07/11/27865.html</link><dc:creator>Xu JiaoNa</dc:creator><author>Xu JiaoNa</author><pubDate>Wed, 11 Jul 2007 05:49:00 GMT</pubDate><guid>http://www.cppblog.com/xujiaona/archive/2007/07/11/27865.html</guid><wfw:comment>http://www.cppblog.com/xujiaona/comments/27865.html</wfw:comment><comments>http://www.cppblog.com/xujiaona/archive/2007/07/11/27865.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/xujiaona/comments/commentRss/27865.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/xujiaona/services/trackbacks/27865.html</trackback:ping><description><![CDATA[<br><span style="FONT-SIZE: 14pt"><strong>vi命令</strong></span><br><br>转自：<a href="http://www.x5dj.com/userforum/00147333/00261112.shtml"><font color=#009933>http://www.x5dj.com/userforum/00147333/00261112.shtml</font></a><br><br>　　vi filename :打开或新建文件，并将光标置于第一行首 <br>　　vi +n filename ：打开文件，并将光标置于第n行首 <br>　　vi + filename ：打开文件，并将光标置于最后一行首 <br>　　vi +/pattern filename：打开文件，并将光标置于第一个与pattern匹配的串处 <br>　　vi -r filename ：在上次正用vi编辑时发生系统崩溃，恢复filename <br>　　vi filename....filename ：打开多个文件，依次进行编辑 <br>　　<br>　　移动光标类命令 <br>　　h ：光标左移一个字符 <br>　　l ：光标右移一个字符 <br>　　space：光标右移一个字符 <br>　　Backspace：光标左移一个字符 <br>　　k或Ctrl+p：光标上移一行 <br>　　j或Ctrl+n ：光标下移一行 <br>　　Enter ：光标下移一行 <br>　　w或W ：光标右移一个字至字首 <br>　　b或B ：光标左移一个字至字首 <br>　　e或E ：光标右移一个字至字尾 <br>　　) ：光标移至句尾 <br>　　( ：光标移至句首 <br>　　}：光标移至段落开头 <br>　　{：光标移至段落结尾 <br>　　nG：光标移至第n行首 <br>　　n+：光标下移n行 <br>　　n-：光标上移n行 <br>　　n$：光标移至第n行尾 <br>　　H ：光标移至屏幕顶行 <br>　　M ：光标移至屏幕中间行 <br>　　L ：光标移至屏幕最后行 <br>　　0：（注意是数字零）光标移至当前行首 <br>　　$：光标移至当前行尾 <br>　　<br>　　屏幕翻滚类命令 <br>　　Ctrl+u：向文件首翻半屏 <br>　　Ctrl+d：向文件尾翻半屏 <br>　　Ctrl+f：向文件尾翻一屏 <br>　　Ctrl＋b；向文件首翻一屏 <br>　　nz：将第n行滚至屏幕顶部，不指定n时将当前行滚至屏幕顶部。 <br>　　<br>　　插入文本类命令 <br>　　i ：在光标前 <br>　　I ：在当前行首 <br>　　a：光标后 <br>　　A：在当前行尾 <br>　　o：在当前行之下新开一行 <br>　　O：在当前行之上新开一行 <br>　　r：替换当前字符 <br>　　R：替换当前字符及其后的字符，直至按ESC键 <br>　　s：从当前光标位置处开始，以输入的文本替代指定数目的字符 <br>　　S：删除指定数目的行，并以所输入文本代替之 <br>　　ncw或nCW：修改指定数目的字 <br>　　nCC：修改指定数目的行 <br>　　<br>　　删除命令 <br>　　ndw或ndW：删除光标处开始及其后的n-1个字 <br>　　do：删至行首 <br>　　d$：删至行尾 <br>　　ndd：删除当前行及其后n-1行 <br>　　x或X：删除一个字符，x删除光标后的，而X删除光标前的 <br>　　Ctrl+u：删除输入方式下所输入的文本 <br>　　<br>　　搜索及替换命令 <br>　　/pattern：从光标开始处向文件尾搜索pattern <br>　　?pattern：从光标开始处向文件首搜索pattern <br>　　n：在同一方向重复上一次搜索命令 <br>　　N：在反方向上重复上一次搜索命令 <br>　　：s/p1/p2/g：将当前行中所有p1均用p2替代 <br>　　：n1,n2s/p1/p2/g：将第n1至n2行中所有p1均用p2替代 <br>　　：g/p1/s//p2/g：将文件中所有p1均用p2替换 <br>　　<br>　　选项设置 <br>　　all：列出所有选项设置情况 <br>　　term：设置终端类型 <br>　　ignorance：在搜索中忽略大小写 <br>　　list：显示制表位(Ctrl+I)和行尾标志（$) <br>　　number：显示行号 <br>　　report：显示由面向行的命令修改过的数目 <br>　　terse：显示简短的警告信息 <br>　　warn：在转到别的文件时若没保存当前文件则显示NO write信息 <br>　　nomagic：允许在搜索模式中，使用前面不带&#8220;\&#8221;的特殊字符 <br>　　nowrapscan：禁止vi在搜索到达文件两端时，又从另一端开始 <br>　　mesg：允许vi显示其他用户用write写到自己终端上的信息 <br>　　<br>　　最后行方式命令 <br>　　：n1,n2 co n3：将n1行到n2行之间的内容拷贝到第n3行下 <br>　　：n1,n2 m n3：将n1行到n2行之间的内容移至到第n3行下 <br>　　：n1,n2 d ：将n1行到n2行之间的内容删除 <br>　　：w ：保存当前文件 <br>　　：e filename：打开文件filename进行编辑 <br>　　：x：保存当前文件并退出 <br>　　：q：退出vi <br>　　：q!：不保存文件并退出vi <br>　　：!command：执行shell命令command <br>　　：n1,n2 w!command：将文件中n1行至n2行的内容作为command的输入并执行之，若不指定n1，n2，则表示将整个文件内容作为command的输入 <br>　　：r!command：将命令command的输出结果放到当前行 <br>　　<br>　　寄存器操作 <br>　　"?nyy：将当前行及其下n行的内容保存到寄存器？中，其中?为一个字母，n为一个数字 <br>　　"?nyw：将当前行及其下n个字保存到寄存器？中，其中?为一个字母，n为一个数字 <br>　　"?nyl：将当前行及其下n个字符保存到寄存器？中，其中?为一个字母，n为一个数字 <br>　　"?p：取出寄存器？中的内容并将其放到光标位置处。这里？可以是一个字母，也可以是一个数字 <br>　　ndd：将当前行及其下共n行文本删除，并将所删内容放到1号删除寄存器中。<br><br><br><a href="http://blog.donews.com/xinhe/articles/54286.aspx"><font color=#000080>VI高级命令集锦</font></a><br><br>转载自：<a href="http://blog.donews.com/xinhe/articles/54286.aspx">http://blog.donews.com/xinhe/articles/54286.aspx</a><br><br><span class=postbody><font size=2>鉴于大家在使用VI 的时候有一定的陌生，在这里借花献佛，希望对大家学习UNIX有所帮助，并希望大家能结合使用unix的心得体会对这些经验进行进一步的扩展。 <br><br>1.交换两个字符位置 <br>xp <br><br>2.上下两行调换 <br>ddp <br><br>3.把文件内容反转 <br>:g/^/m0/ (未通过) <br><br>4.上下两行合并 <br>J <br><br>5.删除所有行 <br>dG <br><br>6.从当前位置删除到行尾 <br>d$ <br><br>7.从当前位置复制到行尾 <br>y$ 如果要粘贴到其他地方 p 就可以了 <br><br>由于vi 是建立在 EX 上的 所以 当键入 : 时就来到了 EX 命令状态 <br>8. <br>:ab string strings <br>例如 ":ab usa United States of America" , <br>当你在文见里插入 usa 时 <br>United States of America 就蹦出来了 <br><br>9. <br>:map keys new_seq <br>定义你当前 键盘命令 <br><br>10. <br>:set [all] <br>vi or ex 的编辑状态 <br>如 显示每行 :set nu <br><br>11. <br>在命令状态下，nyy表示拷贝从光标行起的下n行内容，p表示paste,可刚复制的内容粘贴在光标处的 <br>下面。 <br><br>12. <br>单个字符替换用r，覆盖多个字符用R，用多个字符替换一个字符用s，整行替换用S <br><br>13. <br>:%s/old_word/new_word/g <br>这个指令是于在整个文件中替换特定字符串 <br><br>14.光标控制 <br>k:上移 nk 上移n行 <br>j:下移 nj 下移n行 <br><br>将光标移到第n行，按下 mk <br>将光标移到第m行，按下 "ay'k <br>即将第n到m的行存到a寄存器，以此类推，b，c........寄存器等 <br>这样就可以将你常用的需要复用的内容粘贴到不同的寄存器中以备用 <br>想粘贴到某处，直接将光标移到某地，按下 &#8216;ap 即可,以此类推，b，c........寄存器等 <br><br>在当前屏幕中 <br>H 跳到第一行 <br>M 跳到中间一行 <br>L 跳到最后一行 <br><br>15. <br>表8-2 删除命令 <br>删除命令操作 <br>d l 删除当前字符（与x命令功能相同） <br>d 0 删除到某一行的开始位置 <br>d ^ 删除到某一行的第一个字符位置（不包括空格或TA B字符） <br>d w 删除到某个单词的结尾位置 <br>d 3 w 删除到第三个单词的结尾位置 <br>d b 删除到某个单词的开始位置 <br>d W 删除到某个以空格作为分隔符的单词的结尾位置 <br>d B 删除到某个以空格作为分隔符的单词的开始位置 <br>d 7 B 删除到前面7个以空格作为分隔符的单词的开始位置 <br>d） 删除到某个语句的结尾位置 <br>d 4） 删除到第四个语句的结尾位置 <br>d（ 删除到某个语句的开始位置 <br>d } 删除到某个段落的结尾位置 <br>d { 删除到某个段落的开始位置 <br>d 7 { 删除到当前段落起始位置之前的第7个段落位置 <br>d d 删除当前行 <br>d /t e x t 删除从文本中出现&#8220; t e x t&#8221;中所指定字样的位置，一直向前直到下一个该字样所出现的 <br>位置（但不包括该字样）之间的内容 <br>d fc 删除从文本中出现字符&#8220;c&#8221;的位置，一直向前直到下一个该字符所出现的位置（包括 <br>该字符）之间的内容 <br>d tc 删除当前行直到下一个字符&#8220; c&#8221;所出现位置之间的内容 <br>D 删除到某一行的结尾 <br>d $ 删除到某一行的结尾 <br>5 d d 删除从当前行所开始的5行内容 <br>d L 删除直到屏幕上最后一行的内容 <br>d H 删除直到屏幕上第一行的内容 <br>d G 删除直到工作缓存区结尾的内容 <br>d 1 G 删除直到工作缓存区开始的内容 <br><br>修改命令操作 <br>c l 更改当前字符 <br>c w 修改到某个单词的结尾位置 <br>c 3 w 修改到第三个单词的结尾位置 <br>c b 修改到某个单词的开始位置 <br>c W 修改到某个以空格作为分隔符的单词的结尾位置 <br>c B 修改到某个以空格作为分隔符的单词的开始位置 <br>c 7 B 修改到前面7个以空格作为分隔符的单词的开始位置 <br>c 0 修改到某行的结尾位置 <br>c） 修改到某个语句的结尾位置 <br>c 4） 修改到第四个语句的结尾位置 <br>c（ 修改到某个语句的开始位置 <br>c } 修改到某个段落的结尾位置 <br>c { 修改到某个段落的开始位置 <br>c 7 { 修改到当前段落起始位置之前的第7个段落位置 <br>c tc 修改当前行直到下一个字符c所出现位置之间的内容 <br>C 修改到某一行的结尾 <br>c c 修改当前行 <br>5 c c 修改从当前行所开始的5行内容 <br><br>.重复上一次修改！ <br><br><br>表8-4 替换命令 <br>替换命令操作 <br>s 将当前字符替换为一个或多个字符 <br>S 将当前行替换为一个或多个字符 <br>5 s 将从当前字符开始的5个字符替换为一个或多个字符 <br><br>vi替换使用规则： <br>:g/s1/s/s2/s3/g <br>第一个g表示对每一个包括s1的行都进行替换，第二个g表示对每一行包括s1的行所有的s2都用s3替换 <br>s表示替换，s2是要被替换的字符串，他可以和s1相同（如果相同的话用//代替），s3是替换字符串 <br><br>16. <br>fx <br>往右移动到 x 字符上 <br>Fx <br>往左移动到 x 字符上 <br>tx <br>往右移动到 x 字符前 <br>Tx <br>往左移动到 x 字符后 <br>（注意：以上四个命令中，其中x是键入的字符） <br>; 分号，配合 f 和 t 使用，重复一次 <br>, 逗号，配合 f 和 t 使用，反方向重复一次 <br><br><br><br>17. vi 环境选项 Solaris ksh <br><br>noautoindent nomodelines noshowmode <br>autoprint nonumber noslowopen <br>noautowrite nonovice tabstop=8 <br>nobeautify nooptimize taglength=0 <br>directory=/var/tmp paragraphs=IPLPPPQPP LIpplpipnpbtags=tags /usr/lib/tags <br>noedcompatible prompt tagstack <br>noerrorbells noreadonly term=vt100 <br>noexrc redraw noterse <br>flash remap timeout <br>hardtabs=8 report=5 ttytype=vt100 <br>noignorecase scroll=11 warn <br>nolisp sections=NHSHH HUuhsh+c window=23 <br>nolist shell=/bin/ksh wrapscan <br>magic shiftwidth=8 wrapmargin=0 <br>mesg noshowmatch nowriteany <br><br><br>For C-Shell: <br>setenv EXINIT "set nu" <br>For Bourne or Korn Shell: <br>EXINIT="set nu"; export EXINIT <br>For Korn Shell Only (alternate method): <br>typeset -x EXINIT="set nu" <br>在 .profile 里设置 vi 的环境选项 , 以上均测试过 <br><br><br>18.标记文本 <br>　　mchar　　 用字母char标记当前光标的位置 <br>　　`char 　　移至char所标记处 <br>　　'char　　 移至char标记所在行的开头处 <br>　　"　　　　 移至当前行上一次所在位置（在光标移动之后）――一个双引号 <br>　　''　　　　移至当前行上第一次所在位置的行的开头处(在光标移动之后)――两个单引号 <br><br>19. <br>同时vi多个文件时，CTRL-SHIFT-6回到上一个文件，在本次vi的文件和上次vi的文件之间切换。 <br>但是我发现一个BUG：在用CTRL-SHIFT-6切换到上一个文件后，用:args查看多文件vi状态时， <br>屏幕底部仍然显示目前vi的是刚才的文件。 <br>(在HP-UX,Solaris,AIX上通过) <br><br>也可以使用: <br>:e# <br>进行切换 <br><br>20. <br>sco 下VI 要在文本前同样的字符加用 <br>%s/^/要加的内容/g 要在文本后同样的字符加 <br>%s/$/要加的内容/g <br><br>21. <br>如何去掉文本中的 ^M 硬回车？不必用binary传回去再ascii传回来的方式，用shell或者unix语句实现。 <br>cat filename |tr -d '\015' &gt;newfile <br>不同的unix系统还存在一些其他不同的命令,如:doscp <br>sed 也可以实现这个功能. <br>dos2unix filename filename2 <br>反之 <br>unix2dos filename filename2 <br><br>在vi 中用:$s/^M//g <br>^是crtl-V crtl-M <br><br><br>22.如何在&#8220;unix命令行&#8221;下将一个文件的某字符串用另一个串换掉 <br>sed 's/string1/string2/gp' file1 &gt; file2 <br><br><br>23.将/etc/hosts下所有的地址都ping 2次 <br>1 #/usr/bin/sh <br>2 #grad /etc/hosts and ping each address <br>3 cat /etc/hosts|grep -v '^#' | while read LINE <br>4 do <br>5 ADDR=`awk '{print $1}'` <br>6 for MACHINE in $ADDR <br>7 do <br>8 ping $MACHINE -n 2 <br>9 done <br>10 done</font></span><br><br>
<p id=TBPingURL>Trackback: http://tb.donews.net/TrackBack.aspx?PostId=54286</p>
<img src ="http://www.cppblog.com/xujiaona/aggbug/27865.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/xujiaona/" target="_blank">Xu JiaoNa</a> 2007-07-11 13:49 <a href="http://www.cppblog.com/xujiaona/archive/2007/07/11/27865.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>字符串函数详解</title><link>http://www.cppblog.com/xujiaona/archive/2007/07/11/27862.html</link><dc:creator>Xu JiaoNa</dc:creator><author>Xu JiaoNa</author><pubDate>Wed, 11 Jul 2007 04:59:00 GMT</pubDate><guid>http://www.cppblog.com/xujiaona/archive/2007/07/11/27862.html</guid><wfw:comment>http://www.cppblog.com/xujiaona/comments/27862.html</wfw:comment><comments>http://www.cppblog.com/xujiaona/archive/2007/07/11/27862.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/xujiaona/comments/commentRss/27862.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/xujiaona/services/trackbacks/27862.html</trackback:ping><description><![CDATA[<p>转载自：<a href="http://zhanglong2004.spaces.live.com/?owner=1">http://zhanglong2004.spaces.live.com/?owner=1</a><br><br>void *memset(void *dest, int c, size_t count); <br>将dest前面count个字符置为字符c. </p>
<p>返回dest的值. </p>
<p><br>void *memmove(void *dest, const void *src, size_t count); </p>
<p>从src复制count字节的字符到dest. 如果src和dest出现重叠, 函数会自动处理. </p>
<p>返回dest的值. </p>
<p><br>void *memcpy(void *dest, const void *src, size_t count); </p>
<p>从src复制count字节的字符到dest. 与memmove功能一样, 只是不能处理src和dest出现重叠. </p>
<p>返回dest的值. </p>
<p><br>void *memchr(const void *buf, int c, size_t count); </p>
<p>在buf前面count字节中查找首次出现字符c的位置. 找到了字符c或者已经搜寻了count个字节, 查找即停止. </p>
<p>操作成功则返回buf中首次出现c的位置指针, 否则返回NULL. </p>
<p><br>void *_memccpy(void *dest, const void *src, int c, size_t count); </p>
<p>从src复制0个或多个字节的字符到dest. 当字符c被复制或者count个字符被复制时, 复制停止. </p>
<p>如果字符c被复制, 函数返回这个字符后面紧挨一个字符位置的指针. 否则返回NULL. </p>
<p><br>int memcmp(const void *buf1, const void *buf2, size_t count); </p>
<p>比较buf1和buf2前面count个字节大小. </p>
<p>返回值&lt; 0, 表示buf1小于buf2; <br>返回值为0, 表示buf1等于buf2; <br>返回值&gt; 0, 表示buf1大于buf2. </p>
<p><br>int memicmp(const void *buf1, const void *buf2, size_t count); </p>
<p>比较buf1和buf2前面count个字节. 与memcmp不同的是, 它不区分大小写. </p>
<p>返回值同上. </p>
<p><br>size_t strlen(const char *string); </p>
<p>获取字符串长度, 字符串结束符NULL不计算在内. </p>
<p>没有返回值指示操作错误. </p>
<p><br>char *strrev(char *string); </p>
<p>将字符串string中的字符顺序颠倒过来. NULL结束符位置不变. </p>
<p>返回调整后的字符串的指针. </p>
<p><br>char *_strupr(char *string); </p>
<p>将string中所有小写字母替换成相应的大写字母, 其它字符保持不变. </p>
<p>返回调整后的字符串的指针. </p>
<p><br>char *_strlwr(char *string); </p>
<p>将string中所有大写字母替换成相应的小写字母, 其它字符保持不变. </p>
<p>返回调整后的字符串的指针. </p>
<p><br>char *strchr(const char *string, int c); </p>
<p>查找字符c在字符串string中首次出现的位置, NULL结束符也包含在查找中. </p>
<p>返回一个指针, 指向字符c在字符串string中首次出现的位置, 如果没有找到, 则返回NULL. </p>
<p><br>char *strrchr(const char *string, int c); </p>
<p>查找字符c在字符串string中最后一次出现的位置, 也就是对string进行反序搜索, 包含NULL结束符. </p>
<p>返回一个指针, 指向字符c在字符串string中最后一次出现的位置, 如果没有找到, 则返回NULL. </p>
<p><br>char *strstr(const char *string, const char *strSearch); </p>
<p>在字符串string中查找strSearch子串. </p>
<p>返回子串strSearch在string中首次出现位置的指针. 如果没有找到子串strSearch, 则返回NULL. 如果子串strSearch为空串, 函数返回string值. </p>
<p><br>char *strdup(const char *strSource); </p>
<p>函数运行中会自己调用malloc函数为复制strSource字符串分配存储空间, 然后再将strSource复制到分配到的空间中. 注意要及时释放这个分配的空间. </p>
<p>返回一个指针, 指向为复制字符串分配的空间; 如果分配空间失败, 则返回NULL值. </p>
<p><br>char *strcat(char *strDestination, const char *strSource); </p>
<p>将源串strSource添加到目标串strDestination后面, 并在得到的新串后面加上NULL结束符. 源串strSource的字符会覆盖目标串strDestination后面的结束符NULL. 在字符串的复制或添加过程中没有溢出检查, 所以要保证目标串空间足够大. 不能处理源串与目标串重叠的情况. </p>
<p>函数返回strDestination值. </p>
<p><br>char *strncat(char *strDestination, const char *strSource, size_t count); </p>
<p>将源串strSource开始的count个字符添加到目标串strDest后. 源串strSource的字符会覆盖目标串strDestination后面的结束符NULL. 如果count大于源串长度, 则会用源串的长度值替换count值. 得到的新串后面会自动加上NULL结束符. 与strcat函数一样, 本函数不能处理源串与目标串重叠的情况. </p>
<p>函数返回strDestination值. </p>
<p><br>char *strcpy(char *strDestination, const char *strSource); </p>
<p>复制源串strSource到目标串strDestination所指定的位置, 包含NULL结束符. 不能处理源串与目标串重叠的情况. </p>
<p>函数返回strDestination值. </p>
<p><br>char *strncpy(char *strDestination, const char *strSource, size_t count); </p>
<p>将源串strSource开始的count个字符复制到目标串strDestination所指定的位置. 如果count值小于或等于strSource串的长度, 不会自动添加NULL结束符目标串中, 而count大于strSource串的长度时, 则将strSource用NULL结束符填充补齐count个字符, 复制到目标串中. 不能处理源串与目标串重叠的情况. </p>
<p>函数返回strDestination值. </p>
<p><br>char *strset(char *string, int c); </p>
<p>将string串的所有字符设置为字符c, 遇到NULL结束符停止. </p>
<p>函数返回内容调整后的string指针. </p>
<p><br>char *strnset(char *string, int c, size_t count); </p>
<p>将string串开始count个字符设置为字符c, 如果count值大于string串的长度, 将用string的长度替换count值. </p>
<p>函数返回内容调整后的string指针. </p>
<p><br>size_t strspn(const char *string, const char *strCharSet); </p>
<p>查找任何一个不包含在strCharSet串中的字符 (字符串结束符NULL除外) 在string串中首次出现的位置序号. </p>
<p>返回一个整数值, 指定在string中全部由characters中的字符组成的子串的长度. 如果string以一个不包含在strCharSet中的字符开头, 函数将返回0值. </p>
<p><br>size_t strcspn(const char *string, const char *strCharSet); </p>
<p>查找strCharSet串中任何一个字符在string串中首次出现的位置序号, 包含字符串结束符NULL. </p>
<p>返回一个整数值, 指定在string中全部由非characters中的字符组成的子串的长度. 如果string以一个包含在strCharSet中的字符开头, 函数将返回0值. </p>
<p><br>char *strspnp(const char *string, const char *strCharSet); </p>
<p>查找任何一个不包含在strCharSet串中的字符 (字符串结束符NULL除外) 在string串中首次出现的位置指针. </p>
<p>返回一个指针, 指向非strCharSet中的字符在string中首次出现的位置. </p>
<p><br>char *strpbrk(const char *string, const char *strCharSet); </p>
<p>查找strCharSet串中任何一个字符在string串中首次出现的位置, 不包含字符串结束符NULL. </p>
<p>返回一个指针, 指向strCharSet中任一字符在string中首次出现的位置. 如果两个字符串参数不含相同字符, 则返回NULL值. </p>
<p><br>int strcmp(const char *string1, const char *string2); </p>
<p>比较字符串string1和string2大小. </p>
<p>返回值&lt; 0, 表示string1小于string2; <br>返回值为0, 表示string1等于string2; <br>返回值&gt; 0, 表示string1大于string2. </p>
<p><br>int stricmp(const char *string1, const char *string2); </p>
<p>比较字符串string1和string2大小，和strcmp不同, 比较的是它们的小写字母版本. </p>
<p>返回值与strcmp相同. </p>
<p><br>int strcmpi(const char *string1, const char *string2); </p>
<p>等价于stricmp函数, 只是提供一个向后兼容的版本. </p>
<p><br>int strncmp(const char *string1, const char *string2, size_t count); </p>
<p>比较字符串string1和string2大小，只比较前面count个字符. 比较过程中, 任何一个字符串的长度小于count, 则count将被较短的字符串的长度取代. 此时如果两串前面的字符都相等, 则较短的串要小. </p>
<p>返回值&lt; 0, 表示string1的子串小于string2的子串; <br>返回值为0, 表示string1的子串等于string2的子串; <br>返回值&gt; 0, 表示string1的子串大于string2的子串. </p>
<p><br>int strnicmp(const char *string1, const char *string2, size_t count); </p>
<p>比较字符串string1和string2大小，只比较前面count个字符. 与strncmp不同的是, 比较的是它们的小写字母版本. </p>
<p>返回值与strncmp相同. </p>
<p><br>char *strtok(char *strToken, const char *strDelimit); </p>
<p>在strToken 串中查找下一个标记, strDelimit字符集则指定了在当前查找调用中可能遇到的分界符. </p>
<p>返回一个指针, 指向在strToken中找到的下一个标记. 如果找不到标记, 就返回NULL值. 每次调用都会修改strToken内容, 用NULL字符替换遇到的每个分界符.<br></p>
<img src ="http://www.cppblog.com/xujiaona/aggbug/27862.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/xujiaona/" target="_blank">Xu JiaoNa</a> 2007-07-11 12:59 <a href="http://www.cppblog.com/xujiaona/archive/2007/07/11/27862.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>UNIX常用命令补充</title><link>http://www.cppblog.com/xujiaona/archive/2007/07/11/27849.html</link><dc:creator>Xu JiaoNa</dc:creator><author>Xu JiaoNa</author><pubDate>Wed, 11 Jul 2007 02:16:00 GMT</pubDate><guid>http://www.cppblog.com/xujiaona/archive/2007/07/11/27849.html</guid><wfw:comment>http://www.cppblog.com/xujiaona/comments/27849.html</wfw:comment><comments>http://www.cppblog.com/xujiaona/archive/2007/07/11/27849.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/xujiaona/comments/commentRss/27849.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/xujiaona/services/trackbacks/27849.html</trackback:ping><description><![CDATA[<br><span style="FONT-SIZE: 10pt"><br><br></span><span style="FONT-SIZE: 14pt"><strong>umask命令</strong></span><br><br>umask 指定所创建文件或目录的缺省权限<br>&gt;umask [-p] mode<br><br>&#8220;建立文档和目录时候的属性预设值&#8221;=<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 系统的&#8220;建立文档和目录时候的属性预设值&#8221;—（减去）unmask后面所带的设置值&nbsp;<br><br>&nbsp;&nbsp; 创建文件的属性预设值= 666 - mode<br>&nbsp;&nbsp; 创建目录的属性预设值= 777 - mode<br><br>&nbsp;&nbsp; umask命令只对当前shell环境起作用，如果要设成系统缺省权限，将umask命令添加到/home/***(user_name)/.bash_profile文件中。<br><br>&gt;umask -S<br>&nbsp;显示当前创建文件或目录的缺省权限 <br><br><span style="FONT-SIZE: 14pt"><strong>vi命令</strong></span><br><br>转自：<a href="http://www.x5dj.com/userforum/00147333/00261112.shtml">http://www.x5dj.com/userforum/00147333/00261112.shtml</a><br><br>　　vi filename :打开或新建文件，并将光标置于第一行首 <br>　　vi +n filename ：打开文件，并将光标置于第n行首 <br>　　vi + filename ：打开文件，并将光标置于最后一行首 <br>　　vi +/pattern filename：打开文件，并将光标置于第一个与pattern匹配的串处 <br>　　vi -r filename ：在上次正用vi编辑时发生系统崩溃，恢复filename <br>　　vi filename....filename ：打开多个文件，依次进行编辑 <br>　　<br>　　移动光标类命令 <br>　　h ：光标左移一个字符 <br>　　l ：光标右移一个字符 <br>　　space：光标右移一个字符 <br>　　Backspace：光标左移一个字符 <br>　　k或Ctrl+p：光标上移一行 <br>　　j或Ctrl+n ：光标下移一行 <br>　　Enter ：光标下移一行 <br>　　w或W ：光标右移一个字至字首 <br>　　b或B ：光标左移一个字至字首 <br>　　e或E ：光标右移一个字至字尾 <br>　　) ：光标移至句尾 <br>　　( ：光标移至句首 <br>　　}：光标移至段落开头 <br>　　{：光标移至段落结尾 <br>　　nG：光标移至第n行首 <br>　　n+：光标下移n行 <br>　　n-：光标上移n行 <br>　　n$：光标移至第n行尾 <br>　　H ：光标移至屏幕顶行 <br>　　M ：光标移至屏幕中间行 <br>　　L ：光标移至屏幕最后行 <br>　　0：（注意是数字零）光标移至当前行首 <br>　　$：光标移至当前行尾 <br>　　<br>　　屏幕翻滚类命令 <br>　　Ctrl+u：向文件首翻半屏 <br>　　Ctrl+d：向文件尾翻半屏 <br>　　Ctrl+f：向文件尾翻一屏 <br>　　Ctrl＋b；向文件首翻一屏 <br>　　nz：将第n行滚至屏幕顶部，不指定n时将当前行滚至屏幕顶部。 <br>　　<br>　　插入文本类命令 <br>　　i ：在光标前 <br>　　I ：在当前行首 <br>　　a：光标后 <br>　　A：在当前行尾 <br>　　o：在当前行之下新开一行 <br>　　O：在当前行之上新开一行 <br>　　r：替换当前字符 <br>　　R：替换当前字符及其后的字符，直至按ESC键 <br>　　s：从当前光标位置处开始，以输入的文本替代指定数目的字符 <br>　　S：删除指定数目的行，并以所输入文本代替之 <br>　　ncw或nCW：修改指定数目的字 <br>　　nCC：修改指定数目的行 <br>　　<br>　　删除命令 <br>　　ndw或ndW：删除光标处开始及其后的n-1个字 <br>　　do：删至行首 <br>　　d$：删至行尾 <br>　　ndd：删除当前行及其后n-1行 <br>　　x或X：删除一个字符，x删除光标后的，而X删除光标前的 <br>　　Ctrl+u：删除输入方式下所输入的文本 <br>　　<br>　　搜索及替换命令 <br>　　/pattern：从光标开始处向文件尾搜索pattern <br>　　?pattern：从光标开始处向文件首搜索pattern <br>　　n：在同一方向重复上一次搜索命令 <br>　　N：在反方向上重复上一次搜索命令 <br>　　：s/p1/p2/g：将当前行中所有p1均用p2替代 <br>　　：n1,n2s/p1/p2/g：将第n1至n2行中所有p1均用p2替代 <br>　　：g/p1/s//p2/g：将文件中所有p1均用p2替换 <br>　　<br>　　选项设置 <br>　　all：列出所有选项设置情况 <br>　　term：设置终端类型 <br>　　ignorance：在搜索中忽略大小写 <br>　　list：显示制表位(Ctrl+I)和行尾标志（$) <br>　　number：显示行号 <br>　　report：显示由面向行的命令修改过的数目 <br>　　terse：显示简短的警告信息 <br>　　warn：在转到别的文件时若没保存当前文件则显示NO write信息 <br>　　nomagic：允许在搜索模式中，使用前面不带&#8220;\&#8221;的特殊字符 <br>　　nowrapscan：禁止vi在搜索到达文件两端时，又从另一端开始 <br>　　mesg：允许vi显示其他用户用write写到自己终端上的信息 <br>　　<br>　　最后行方式命令 <br>　　：n1,n2 co n3：将n1行到n2行之间的内容拷贝到第n3行下 <br>　　：n1,n2 m n3：将n1行到n2行之间的内容移至到第n3行下 <br>　　：n1,n2 d ：将n1行到n2行之间的内容删除 <br>　　：w ：保存当前文件 <br>　　：e filename：打开文件filename进行编辑 <br>　　：x：保存当前文件并退出 <br>　　：q：退出vi <br>　　：q!：不保存文件并退出vi <br>　　：!command：执行shell命令command <br>　　：n1,n2 w!command：将文件中n1行至n2行的内容作为command的输入并执行之，若不指定n1，n2，则表示将整个文件内容作为command的输入 <br>　　：r!command：将命令command的输出结果放到当前行 <br>　　<br>　　寄存器操作 <br>　　"?nyy：将当前行及其下n行的内容保存到寄存器？中，其中?为一个字母，n为一个数字 <br>　　"?nyw：将当前行及其下n个字保存到寄存器？中，其中?为一个字母，n为一个数字 <br>　　"?nyl：将当前行及其下n个字符保存到寄存器？中，其中?为一个字母，n为一个数字 <br>　　"?p：取出寄存器？中的内容并将其放到光标位置处。这里？可以是一个字母，也可以是一个数字 <br>　　ndd：将当前行及其下共n行文本删除，并将所删内容放到1号删除寄存器中。<br><br><br>
<img src ="http://www.cppblog.com/xujiaona/aggbug/27849.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/xujiaona/" target="_blank">Xu JiaoNa</a> 2007-07-11 10:16 <a href="http://www.cppblog.com/xujiaona/archive/2007/07/11/27849.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>《Linux系统分析与高级编程技术》读书笔记 - 第二章　外壳和常用命令</title><link>http://www.cppblog.com/xujiaona/archive/2007/07/04/27487.html</link><dc:creator>Xu JiaoNa</dc:creator><author>Xu JiaoNa</author><pubDate>Wed, 04 Jul 2007 08:02:00 GMT</pubDate><guid>http://www.cppblog.com/xujiaona/archive/2007/07/04/27487.html</guid><wfw:comment>http://www.cppblog.com/xujiaona/comments/27487.html</wfw:comment><comments>http://www.cppblog.com/xujiaona/archive/2007/07/04/27487.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/xujiaona/comments/commentRss/27487.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/xujiaona/services/trackbacks/27487.html</trackback:ping><description><![CDATA[<p>《Linux系统分析与高级编程技术》读书笔记</p>
<p>第二章　外壳和常用命令</p>
<blockquote dir=ltr style="MARGIN-RIGHT: 0px">
<p>Bourne外壳(bsh) =&gt; bash<br>C外壳(csh)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; =&gt; tcsh<br>Korn外壳(ksh)&nbsp;&nbsp; =&gt; pdksh(Pulic Domain Korn)</p>
<p><br>bash常用命令</p>
<p>&gt;passwd<br>&gt;rlogin 主机名　[-l　用户名]<br>&gt;telent 主机名或IP地址<br>&gt;ls [-atFlgR] [name]<br>&nbsp;ls -a<br>&nbsp;ls -l<br>&nbsp;ls -lg<br>&nbsp;ls -t<br>&nbsp;ls -f&nbsp; /目录名　*可执行文件　@符号连接<br>&nbsp;ls -r<br>&gt;cp [源地址名] [目标地址名]<br>&nbsp;cp file1 file2<br>&nbsp;cp file1 /dir1<br>&nbsp;cp /tmp/file1 .<br>&nbsp;cp -r dir1 dir2<br>&gt;mv 源地址　目标地址<br>&nbsp;mv file1 file2<br>&nbsp;mv file1 dir1<br>&nbsp;mv dir1 dir2<br>&gt;mk 目录名<br>&gt;rm name<br>&nbsp;rm dir1<br>&nbsp;rm -r dir1<br>&nbsp;rm file1<br>&nbsp;rm file1?<br>&nbsp;rm f*<br>&gt;pwd<br>&gt;cat file<br>&gt;more file 或者　cat file |more<br>&gt;du [-s] 目录<br>&nbsp;du dir1<br>&nbsp;du -s dir1<br>&gt;rcp [-r] 源地址　主机名：目录<br>&nbsp;rcp file1 doc:/home/user<br>&nbsp;rcp -r dir1 doc/home/user<br>&nbsp;rcp [-r]　主机名：源地址　目标地址<br>&nbsp;rcp doc:/home/user/file1 file2<br>&nbsp;rcp -r doc:/home/user/dir1 .<br>&gt;ftp 主机名或IP<br>&nbsp;ftp&gt;help<br>&nbsp;ftp&gt;!ls, !pwd<br>&nbsp;ftp&gt;ls,dir, dir . |more, pwd, <br>&nbsp;ftp&gt;get file1, put file1, mget *.c, mput *.txt<br>&nbsp;ftp&gt;quit, bye<br>&gt;chmod [-r] mode name<br>&nbsp;mode: 3个8为数字（？？）或rwx组合<br>&nbsp;&nbsp;&nbsp;&nbsp; r-read w-write x-execute<br>&nbsp;&nbsp;&nbsp;&nbsp; u-user g-group o-other<br>&nbsp;chmod u+x file1<br>&nbsp;chmod o-r file1<br>&nbsp;chmode [-r] user name<br>&nbsp;chmod -r user file1<br>&gt;groups<br>&gt;touch name<br>&gt;ln 老文件名　新文件名<br>&gt;grep string file<br>&gt;whereis command<br>&nbsp;which command<br>&nbsp;whatis command<br>&gt;find search_path -name filename&nbsp; -print<br>&nbsp;find / -name file1 -print<br>&gt;diff [-r] name1 name2<br>&nbsp;diff file1 file2<br>&nbsp;diff -r dir1 dir2<br>文件打印<br>&gt;可以用.login文件中的 setenv PRINTER 来设定打印机名<br>&nbsp;setenv PRINTER sp 设定自sp打印机打印资料<br>打印普通文件<br>&gt;lpr [-P打印机名] 文件名<br>&nbsp;lpr file1<br>&nbsp;lpr -Psp file1 自sp打印机打印文件file1<br>&gt;enscript [-P打印机名]　文件名<br>&nbsp;enscript file3<br>&nbsp;enscript -Psp file3<br>打印机控制命令<br>&gt;lpq [-P打印机名]<br>&gt;lprm [-P打印机名] 用户名或作业编号<br>进程控制<br>&gt;ps [-aux]<br>&nbsp;ps或ps -x<br>&nbsp;ps -au<br>&nbsp;ps -aux<br>&gt;kill [-9] PID<br>&gt;命令 &amp;<br>&nbsp;cc file1.c &amp;<br>&nbsp;Control+Z : 暂停正在执行的进程　<br>&nbsp;bg命令: 将暂停的进程置于后台继续执行<br>&nbsp;cc file2.c<br>&nbsp;^Z<br>&nbsp;Stopped<br>&nbsp;bg<br>&gt;jobs<br>&gt;kill %n<br>&nbsp;n:利用jobs命令查看出的后台作业号<br>&nbsp;kill %<br>&nbsp;kill %2<br>外壳变量<br>&gt;set<br>&nbsp;echo $变量名<br>&gt;set var=value<br>&nbsp;unset var<br>环境变量<br>&gt;setenv<br>&nbsp;echo $NAME<br>&gt;setenv NAME word<br>&nbsp;unsetenv NAME<br>别名<br>&gt;alias<br>&nbsp;alias name<br>&gt;alias name "command line"<br>&nbsp;unalias name<br>历史命令<br>&gt;set history=n<br>&nbsp;命令记录表的长度<br>&gt;history<br>&gt;!!<br>&gt;!n<br>&nbsp;n命令记录表的命令号<br>&gt;!string<br>&gt;^oldstring ^newstring<br>&nbsp;find . -name file1.c -print<br>&nbsp;^file1.c ^core<br>&nbsp;file . -name core -print<br>文件压缩<br>&gt;compress 文件名<br>&nbsp;compressdir 目录名<br>&nbsp;umcompress 文件名<br>&nbsp;umcompressdir 目录名<br>管道命令<br>&gt;命令１ |命令２<br>&nbsp;将命令１的执行结果送到命令２，作为命令２的输入<br>&nbsp;cat file1 | more<br>输入／输出控制<br>&gt;命令&lt;文件<br>&nbsp;mail -s "mail test" <a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#42;&#42;&#42;&#64;&#104;&#111;&#116;&#109;&#97;&#105;&#108;&#46;&#99;&#111;&#109;">***@hotmail.com</a> &lt;file1<br>&gt;命令&gt;文件<br>&nbsp;ls -l &gt; MyList<br>&nbsp;命令&gt;!文件<br>&nbsp;命令&gt;&amp;文件<br>&nbsp;命令&gt;&gt;文件<br>&nbsp;命令&gt;&gt;&amp;文件<br>用户<br>&gt;who<br>&nbsp;finger<br>&nbsp;finger 用户名　或　finger　用户名@域名<br>&nbsp;who am i<br>&gt;su 用户名<br>&gt;rusers<br>&nbsp;^C 结束<br>&gt;talk 用户名＠主机名　或　talk 用户名@IP地址<br>&gt;ping 主机名或IP<br>&gt;mail -s ＂主题＂　用户名@地址 &lt; 文件<br>&nbsp;mail -s "program" user &lt;file.c<br>&nbsp;mail 用户名<br>&nbsp;mail 用户名@接受地址<br>&nbsp;mail <a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#42;&#42;&#42;&#64;&#104;&#111;&#116;&#109;&#97;&#105;&#108;&#46;&#99;&#111;&#109;">***@hotmail.com</a><br>&nbsp;Subject :mail test <br>&nbsp; .....<br>　 mail正文<br>&nbsp; .....<br>&nbsp; ^D 结束正文<br>&nbsp; ^C^C ，放弃不发送此邮件<br>　CC 抄送其他收件人<br>&gt;/usr/lib/sendmail -bp</p>
<p><br>&nbsp;</p>
</blockquote>
<img src ="http://www.cppblog.com/xujiaona/aggbug/27487.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/xujiaona/" target="_blank">Xu JiaoNa</a> 2007-07-04 16:02 <a href="http://www.cppblog.com/xujiaona/archive/2007/07/04/27487.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>