﻿<?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++博客- 攀升·Uranus-随笔分类-Linux</title><link>http://www.cppblog.com/iuranus/category/4279.html</link><description>&lt;br&gt;&lt;font color="#ADFF2F"&gt;Something Different，Something New&lt;/font&gt;</description><language>zh-cn</language><lastBuildDate>Tue, 20 May 2008 11:27:32 GMT</lastBuildDate><pubDate>Tue, 20 May 2008 11:27:32 GMT</pubDate><ttl>60</ttl><item><title>多国语言惹得祸</title><link>http://www.cppblog.com/iuranus/archive/2007/11/09/36242.html</link><dc:creator>攀升</dc:creator><author>攀升</author><pubDate>Fri, 09 Nov 2007 10:53:00 GMT</pubDate><guid>http://www.cppblog.com/iuranus/archive/2007/11/09/36242.html</guid><wfw:comment>http://www.cppblog.com/iuranus/comments/36242.html</wfw:comment><comments>http://www.cppblog.com/iuranus/archive/2007/11/09/36242.html#Feedback</comments><slash:comments>5</slash:comments><wfw:commentRss>http://www.cppblog.com/iuranus/comments/commentRss/36242.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/iuranus/services/trackbacks/36242.html</trackback:ping><description><![CDATA[<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 上面下指令说要做多国语言版的程序，这可是个不小的改动呀。于是我就拿当前的程序运行，一系列的问题随之出现了。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 话分两头，先说跑在Windows上的，最基本的就是读各种语言的文件名，正常英文还是正常的，但遇到俄文，法文，德文时就出现问题，正常的字符都变成了"?"，跟踪内存发现读入内存的字符已经变成了3f00，也就是"?"的unicode，可见是读入目录到内存的函数出了问题，如下代码：<br>&nbsp;&nbsp; long filehandle;<br>&nbsp;&nbsp;&nbsp; //the structure of file <br>&nbsp;&nbsp;&nbsp; struct _finddata_t entry;<br>&nbsp;&nbsp;&nbsp; //"*" means get all the file and directory<br>&nbsp;&nbsp;&nbsp; // Get the first file<br>&nbsp;&nbsp;&nbsp; if((filehandle = _findfirst( "*", &amp;entry )) != -1)&nbsp;&nbsp;&nbsp; //-1 means the directory is null<br>&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; tree* child;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; do{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(entry.attrib&amp;FILE_ATTRIBUTE_DIRECTORY){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if ( strcmp("..", entry.name) != 0 &amp;&amp; strcmp(".", entry.name) != 0){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //printf("%*s%s\\\n", depth, "", entry.name);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(treenode)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; char name[MAX_LOCALPATH_FOLDERNAME_LENGTH+1];<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; strncpy(name,entry.name,MAX_LOCALPATH_FOLDERNAME_LENGTH-1);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; strcat(name,"\\");<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; child=new tree(name);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; treenode-&gt;AddChild(child);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //Recursively processes directories<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //printdir(entry.name, depth + 4,child);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } else{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //printf("%*s%s\n", depth, "", entry.name);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(treenode)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; child=new tree(entry.name);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; treenode-&gt;AddChild(child);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }while( (_findnext(filehandle,&amp;entry)) ==0 );<br>&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp; chdir("..");<br>&nbsp;&nbsp;&nbsp; _findclose(filehandle);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 通过查证MSDN得知类似于_findfirst，findnext都是针对ASCII码的，要读unicode（windows默认字符集），就得用_wfindfirst，_wfindnext等读宽字符的操作函数，最终解决问题，但我没有松气，因为程序主要是运行在linux中的，Linux真不知道怎么整了。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Linux上读多国语言的文件和目录就需要对Linux系统深入了解，因为我要读的文件是usb上的文件，所以得先挂载到一个目录，<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mount&nbsp;-t&nbsp;vfat&nbsp;/dev/sda1&nbsp;/mnt/usb，然后readdir读入文件，与Windows上同样的错，读入的是"?"，我想和windows一样去找一个类似wreaddir，但是没有。于是应该从挂载着手，目前在NTFS和FAT32/VFAT下的文件系统上都使用了Unicode,这就需要系统在读取这些文件名时动态将其转换为相应的语言编码，也就是说挂载的时候要把usb上的编码转化成16位的Unicode编码，改命令如下后成功。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mount -o iocharset = utf8 /dev/sda1 /mnt/usb.<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Linux对iocharset的解释如下：<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Character set to use for converting between 8 bit characters and 16 bit unicode charaters.The default is iso8859-1. Long filenames are stored on disk in Unicode format.<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;至此终于解决了多国语言的问题，接着我无法想象还有什么问题会出来，但我准备好了。<br></p>
<img src ="http://www.cppblog.com/iuranus/aggbug/36242.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/iuranus/" target="_blank">攀升</a> 2007-11-09 18:53 <a href="http://www.cppblog.com/iuranus/archive/2007/11/09/36242.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>dos2unix</title><link>http://www.cppblog.com/iuranus/archive/2007/07/05/27564.html</link><dc:creator>攀升</dc:creator><author>攀升</author><pubDate>Thu, 05 Jul 2007 12:07:00 GMT</pubDate><guid>http://www.cppblog.com/iuranus/archive/2007/07/05/27564.html</guid><wfw:comment>http://www.cppblog.com/iuranus/comments/27564.html</wfw:comment><comments>http://www.cppblog.com/iuranus/archive/2007/07/05/27564.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cppblog.com/iuranus/comments/commentRss/27564.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/iuranus/services/trackbacks/27564.html</trackback:ping><description><![CDATA[<p>&#160;&#160;&#160; 说起来都不好意思，今天搞了半天，最后发现竟然是vss上check out的文件没有dos2unix，无语，其实主要是没有认真考虑整个程序的运行全过程，仅在看代码，向锦锦一样。<br><br>&#160;&#160;&#160; 说起锦锦，他就惨了，广东话+english，我看他怎么过。呵呵，不过还好了，看这个家伙怎么适应这个生活，毕业了，大家都散了，老的走了，新的来了，我们都好好努力把。<br><br>&#160;&#160;&#160; 事情还挺多的，辜子怎么就把老板炒了，那个公司好就好在很自由，适合他的性格，看他找到下一个能不能适应了。<br><br>&#160;&#160;&#160; 好了，回家了，这两天筹划写些设计模式的东西，希望早点写出来。</p>
&#160; 
 <img src ="http://www.cppblog.com/iuranus/aggbug/27564.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/iuranus/" target="_blank">攀升</a> 2007-07-05 20:07 <a href="http://www.cppblog.com/iuranus/archive/2007/07/05/27564.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>suse尝鲜</title><link>http://www.cppblog.com/iuranus/archive/2006/11/10/17081.html</link><dc:creator>攀升</dc:creator><author>攀升</author><pubDate>Fri, 10 Nov 2006 05:15:00 GMT</pubDate><guid>http://www.cppblog.com/iuranus/archive/2006/11/10/17081.html</guid><wfw:comment>http://www.cppblog.com/iuranus/comments/17081.html</wfw:comment><comments>http://www.cppblog.com/iuranus/archive/2006/11/10/17081.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/iuranus/comments/commentRss/17081.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/iuranus/services/trackbacks/17081.html</trackback:ping><description><![CDATA[<table width="100%">
    <tbody>
        <tr>
            <td>
            <p>ubuntu已经被我从硬盘上擦除了，呵呵，因为一些问题，找了张suse，安装时选了KDE,现在突然感觉不错，从可用性上，界面上都不再是那个死板的Linux，而且我没装什么驱动用跑起来也没问题（对于菜鸟来说这个比较重要），然后U盘也不用挂载就可用，不会出中文问题，就感觉还可以了，先给张图片大家看看。 <br><img src="http://uranus.javaeye.com/upload/picture/pic/618/6519f3b1-64fc-48dd-9375-b9045dd1e5a5.bmp" border=0></p>
            </td>
        </tr>
    </tbody>
