JIS,SHIFT-JIS,EUC-JP(日文编码简述)

JIS: Japanese Industrial Standards,你可以认为它就是JIS X 0202 (also known as
ISO-2022-JP);
SHIFT-JIS:是JIS的扩展,而SHIFT-JIS又有很多的变种,比如微软的Code page 932,也被称为ms932;
EUC-JP: Extended Unix Code,它被广泛的使用在日文的类unix的系统上,有人说HP-UX上不支持EUC-JP,
但是我查了一下,在HP-UX下有SHIFT-JIS和EUC-JP等4中编码形式;

具体的转换实现可以参见:http://www.pitt.edu/~ctnst3/cjk/jis.c

C/C++中的指针

Step 1:
int a;//定义了一个整型变量a
int p;//定义了一个整型指针p
int **p;//定义了一个整型指针的指针
int array[];//定义了一个整型数组array
int (
pointerToArray)[];//定义了一个指向整型数组的指针pointerToArray
int array[];//定义了一个数组array,数组的内容是整型指针
int method();//定义了一个方法,名字是mehtond
int (
pointerToMethod)();//定义了一个指向函数的指针pointerToMethod,这个函数没有参数,返回值是整型
int *method();//定义了一个函数method,这个函数没有参数,返回值是整型指针

Step 2:
int (foo[10])();//定义了一个数组foo,数组的内容是函数,这个函数没有参数,返回值是整型,使用:foo0;
int foo1[2][2];//定义了一个二维数组foo1
int (
foo2())[] ;//定义了一个函数foo2,它的返回值是整型数组的指针
int (* foo3())(); //定义了个函数foo3,它的返回值是一个函数指针,这个函数没有参数,返回值是整型

const int grape;//定义了一个指针grape,它指向一个const的整型变量
int const
grape;//定义了一个指针grape,它指向一个const的整型变量
int * const grape_jelly;//定义了一个const的指针grape_jelly,它指向一个整型变量

Step 3:
char const (next)(); //定义了一个函数指针next,这个函数没有参数,返回值是一个指针,指向一个指向char类型的常量指针
char
(c[10])(int **p); //定义了一个数组c,它里面放的是函数指针,该函数的返回值是char指针,参数是整型变量的指针的指针
void (
signal(int sig, void (*func)(int)) ) (int);
//定义了一个函数signal,返回一个函数指针,在signal中有两个参数,一个是整型变量,另一个是一个函数指针

总之一句话,如果你的声明比较多了,乱了,请使用typedef,或者改变方法实现。
参见:
1.expert c programming
2.http://www.netinter.cn/info/html/chengxusheji/C-C--/20080224/11853.html
3.http://blog.csdn.net/heiyeshuwu/archive/2007/01/23/1491571.aspx

Java中调用DOS命令的问题

最近遇到一个问题,就是我的mail文件夹下面的mail太多了,使得Becky的浏览速度变得很慢,所以必须先备份原先的数据,但是又不能将目录结构删除,所以我想写一个java程序来完成这个工作。

