weichao さんのプロフィールweichao's homeフォトブログリスト ツール ヘルプ

ブログ


6月23日

[zz]string to wstring

unix下的汉字处理问题
如何把一个汉字作为一个字符来处理?在以前,似乎比较麻烦,因为一个汉字一向是由2个
字符来表示的。比较汉字,往往变成了字符串的比较。
unicode出现之后,情况就好多了,每个汉字都有唯一的编码,从此汉字就可以作为单个字
符来对待了。
stl提供了string类来处理字符串,但是针对的是单字节字符串。如果想处理汉字,可以选
择wstring。用法和string完全相同,但是处理的是宽字符。
string到wstring之间的转换,似乎stl没有提供好的方法,所以还得用c的库函数来处理。
以下给出一段代码,演示在unix下面,处理汉字的方法
/*
FileName: str2wstrdemo.cpp
Compile command:aCC -AA +DD64 -I/opt/aCC/include_std str2wstrdemo.cpp -lstd_v2
-lCsup_v2  -o 1
*/
#include <iostream>
#include <string>
#include <list>
#include <stdlib.h>
#include <locale.h>
using namespace std;
 
int main()
{
  int cnt;
  wchar_t wcs[100], wc;
  string myword="列表内容为:";
  setlocale(LC_CTYPE, "");  //很重要,没有这一句,转换会失败
  mbstowcs(wcs, myword.c_str(), 99);
  wstring newword(wcs);
  cout<<"string content is:"<<myword.c_str()<< endl;
  cout<<"wstring size is:"  <<newword.size()<<endl;

  return 0;
}
 
12月27日

用mutt发送邮件


mutt是个功能强大的email 程序,引用一段别人的话:

"你也许听说过这句话?这不是危言耸听,我还没有遇到一个令我满意的 email 程序,直到我遇到 mutt。它不是图形界面的,但是它非常强大和方便。我曾经把它忽略,但是后来我发现其它 email 程序都有某种我不喜欢的怪毛病。最后我选择了 Mutt。"

我在这里只想介绍一下怎样使用Mutt在Linux/Unix下发送邮件:
以下是命令示范:

weichao@debian:~$ mutt -s "this is a test mail" weichao_zju@yahoo.com.cn -a a.c < /etc/hosts

其中:
s---主题
a---附件
最后追加的是邮件内容

这样就可以发送了。


注意,要想往公网的邮箱发送邮件,必须有sendmail的支持,因为

当 Mutt 需要发信时,它把需要发出的信件放到 sendmail 的队列里,就什么都不管了。

如果想要了解更多关于Mutt的内容,可以访问http://www.mutt.org
清华的王垠曾经写过一篇《Mutt email 程序使用入门》可以参考~

11月30日

zz一篇《The art of UNIX programming 》的书评

     这本书主要偏向软件工程的角度。在joel on software上有一篇很详细的review(我也是看那篇review才想要读这本书)。其中提到Windows(或者是其它)的end-user不喜欢阅读。所以windows里面要一遍又一遍地讲述最基本简单的用法。而Unix/Linux的文化价值就在于自己去找到documentation并且找到解决问题的手段。所以可能Unix/Linux永远也不能成为真正意义上的desktop操作系统。
     这种辩论可能就象当初大家讨论文言文和白话文的价值以及发展趋向一样,事实上是,研究语言的人不可能不去研究文言文(写程序的人不可能就翻翻windows的help就完了),而用户总体趋势最终还是会选择windows或者象windows一样看起来方便使用简单的界面。这种两极分化到处都是。
     另外有一天,有位教授在一篇文章里提出journalist也需要学习html,因为journalist本身的工作就包含有控制"表现结果"。所以说,用户选择什么,和他们需要控制的范围和层次有很大关联。说到底,Unix的文化体系最关键的不是纯文本,而是对自身的可控制性。另外一方面,所谓“操作系统”,其实不是提供单纯的可控制性,而是给用户一个包装完整的控制接口,让用户可以从此接口控制他所想控制的东西。(有可能是操作系统本身,但大部分时候都与操作系统无关。)从软件工程的角度讲,这个用户想控制什么(和如何控制)主要是需求分析的工作。
    如果有一天,Linux能够提供象windows封装得一样好的界面,又保持它的开源精神,必然能够取代windows。我胡说不下去了。大家去读书吧。
8月10日

yc一篇技术贴:超强的rsync

    rsync是类unix系统下的数据镜像备份工具,其实早在我做debian镜像时就用过了。不过把它用到windows下面做成一个服务(服务端),再在linux下面访问它倒是第一次。
    首先要将rsync做成windows的服务,用instsrv.exe和srvany.exe就可以了。而rsync.exe是用cygwin下自带的。步骤如下:
1. 把rsync目录放到windows下的 C:\Program Files\。rsync目录包含rsync.exe以及它所需要的两个cygwin的dll,一个配置文件。配置文件内容如下,可以根据需要更改:

use chroot = false
strict modes = false
hosts allow = *
#log file = c:/rsyncd.log

[linux]
path = e:/cvswork/xg47/src/linux
read only = yes
comment = weichao's host

 

2. 拷贝 instsrv.exe和srvany.exe到 C:\WINDOWS\system32。这两个工具可以到网上下载。很小

3. 打开一个命令终端,输入 instsrv rsync " C:\WINDOWS\system32\srvany.exe" 这时候rsync就成为系统的服务了。

4. 把运行rsync服务的参数写入注册表。可以运行下面这个rsync-param.reg文件:

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Rsync\Parameters]
"AppDirectory"="\"C:\\Program Files\\rsync\""
"Application"="\"C:\\Program Files\\rsync\\rsync.exe\""
"AppParameters"="stream tcp nowait --config=\"C:\\Program Files\\rsync\\rsyncd.conf\"  --daemon"

 

5. 在防火墙中的Exceptions的中添加C:\Program Files\rsync\rsync.exe 使得rsync服务不被防火墙block (win2k应该不需要这一步)

6. 打开控制面板的“Administrative Tools”-“Services”可以看见rsync在服务列表中,右键 start 使他运行

7. 在linux下,运行下面的脚本即可:

#! /bin/bash
# change the ip to your windows host's ip address
RSYNC_HOST=192.168.224.107
RSYNC_DIR=linux/
TO=/work/naga/src/

rsync -rltv --progress --delete  --exclude CVS/  $RSYNC_HOST::$RSYNC_DIR $TO

 

7月25日

debian -- 超市?

在linuxsir的Debian专区经常看到一个qmd:
“用 Debian 的感觉
就象家里开超市一样
不管要什么
只需一个 apt-get”
不错,当初正是因为无法忍受redhat安装和更新软件包的巨大麻烦,而转投Debian的怀抱
Debian的apt机制确实方便了像我这样的懒人
但是有时候这样的机制却会带来很大的麻烦。
 
今天在公司编译XFree86的源码,这个源码正常编译要40~60分钟左右。
可是我今天编译了4,5次,愣是一次没有成功过……
除了源码本身要打许多patch以外,编译时因为我的系统中缺少某些库文件而报错也时有发生。
 
相比而言,redhat因为已经预装了n多库文件,所以不必顾虑。
在redhat上把编译Xfree86的def文件改一改,只需要8分钟就可以完成源码编译。
所以旁边的同事使劲鼓捣我换redhat。
 
nnd,我就不信在Debian上搞不定它。