FAQ
dlopen/dlsym 을 이용한 .so 의 altibase 연결및 쿼리수행 예제 | |||||
분류 | 프로그래밍 | 등록일 | 2013-07-09 | 조회수 | 2828 |
/** *** main.cpp **/ #include #include #include #include main() { /* ** alti.so 를 호출합니다. */ void *handle2 = dlopen("./alti.so", RTLD_LAZY); if (!handle2) printf("dlopen : %s\n", dlerror()); /* ** DB 연결함수를 호출합니다. */ typedef void (*conn_t)(); conn_t conn = (conn_t)dlsym(handle2, "Alticonn"); if (!conn) { printf("call conn error\n"); dlclose(handle2); exit(-1); } /* ** UPDATE 함수를 호출합니다. */ typedef void (*up_t)(int); up_t updateT1 = (up_t)dlsym(handle2, "UpdateT1"); if (!updateT1) { printf("call conn error\n"); dlclose(handle2); exit(-1); } /* 실제 연결후 sql을 수행해봅니다. */ conn(); updateT1(10); dlclose(handle2); } /* ** alti.so alti.sc */ extern "C" void Alticonn() { EXEC SQL BEGIN DECLARE SECTION; char usr[10]; char pwd[10]; EXEC SQL END DECLARE SECTION; strcpy(usr, "SYS"); strcpy(pwd, "MANAGER"); EXEC SQL CONNECT :usr IDENTIFIED BY :pwd; if (sqlca.sqlcode != 0) { printf("%d:%s\n", SQLCODE, sqlca.sqlerrm.sqlerrmc); exit(-1); } printf("CONNECT SUCCESS, check server status session all\n"); } extern "C" void UpdateT1(int X) { EXEC SQL BEGIN ARGUMENT SECTION; int X; EXEC SQL END ARGUMENT SECTION; EXEC SQL UPDATE T1 SET C1 = :X ; if (sqlca.sqlcode != 0) { printf("%d:%s\n", SQLCODE, sqlca.sqlerrm.sqlerrmc); exit(-1); } EXEC SQL COMMIT; printf("CHECK T1 table : C1 = %d\n", X); } /* ** Makefile (썬용이며 다른 OS를 쓴다면 ld 사용시 시스템라이브러리가 변경되어야 ** 만합니다. */ BINS: alti.so main all: $(BINS) alti.so: alti.sc sesc -t cpp alti.sc CC -c alti.cpp -I${ALTIBASE_HOME}/include ld -shared alti.o -o alti.so -L${ALTIBASE_HOME}/lib -lsesc -lodbccli - lthread -lposix4 -ldl -lkvm -lkstat -lsocket -lnsl -lgen main: main.cpp CC -o main main.cpp -ldl clean: rm *.o core main alti.so |