Archive for 九月, 2009
星期四, 九月 24th, 2009
124 EMEDIUMTYPE Wrong medium type
123 ENOMEDIUM No medium found
122 EDQUOT Disk quota exceeded
121 EREMOTEIO Remote I/O error
120 EISNAM ...
Posted in shell,perl,python,lex,yacc,c | No Comments »
星期三, 九月 23rd, 2009
管道效率测试
管道技术是Linux的一种基本的进程间通信技术。
由于不产生中间文件,效率会更好一些。
下面以字符集转化为例测试实际中管道对效率的提升
实现目标:
1,将文件0_gbk.dat由gbk转化为utf8
2,将前一步的文件从utf8转化为gbk
例一,不使用管道
[oracle@dw_testdb sunwg]$ time iconv -f gbk -t utf8 0_gbk.dat > 0_utf8.dat
real 0m50.347s
user 0m14.114s
sys 0m5.433s
[oracle@dw_testdb sunwg]$ time iconv -t gbk -f utf8 0_utf8.dat > 1_gbk.dat
real 0m53.732s
user 0m13.147s
sys 0m5.167s
total= 50.347 + 53.732 ...
Posted in shell,perl,python,lex,yacc,c | No Comments »
星期二, 九月 22nd, 2009
写代码的时候如果没有个好用的调试工具,那简直就是种折磨。
gdb就是这样的一个好工具,帮助你提高效率的好工作。
下面通过个小例子来介绍下gdb的简单知识。
sunwg.c
-------------
#include
int main()
{
int a=0;
a++;
a++;
printf("%d\n",a);
return 1;
}
创建个简单的c程序sunwg.c。
要想通过gdb来调试程序,那么在编译c程序的时候一定要加入调式信息。
$ gcc -g -o sunwg sunwg.c
-g就是告诉编译器要增加调试信息
下面开始调试程序
$ gdb sunwg
GNU gdb Red Hat Linux (6.3.0.0-1.153.el4rh)
Copyright 2004 Free Software Foundation, Inc.
GDB is free software, covered by the GNU General Public License, and you are
welcome to change it and/or distribute copies of it under certain conditions.
Type "show copying" ...
Posted in shell,perl,python,lex,yacc,c | No Comments »
星期一, 九月 21st, 2009
数据仓库中的数据来源比较多,而且数据中的噪音也比较多。
关于字符集就比较混乱,常常GBK的数据中会混有其他字符集的数据。
这样在向GP或其他数据库中导入的过程中可能就会因为字符集不匹配而产生导入错误。
所以就需要可能会文本文件进行字符集的转化或者替换,可以让转换文件字符集,除去文件中的噪音字符。
convert_code有两种转化模式,一是file级别,二是byte级别。
file级别:调用系统命令iconv转化整个文件,速度快,要求文件中不能存在噪音字符
byte级别:调用函数iconv以字节为单位转化,速度比file慢一些,但是可以过滤掉噪音字符,保证转换成功
在使用中还是用byte的情况多一些,毕竟很难保证文件中不存在非法的噪音字符。
在我们的测试环境上,使用byte的使用转化速度还可以,可以达到25M/S。
由于代码比较长,仅贴出gbk到utf8的转化工作,其他类似:
int gbk_utf8_byte(char in_file[100],char out_file[100],char log_file[100])
{
FILE *fp_in;
FILE *fp_out;
FILE *fp_log;
iconv_t cd;
unsigned char sh;
char *out;
char *in;
unsigned char buffer[10];
...
Posted in shell,perl,python,lex,yacc,c | No Comments »
星期二, 九月 15th, 2009
[oracle@dw_testdb sunwg]$ gcc -O2 -Wall -o convert_code convert_code.c
[oracle@dw_testdb sunwg]$ time ./convert_code from_code=gbk to_code=gbk in_file=0.dat out_file=0_gbk_1.dat convert_type=byte
real 3m4.633s
user 2m36.525s
sys 0m6.121s
[oracle@dw_testdb sunwg]$ gcc -O1 -Wall -o convert_code convert_code.c
[oracle@dw_testdb sunwg]$ time ./convert_code from_code=gbk to_code=gbk in_file=0.dat out_file=0_gbk_1.dat convert_type=byte
real 1m15.513s
user ...
Posted in shell,perl,python,lex,yacc,c | No Comments »