//2010-12-26 重定向输出到文件 #include <stdio.h> int main() {/* redirect standard output to a file */ if (freopen("OUTPUT.txt", "w", stdout)==NULL) fprintf(stderr, "error redirecting/nstdout/n"); /* this output will go to a file */ printf("This will go into a file."); printf("2010-12-26"); /* close the standard output stream */ fclose(stdout); return 0; } -- // Compile options needed: none #include <stdio.h> #include <stdlib.h> void main(void) { FILE *stream ; if((stream = freopen("file.txt", "w", stdout)) == NULL) exit(-1); printf("this is stdout output/n"); stream = freopen("CON", "w", stdout); printf("And now back to the console once again/n"); } ------- -- 12-18 sqlldr相对于oci程序的优点:可以过滤出错误数据 wait用来等待子进程退出 #include <sys/types.h> #include <sys/wait.h> #include <unistd.h> #include <iostream.h> int main() { for(int i = 0; i < 3; i++) { pid_t pid = fork(); if(pid == 0) { cout << "pid= " << getpid() << "i = " << i << endl; if(i == 2) sleep(10); return pid; } } pid_t cp; int it; for(int i = 0; i < 3; i++) { cp = wait(&it); cout << "chpid= " << cp << endl; } cout << "main exit" << endl; return 0; } -- 12-21 cat start.sh #!/bin/sh #nohup ./divfile & >> log.txt nohup ./divfile >> log.txt & nohup ./datastore >> log.txt & #nohup ./datastore & >> log.txt echo 'has start' ------ 尽量直接使用函数替代system命令,如rename替换 mv -- 12-22 getline 函数的用法及返回值需要注意,读取到最后一行的时候会怎样处理 程序中sql里的表带上了用户名,在使用的时候要注意实际用户 使用的数据库查询接口太差了,不能根据返回值进行判断 -- 12-23 流 ofstream 的使用需要注意,在向文件中写数据的时候,如果删除这个文件,再写文件就会出错,因为只打开了1次 程序的一个问题,程序在运行的时候,写的临时文件还没有关闭,这个时候,如果在外部把文件删除,程序就出错退出 EVT_KJAVA_BROWSE_CDR.ctl sqlldr niop_adm/niop@102_db control=../ctrl/EVT_KJAVA_BROWSE_CDR.ctl data=t.txt sqlldr导入空文件也是可以的 -- 进程A中通过system调用的方式启动了进程C,当kill进程A的时候,不会影响进程C,C还存在 -- 12-24 vi A 从游标所在列最後面的地方开始新增资料 rm -rf dirname 删除非空目录 --- 12-27 rename使用的问题 没有报错,文件也删除了,但是没有转移到指定的目录下 #include <stdlib.h> #include <stdio.h> #include <iostream.h> int main() { cout << rename("/root/test/data_store/data/tmp/5021", "/root/test/data_store/data/file/5021_4.txt") << endl; return 0; } 可能是目录结构出现了问题 删除目录结构,重建后可以正确进行操作 if (freopen("OUTPUT.txt", "w", stdout)==NULL) fprintf(stderr, "error redirecting/nstdout/n"); 采用这种方式还是获取不了ftp put 的提示信息 -- 12-28 oracle 数据库 登录的时候 account lock ,极有可能是连续的使用错误的用户或密码登录造成的 如果程序有进行连续登录的功能,应当对这个错误保持敏感,以便及时核对登录配置是否正确 注意 sqlldr中输入错误的登录口令多次也会导致用户被锁 -- 12-29 注意cp的用法 直接复制到目录下的时候需要在目录后加上/ mv也是这样 cp file1 file2 cp file1 dir/ 修改日期 date -s '12/31/2010' +%D 只用月天修改日期不行,可能是考虑到闰年对2月天数的影响,避免产生不合法的日期 注意目录和文件的权限,用户可能没有权限去写其他用户的目录和文件 -- 12-30 makefile CC = gcc -g -m64 -DDBKNL_ARCHITECTURE=DB_BIT_MODEL_LP64 -DSQL_ARCHITECTURE=SQL_BIT_MODEL_LP64 INSTALL_PATH = /home/vignesh/jun28/gmdb.debug.64bitlp SQL_CS = Insert_table SQL_EXECUTE_PATH = . SRC_FILES = Insert_table.c SRC_INCLUDE_PATH_CS = -I${INSTALL_PATH}/include LIB_PATH_CS = ${INSTALL_PATH}/so #LINK_FLAG_CS = -lsqlServer -lsqlengine -lpthread -lm -lcrypt LINK_FLAG_CS = -lsqlClient -lsqlengine -lpthread -lm -lcrypt cs: ${CC} -o ${SQL_EXECUTE_PATH}/${SQL_CS} ${SRC_INCLUDE_PATH_CS} ${SRC_FILES} -L${LIB_PATH_CS} ${LINK_FLAG_CS} clean : rm ${SQL_EXECUTE_PATH}/${SQL_CS} --- ls -R 显示当前目录及其子目录下的所有文件,即显示当前结点的所有叶子结点