-- 11-18 编译程序的时候要设置好一些环境变量,如ORACLE_HOME,LD_LIBRARY_PATH 注意 通过远程根据登录主机后,如果环境被其他用户或连接修改后,已经打开的连接不会自动更新,还会是初打开时的值 -- 11-19 /proc/sys/kernel/core_pattern 此文件用于设置core文件的产生形式和路径等 比如/corefiles/%e.%p.%t.core 就是说当某程序core之后会在/corefiles下生成一个core文件,文件名是进程名+PID+core的时间的形式 字符型数据和clob类型数据进行比较的时候,可以使用to_char() 进行转换 -- 11-20 gdb调试,使用core文件,可以快速的找到程序崩溃的地方 gdb pro_name corename bt 查看信息 11-21 设置core文件路径及格式 echo "./%e.%p.%t.core" > /proc/sys/kernel/core_pattern v$session表中PROCESS字段竟然是程序在linux里的进程号 -- 11-23 调用程序的时候,在调用shell的时候,要注意环境变量 现象:有一种方式调用程序时,在连接数据库的时候出错,后来检查发现,在shell中echo $ORACLE_HOME 和 直接在命令行中的结果不一样,为了避免出现这种情况,在执行shell调用程序的时候,需要把程序调用需要的一些环境变量加载进 去,如export ORACLE_HOME='' export LD_LIBRARY_PATH='' --- 11-24 字符串长度不足的时候,进行strcat时溢出导致错误 一个奇怪的问题,select pid from tt; 报错,提示没有pid,查看表结构,从表结构中考出pid,还是不行 把表drop掉后,重建,就可以了,表字段的字符有问题 -- 11-25 可以使用socket在机器间进行通信,传送字符串,这些字符串可以作为指令(system)来调度机器上的程序或shell,实现远程调用 -- ^_^ 0 rows selected in all the life -- ./out ${1} if [ $? -eq 0 ] ; then exit 0 else exit -1 fi --- 在shell中$? 用来获取程序的返回值 #include <iostream.h> #include <stdlib.h> int main(int argc, char** argv) { int i = atoi(argv[1]); cout << "i= " << i << endl; return i; } #!/bin/sh ./tt ${1} echo return is $? if [ $? -eq 0 ] ; then echo 00 else echo 111 fi 测试发现,程序的返回值为 (256 + i) % 256 ---- source ./profile 加载配置脚本,使生效 ----- 全局变量的使用 在头文件中定义 extern int gg; cpp文件中定义 int gg; ------- 远程 select * 13:54:25.399 go 13:56:52.63 147S -- select to_char() || 13:46:09.658 go 13:50:41.122 - 14:05:55.752 go 14:08:07.985 132S 14:20:42.255 go 14:22:55.295 107 ---- same host 18391K 14:18:04.56 go 14:18:23.288 || 15959K 14:25:33.445 go 14:25:44.620 修改后的程序 16:38:41.200 go 16:38:55.665 没有什么提高 ---- fstream IO操作很快,1秒钟可写50万行数据到文件中 30MB/S ---- 11-27 对Oracle进行测试,1S 可以导出20万行数据,数据文件大小为5M Linux下直接编译oci程序 g++ -o main Connection.cpp Record.cpp main.cpp -L${ORACLE_HOME}/lib -lclntsh -I${ORACLE_HOME}/rdbms/public - I${ORACLE_HOME}/rdbms/demo -- len = read(new_fd, strEcho, 1000, 0); 第三个参数不能为0 ---- 11-28 写程序的时候应该注意 char c; while (c = getch() != '/n') { cout << (char)c << "hh" << endl; } 调试发现不论输入什么,c的值都为1 检查,原来是运算优先级影响 应该是 (c = getch()) != '/n' -- 11-29 Linux 下获取系统时间 //strTime, 16, "%Y%m%d%H%M%S", 0 int getTime(char *s, int l, const char *dt, time_t now) { int len; char format[17]; time_t tv; struct tm tmv; if( s == NULL || dt == NULL ) return(-1); len = strlen(dt); if( l < 1 || len < 1 ) return(-1); /* * ** 设置时区、夏时制等全局变量 ** * tzset(); */ if( now == 0 ) tv = time( (time_t *) 0 ); else tv = now; memcpy(&tmv, localtime(&tv), sizeof(tmv)); if( len == 1 ) { switch( dt[0] ) { case 't': strcpy(format, "%T"); break; case 'Y': strcpy(format, "%Y"); break; case 'y': strcpy(format, "%y"); break; case 'm': strcpy(format, "%m"); break; case 'd': strcpy(format, "%d"); break; case 'f': strcpy(format, "%Y%m%d%H%M%S"); break; case 'l': strcpy(format, "%Y/%m/%d %T"); break; case 'i': strcpy(format, "%y%m%d%H%M%S032+"); break; default: strcpy(format, dt); break; } return( strftime(s, l+1, format, &tmv) ); } return( strftime(s, l+1, dt, &tmv) ); } ----- vc2008 编译执行 ctrl + F5 ios::out 覆盖原来的文件