</table>
<br><br><a href="http://www.cppblog.com/iuranus/admin/%20%20%20%0A%20%20%20%20http://uranus.javaeye.com/blog/33510%0A%20%20%20%20"></a>
<img src ="http://www.cppblog.com/iuranus/aggbug/17081.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/iuranus/" target="_blank">攀升</a> 2006-11-10 13:15 <a href="http://www.cppblog.com/iuranus/archive/2006/11/10/17081.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>linux的基本指令(一)</title><link>http://www.cppblog.com/iuranus/archive/2006/11/07/17082.html</link><dc:creator>攀升</dc:creator><author>攀升</author><pubDate>Tue, 07 Nov 2006 12:00:00 GMT</pubDate><guid>http://www.cppblog.com/iuranus/archive/2006/11/07/17082.html</guid><wfw:comment>http://www.cppblog.com/iuranus/comments/17082.html</wfw:comment><comments>http://www.cppblog.com/iuranus/archive/2006/11/07/17082.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/iuranus/comments/commentRss/17082.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/iuranus/services/trackbacks/17082.html</trackback:ping><description><![CDATA[<table width="100%">
    <tbody>
        <tr>
            <td>
            <p>去sony之前先准备下，从linux开始： <br>1.exit：这个指令是退出系统，但不是关机，linux中有很多作业，当你等入后相当于一个作业，当你等出时，作业停止，但其它作业还在进行，只有关机才行。 <br>2.date：显示当前日期 <br>格式化日期：date +%y/%m/%d <br>3.cal： 显示日历 <br>格式化日历：cal [month] [year] <br>4.bc: 内置计算器 <br>5.man: 求助了！与info类似 <br>man [command] <br>6.shutdown: 这就是关机了 <br>shutdown -t sec: shutdown -t 10 10秒关机 <br>shutdown -k message:shutdown -k I WILL SHUTDOWN 不真的关机，只是发个消息I WILL SHUTDOWN <br>shutdown -c 取消当前已经在执行的关机指令 <br>shutdown -h time:shutdown -h 20:20 停止系统的服务，在20：20关机 <br>shutdown -r time:shutdown -r now 停止系统的服务，然后重新开机 <br>7.reboot :重启，与shutdown -r now <br>8.目录文件权限 <br>chgrp groupname file/directory: chgrp uranus1 a 变更a文件的组为uranus1 <br>chmod xyz file/directory: chmod 777 a 变更a文件的权限为-rwxrwxrwx <br>chown user file/directory: chown uranus1 a 变更a文件的拥有者为uranus1 <br>umask 文件或目录时的默认权限 <br>umask:查看 <br>umask xyz:设定 <br><br>9.cd [相对路径或绝对路径] <br>10. pwd 显示当前路径 <br>11. mkdir/rmdir 建立目录/删除目录 <br>12. ls 显示文件名称，属性等 <br>ls -a 列出所有文件（连同隐藏文档） <br>ls -l 详细列出 <br>ls -s 以文件大小排序 <br>13. cp [souce] [object]进行复制 <br>cp -d <br>cp -r 可以进行目录的复制 <br>cp -s 做成联接文件，与ln功能相同 <br>cp -u 如果源文件新才会复制 <br>14. rm [文件名] 删除文件 <br>rm -i 用户确认 <br>rm -r 循环删除 <br>rm -f 强制删除 <br>15. mv [souce] [object]移动 <br>16. 查看文件内容 <br>cat [文件] 查看文件内容 <br>tac [文件] 最后一行显示 <br>more/less [文件] 显示文件 <br>head/tail -n [文件] 从头或尾开始看文件N行 <br>nl 与cat类似 <br>od 读非ASCii数据文件 <br>17. chattr与Isattr 文件的安全性相关 <br>chattr [+-=] [ASacdistu] [file/directory] <br>+-=:分别增加，减少，设定属性 <br>A :存取时间atime不能修改 <br>18. 搜索文件 <br>which [文件名] 查看可执行文件的位置 <br>whereis [目录名称] <br>-a :找二进制文件 <br>-m:说明文件manual路径下的文件 <br>-s:只找source 源文件 <br>-n:没有说明文档文件 <br>locate [目录名称] <br>find [路径] [参数] <br>1.时间： <br>-atime n:n*24小时内存取过的文件全部列出来 <br>-ctime n:n*24小时内改变，新增的文件或目录列出来 <br>-mtime n:n*24小时内修改过的文件列出来 <br>-newer file:把比file还要新的文件列出来 <br>2.使用名字 <br>-gid n:寻找群组ID为N的文件 <br>-group name:寻找群组名称为name的文件 <br>-uid n:寻找拥有者ID为N的文件 <br>-user name:寻找用户名称为name的文件 <br>-name file:寻找文件名为file的文件名称 <br>-type type:寻找文件属性为type的文件，包含b,c,d,p,l,s(接口设备b，端口设备c，目录d，联接文件l） <br>19. vi基本操作（光标移动的不用多讲） <br>查找与替换 <br>/word 在光标之后查找一个名为word的字符串 <br>?word 在光标之前查找一个名为word的字符串 <br>n1,n2s/word1/word2/g 在n1行到n2行之间的查找与替换 <br>1,$s/word1/word2/gc 在1到最后一行这间的查找与替换，并在换时要确认。 <br>命令行模式： <br>w: 保存 <br>w!:若文件只读，刚强制写 <br>q:退出 <br>wq: <br>w[filename]:将数据放在另一个文件中 <br>r[filename]:读入另一个文件的数据。 <br>set nu:加入行 <br>set nonu:与set nu 相反 <br>n1,n2 w[filename]:从n1到n2的内容保存为filename这个文件。</p>
            </td>
        </tr>
    </tbody>
</table>
<br><br><a href="http://www.cppblog.com/iuranus/admin/%20%20%20%0A%20%20%20%20http://uranus.javaeye.com/blog/33087%0A%20%20%20%20"></a>
<img src ="http://www.cppblog.com/iuranus/aggbug/17082.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/iuranus/" target="_blank">攀升</a> 2006-11-07 20:00 <a href="http://www.cppblog.com/iuranus/archive/2006/11/07/17082.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>