刚开始我的思路是用java中出需要删除的文件或文件夹,保存在一个set中,然后对这个set进行遍历,每一项拼成一个DOS命令,然后用Runtime.getRuntime().exec()来运行,思路是对的,但是谁知道当要删除的文件很多的时候,Runtime.getRuntime().exec()产生的进程就会挂起,一直没有响应,我很郁闷,不知道是为什么,上网找资料也没有找到,所以另辟蹊径了。
将所有的命令输出到一个bat文件中,然后用Runtime.getRuntime().exec()来调用这个文件就解决问题了。
源代码如下:
有一些冗余的东西没有删除。
当然用别的语言也许更简单。

  1. package tools.deletefile;
  2. import java.io.BufferedReader;
  3. import java.io.BufferedWriter;
  4. import java.io.File;
  5. import java.io.FileWriter;
  6. import java.io.IOException;
  7. import java.io.InputStreamReader;
  8. import java.io.OutputStreamWriter;
  9. import java.io.PrintWriter;
  10. import java.util.HashSet;
  11. import java.util.Iterator;
  12. import java.util.Set;
  13. public class DeleteSpecialFile2{
  14. private static String batPath = System.getProperty( “user.dir” ) + File.separator + “deleteFile.bat” ;
  15. private BufferedWriter batFileOut;
    1. private static String mailPath = “@@/email/46d6483d.mb” ;
  16. private static String svnPath = “@@” ;
  17. private static String path = svnPath;
    1. private static String[] deleteFileExtension = new String[] { “.bmf” , “.java” , “.mf” , “.idx” };
  18. private static String[] deleteFolder = new String[] { “#Attach” };
    1. private Set s = new HashSet();
  19. private int deletedFileCount;
  20. private int deletedFolderCount;
    1. private StringBuffer deleteFileCommand = new StringBuffer();
  21. private StringBuffer deleteFolderCommand = new StringBuffer();
    1. public DeleteSpecialFile2(){
  22. }
    1. public void callBatFile(){
  23. //open bat file
  24. try {
  25. batFileOut = new BufferedWriter( new FileWriter(batPath));
  26. generateBatFile();
  27. batFileOut.flush();
  28. batFileOut.close();
  29. } catch (IOException e) {
  30. e.printStackTrace();
  31. }
    1. System.out.println(batPath);
  32. runBat( “cmd.exe /c” + batPath);
  33. System.out.println(deletedFileCount + “ ‘s file is deleted.” );
  34. System.out.println(deletedFolderCount + “ ‘s folder is deleted.” );
  35. System.out.println( “Thank you for use! jialiang” );
  36. }
    1. public void runBat(String command){
  37. Process child = null ;
  38. try {
  39. Runtime rt = Runtime.getRuntime();
  40. child = rt.exec(command);
  41. String line = null ;
  42. BufferedReader reader = new BufferedReader( new InputStreamReader(child.getInputStream()));
  43. while ((line = reader.readLine()) != null ) {
  44. System.out.println(line);
  45. }
  46. reader.close();
  47. while ( true ) {
  48. if (child.waitFor() == 0 )
  49. break ;
  50. }
  51. } catch (Exception ex) {
  52. child.destroy();
  53. ex.printStackTrace();
  54. }
  55. }
    1. private void generateBatFile(){
  56. process( null );
  57. }
    1. public void process(PrintWriter out){
  58. try {
  59. scan( new String[] { path });
  60. } catch (IOException e) {
  61. e.printStackTrace();
  62. }
  63. for (Iterator iterator = s.iterator(); iterator.hasNext();) {
  64. String object = (String) iterator.next();
  65. if (isSuitableFileExtension(object)) {
  66. deleteFile2(object, out);
  67. }
  68. if (isSuitableFolder(object)) {
  69. deleteFolder2(object, out);
  70. }
  71. }
  72. }
    1. private void scan(String[] strings) throws IOException{
  73. File telegramPath;
  74. String[] fileNames;
  75. telegramPath = new File(strings[ 0 ]);
  76. fileNames = telegramPath.list();
  77. for ( int i = 0 ; i < fileNames.length; i++) {
  78. File f = new File(telegramPath.getPath(), fileNames[i]);
  79. if (f.isDirectory()) {
  80. if (isSuitableFolder(f.getCanonicalPath())) {
  81. s.add(f.getCanonicalPath());
  82. } else {
  83. scan( new String[] { f.getPath() });
  84. }
  85. } else if (f.isFile()) {
  86. s.add(f.getCanonicalPath());
  87. }
  88. }
  89. }
    1. private boolean isSuitableFileExtension(String fileName){
  90. boolean result = false ;
  91. for ( int i = 0 ; i < deleteFileExtension.length; i++) {
  92. if (fileName.endsWith(deleteFileExtension[i])) {
  93. result = true ;
  94. break ;
  95. }
  96. }
  97. return result;
  98. }
    1. private boolean isSuitableFolder(String fileName){
  99. boolean result = false ;
  100. for ( int i = 0 ; i < deleteFolder.length; i++) {
  101. if (fileName.endsWith(deleteFolder[i])) {
  102. result = true ;
  103. break ;
  104. }
  105. }
  106. return result;
  107. }
    1. private void deleteFile2(String target, PrintWriter out){
  108. String command = “del “ + target + “/n” ;
  109. System.out.print(command);
  110. try {
  111. batFileOut.write(command);
  112. } catch (IOException e) {
  113. e.printStackTrace();
  114. }
  115. deletedFileCount++;
  116. }
    1. private void deleteFolder2(String target, PrintWriter out){
  117. String command = “rd /s/q “ + target + “/n” ;
  118. System.out.print(command);
  119. try {
  120. batFileOut.write(command);
  121. } catch (IOException e) {
  122. e.printStackTrace();
  123. }
  124. deletedFolderCount++;
  125. }
    1. public static void main(String[] test){
  126. DeleteSpecialFile2 delete = new DeleteSpecialFile2();
  127. delete.callBatFile();
  128. }
  129. }

怎样识别操作系统和CPU是32为的还是64位的

首先说明一下,64位的CPU可以安装64位的操作系统,也可以安装32位的操作系统;
但是32的CPU只能安装32为的操作系统。

windows版:
使用systeminfo命令查看下列两行就知道操作系统和CPU的位数了

例1:(CPU为:Intel(R) Xeon(TM) CPU 3.06GHz, codenamed “ Prestonia “)
システムの種類: X86-based PC //操作系统是32位的
プロセッサ: 2 プロセッサインストール済みです。
[01]: x86 Family 15 Model 2 Stepping 9 GenuineIntel //是双核的32位CPU
[02]: x86 Family 15 Model 2 Stepping 9 GenuineIntel

例2:(CPU为:Intel(R) Xeon(TM) CPU 3.00GHz, codenamed “ Nocona
“),intel在Xeon系列的CPU从这开始支持64位;
システムの種類: x64-based PC//操作系统是64位的
プロセッサ: 4 プロセッサインストール済みです。
[01]: EM64T Family 15 Model 4 Stepping 1 GenuineIntel ~2993 Mhz//是四核的64位CPU
[02]: EM64T Family 15 Model 4 Stepping 1 GenuineIntel ~2993
Mhz//但是这里是EM64T,不是正的64位
[03]: EM64T Family 15 Model 4 Stepping 1 GenuineIntel ~2993 Mhz
[04]: EM64T Family 15 Model 4 Stepping 1 GenuineIntel ~2993 Mhz

例3:(CPU为:Intel Core 2 Duo E4500, codenamed “ Conroe
“),这个CPU是支持EM64T指令集的;但是为什么显示的是32位的CPU,难道和BIOS或者操作系统有关;
システムの種類: X86-based PC//操作系统是32位的
プロセッサ: 2 プロセッサインストール済みです。
[01]: x86 Family 6 Model 15 Stepping 13 GenuineIntel ~2199 Mhz//是双核的32位CPU
[02]: x86 Family 6 Model 15 Stepping 13 GenuineIntel ~2199 Mhz

例4:(CPU为:Intel Itanium 2, codenamed “ Madison “),这是真正的64位CPU
システムの種類: Itanium (TM) -based System//操作系统是64位的
プロセッサ: 1 プロセッサインストール済みです。
[01]: ia64 Family 31 Model 1 Stepping 5 GenuineIntel ~1300 Mhz//是单核的64位CPU

linux版:
使用uname命令就行了;
说明:

If multiple options or -a are given, the selected information is printed in
this order:

      kernel-name nodename kernel-release kernel-version  
machine processor hardware-platform operating-system  

例1:uname -a
Linux localhost.localdomain 2.6.9-78.ELsmp #1 SMP Wed Jul 9 15:39:47 EDT 2008
i686 i686 i386 GNU/Linux
这个是在32位的CPU上安装的32位系统

例2:
Linux localhost.localdomain 2.6.18-92.el5 #1 SMP Tue Apr 29 13:16:15 EDT 2008
x86_64 x86_64 x86_64 GNU/Linux
这个是在EM64T的CPU上安装的EM64T的系统

例3:
Linux localhost.localdomain 2.6.18-53.el5 #1 SMP Wed Oct 10 16:34:55 EDT 2007
ia64 ia64 ia64 GNU/Linux
这个是在64位的CPU上安装的64位系统,第一个ia64表示的64位系统,第三个ia64表示的是64位的cpu;
如果你想查看CPU的信息的话,使用 cat /proc/cpuinfo命令就好了;

hp版:
使用的命令是machinfo -v

例1:
CPU info:
1 PA-RISC 8800 processor (800 MHz, 64 MB)//CPU的类型
CPU version 5

Vendor identification: Hewlett-Packard
Processor version info: 0x0000000000000285
Processor capabilities: 0x00000000000000b2
FSTWS, FSTWX, FLDWS, FLDWX generate word tx to I/O space
Multimedia halfword shift-and-adds
Multimedia halfword adds and subtracts
Speculative data prefetch on loads of GR0
Instruction cache: 64 MB
Data cache: 64 MB

Memory: 1022 MB (1 GB)

Firmware info:
Firmware revision: 46.34
IPMI is supported on this system.
BMC firmware revision: 3.52

Platform info:
Model: “9000/800/rp3410 “
Machine ID number: Z3e12d66e30f9f60a
Machine serial number: SGH473909C

OS info:
Nodename: dd
Release: HP-UX B.11.31//操作系统版本
Version: U (unlimited-user license)
Machine: 9000/800
ID Number: 821687818
vmunix _release_version:
_release_version:

有了CPU类型就可以在hp的官网上查找CPU的位数了;操作系统也是一样的。
有人说可以使用getconf LONG_BIT和getconf WORD_BIT结合判断,或者使用fiel /bin/ls等,我就不多说了。

task scheduler 的简单使用

前一段时间我需要用windows的task scheduler来每隔5分钟运行我的脚本,显示远程登录到windos上的用户IP,
脚本虽然写好了,但是task scheduler的设置一直没有设好,所以将设置过程写在这里。
1. 从开始按钮进入task;
2. 浏览到自己想要运行的bat文件;
3. 选择task运行的时间单位为天;
4. 一路到完成;
5. 双击刚才做成的task,点击scheduler页,将开始时间设置成8:00,
再点击详细设定,勾选task重复执行,
在这里可以设置重复执行的持续时间和执行一次task的时间间隔;
我在里将持续时间设置成24小时,时间间隔是5分钟;
6. OK,达成目的

这里的task scheduler设置的意思是:每天的8点开始第一次运行我的task,但是运行这一次要持续24小时,
在这24小时里,每隔5分钟运行我的task一次。

我的脚本如下:
@echo off
rem author: @@
rem time: 8:59 2008/09/16
echo Time is %date% %time%>> @@display-remote-user-ip/remote-user.txt
netstat -na | find “172.0.0.1:3389” >>@@display-remote-user-ip/remote-user.txt

《关中匪事》的主题曲

《关中匪事》的主题曲

他大舅他二舅都是他舅,
高桌子低板凳都是木头;
金疙瘩银疙瘩还嫌不够,
天在上地在下你娃嫑牛。

为王的坐椅子脊背朝后,
没料想把肚皮挺在前头;
他大舅他二舅都是他舅,
高桌子低板凳都是木头,

太阳出来照西墙,
西墙背后有阴凉;
他大舅他二舅都是他舅,
高桌子低板凳都是木头。

出东门,向西走,
半路上碰见个人咬狗。
提起狗头打砖头,
反被砖头咬了手。
他大舅他二舅都是他舅,
高桌子低板凳都是木头。
车子走,轱碌转,
公鸡统统不下蛋;
长虫没腿也能跑,
窨子和井推不倒。

窨:

xūn

<动>

同“熏”,用于窨茶叶。把茉莉花等放在茶叶中,使茶叶染上花的香味

yìn

<名>

(形声。从穴,音声。本义:地下室,地窖) 同本义[basement]。又称地窨子,地下室

转载:http://zhidao.baidu.com/question/26570273.html?fr=qrl&fr2=query&adt=0_794

实话实说

实 话 实 说

词曲:十三狼

人是人来鳖是鳖 喇叭是铜锅是铁
老子英雄儿好汉 他大(爸)卖葱娃卖蒜
丑人自有丑人爱 烂锅盖上烂锅盖
出门看天色 进门观眼色
不会烧香得罪神 不会说话得罪人
不知黄连苦 哪知蜂蜜甜
不管是黑猫还是白猫 抓住老鼠就是好猫
不管是黄牛还是花牛 能拉犁的就是好牛
白了黑了晴了阴了 饿了饱了穷了富了
老老少少只图个快快乐乐
笑了哭了对了错了 笑了哭了对了错了
男男女女只图个快快乐乐
哎……
白了黑了晴了阴了 饿了饱了穷了富了
老老少少只图个快快乐乐
笑了哭了对了错了 笑了哭了对了错了
男男女女只图个快快乐乐

人是人来鳖是鳖 喇叭是铜锅是铁
老子英雄儿好汉 他大(爸)卖葱娃卖蒜
丑人自有丑人爱 烂锅盖上烂锅盖
出门看天色 进门观眼色
不会烧香得罪神 不会说话得罪人
不知黄连苦 哪知蜂蜜甜
不管是黑猫还是白猫 抓住老鼠就是好猫
不管是黄牛还是花牛 能拉犁的就是好牛
好牛

转载:http://www.shisanlang.com/MusicShow.asp?ID=78

怎样在浏览器中修改applet使用的jre版本

在windows下,对IE/firefox
1.将OBJECT中的classid设置成下面的值,他的意思是说使用系统的最新jre;


2.安装最新的jre版本(当前是jre1.6.0_10),他会在applet运行环境设置对话框中添加一列”有效”
3.如果要使用那个版本的话,将其他的比之版本更高的jre禁用掉;
4.连接包含applet的网页。

在Linux下,对firefox
在firefo的安装目录下的plugins目录中,建立不同jre的link就能实现使用不同的jre了。
就是建立libjavaplugin_oji.so文件的link。