제3장 API

내용 목차

3.1. 개요
3.2. tdlcall
3.3. tdlcall2
3.4. tdlcall2v
3.5. tdlcall2s
3.6. tdlcallva
3.7. tdlcallva2
3.8. tdlcreate
3.9. tdldestroy
3.10. tdlerror
3.11. tdlgetseqno
3.12. tdlstart
3.13. tdlend
3.14. tdlsuspend
3.15. tdlresume
3.16. tdlclose
3.17. tdlload
3.18. tdlload2
3.19. tdlinit
3.20. tdldone
3.21. tdlfind
3.22. tdlfind2
3.23. tdlstat
3.24. tdlstat2

본 장에서는 실제 애플리케이션 개발을 위한 API의 사용법에 대해서 소개한다.

3.1. 개요

TDL API는 Tmax 서버나 클라이언트 라이브러리에 포함되어 있으며, tdlcall.h 헤더 파일을 포함(include)시켜야 한다. Tmax 서버의 경우 TCS와 UCS 타입만 지원하며 클라이언트의 경우 멀티 스레드 라이브러리에서는 지원하지 않는다. 다음은 TDL API의 목록이다.

API설명
tdlcall최신 버전의 동적 모듈 함수를 호출하는 함수로, TDL 환경 파일(tdl.cfg)의 VERSION=1 또는 VERSION=2로 설정된 경우 사용 가능하다.
tdlcall2최신 버전의 동적 모듈 함수를 호출하는 함수로, TDL 환경 파일(tdl.cfg)의 VERSION=3으로 설정된 경우 사용 가능하다.
tdlcall2v최신 버전의 동적 모듈 함수를 호출하는 함수로, TDL 환경 파일(tdl.cfg)의 VERSION=3으로 설정된 경우 사용 가능하다.
tdlcall2s최신 버전의 동적 모듈 함수를 호출하는 함수로, TDL 환경 파일(tdl.cfg)의 VERSION=3으로 설정된 경우 사용 가능하다.
tdlcallva최신 버전의 동적 모듈 함수를 호출하는 함수로, TDL 환경 파일(tdl.cfg)의 VERSION=1 또는 VERSION=2로 설정된 경우 사용 가능하다.
tdlcallva2최신 버전의 동적 모듈 함수를 호출하는 함수로, TDL 환경 파일(tdl.cfg)의 VERSION=3으로 설정된 경우 사용 가능하다.
tdlcreate최신 버전의 동적 모듈에서 Class Factory를 사용하여 클래스 인스턴스를 생성하는 함수로, TDL 환경 파일(tdl.cfg)에 VERSION=4로 설정된 경우 사용 가능하다.
tdldestroy최신 버전의 동적 모듈에서 Class Factory를 사용하여 클래스 인스턴스를 파괴하는 함수로, TDL 환경 파일(tdl.cfg)에 VERSION=4로 설정된 경우 사용 가능하다.
tdlerrortdlcall()에 대한 에러가 발생했을 때 문자열 형태로 변환하는 함수이다.
tdlgetseqnoGlobal Sequence 번호를 가져오는 함수이다.
tdlstart명시적 버전 정합성(Explicit Version Consistency) 유지가 시작된다.
tdlend명시적 버전 정합성(Explicit Version Consistency) 유지가 종료된다.
tdlsuspend일시적으로 버전 정합성 유지를 중지한다.
tdlresume일시적으로 중지된 버전 정합성 유지를 재개하는 함수이다.
tdlclose해당 모듈의 레퍼런스 카운트를 0으로 초기화 하거나 모듈을 직접 메모리에서 해제한다.
tdlload공유 메모리에 모듈을 적재하는 함수로, TDL 환경 파일(tdl.cfg)의 VERSION=1 또는 VERSION=2로 설정된 경우 사용한다.
tdlload2공유 메모리에 모듈을 적재하는 함수로, TDL 환경 파일(tdl.cfg)의 VERSION=3으로 설정된 경우 사용한다.
tdlinit공유 메모리를 초기 설정하는 함수이다.
tdldone공유 메모리를 초기화 하는 함수이다.
tdlfind모듈의 인덱스를 찾는 함수로, TDL 환경 파일(tdl.cfg)의 VERSION=1 또는 VERSION=2로 설정된 경우 사용한다.
tdlfind2모듈의 인덱스를 찾는 함수로, TDL 환경 파일(tdl.cfg)의 VERSION=3으로 설정된 경우 사용한다.
tdlstat

TDL 통계 정보를 출력해주는 함수로, TDL 환경 파일(tdl.cfg)의 VERSION=1 또는 VERSION=2로 설정된 경우 사용한다.

환경설정에서 MONITOR=Y로 설정해야 한다.

tdlstat2

TDL 통계 정보를 출력해주는 함수로, TDL 환경 파일(tdl.cfg)의 VERSION=3으로 설정된 경우 사용한다.

환경설정에서 MONITOR=Y로 설정해야 한다.

3.2. tdlcall

최신 버전의 동적 모듈 함수를 호출하는 함수로 동적 모듈 함수는 반드시 long funcname(void *args) 형태의 원형을 가져야 한다. TDL 환경 파일(tdl.cfg)의 VERSION이 1 또는 2로 설정되었을 때 사용 가능하다. 동적 모듈은 최초 tdlcall()될 때 로드되며 특별히 업데이트(tdlupdate)가 되지 않을 경우 재사용하여 성능 저하를 해소한다. 버전 정합성(Version Consistency) 유지 상황에서는 정합성을 반영한 버전이 사용된다.

  • 프로토타입

    #include <tdlcall.h>
    int tdlcall(char *funcname, void *args, long *urcode, int flags)
  • 파라미터

    파라미터설명
    funcname동적 모듈의 함수명이다. (최대 크기 : TDL_FUNCNAME_SIZE – 1)
    args호출될 동적 모듈 함수의 파라미터이다.
    urcode호출된 동적 모듈 함수의 반환값이다.
    flagsTDLTRAN으로 설정이 가능하며 이 경우에 urcode로 반드시 Global Sequence 번호를 전달해야 한다. 사용하지 않을 경우 TDL_NOFLAGS로 설정한다.
  • 반환값

    반환값설명
    TDL_OK성공적으로 종료한 경우이다.
    TDL_OPEN_ERRORdlopen()을 사용할 때 에러가 발생한 경우이다.
    TDL_SYM_ERRORdlsym()을 사용할 때 에러가 발생한 경우이다.
    TDL_CLOSE_ERRORdlclose()를 사용할 때 에러가 발생한 경우이다.
    TDL_SYSTEM_ERROR기타 시스템 콜을 사용하다가 에러가 발생한 경우이다.
    TDL_INT _ERROR라이브러리 내부에서 오류가 발생한 경우이다.
    TDL_ENOFUNC해당 모듈이나 함수를 찾을 수 없다.
    TDL_ENV_ERROR환경변수 설정에 오류가 있다.
    TDL_VER_ERRORTDL 공유 메모리 버전과 환경 파일(tdl.cfg) 버전이 일치하지 않는다.
    TDL_ARG _ERROR잘못된 파라미터가 설정되었다.
    TDL_ENOLIB지정한 라이브러리를 찾을 수 없다.
    TDL_TRAN_ERROR버전 정합성 처리 중 에러가 발생했다.
    TDL_EINACTIVE모듈이 일시적으로 사용 중지된 상태이다.

3.3. tdlcall2

최신 버전의 동적 모듈 함수를 호출하는 함수로 라이브러리명과 함수명을 키로 사용한다. 동적 모듈 함수는 반드시 long funcname(void *args) 형태의 원형을 가져야 한다. 라이브러리명과 함수명을 키로 사용하는 것을 제외하고는 tdlcall() 함수와 동일한 기능을 제공한다.

동적 모듈 함수는 반드시 long funcname(void *args) 형태의 원형을 가져야 한다. TDL 환경 파일(tdl.cfg)에 VERSION=3으로 설정되었을 때 사용 가능하다.

  • 프로토타입

    #include <tdlcall.h>
    int tdlcall2(char *libname, char *funcname, void *args, long *urcode, int flags)
  • 파라미터

    파라미터설명
    libname동적 모듈의 라이브러리명이다. (최대 크기 : TDL_FUNCNAME_SIZE – 1)
    funcname동적 모듈의 함수명이다. (최대 크기 : TDL_FUNCNAME_SIZE – 1)
    args호출될 동적 모듈 함수의 파라미터이다.
    urcode호출된 동적 모듈 함수의 반환값이다.
    flagsTDLTRAN으로 설정이 가능하며 이 경우에 urcode로 반드시 Global Sequence 번호를 전달해야 한다. 사용하지 않을 경우 TDL_NOFLAGS로 설정한다.
  • 반환값

    반환값설명
    TDL_OK성공적으로 종료한 경우이다.
    TDL_OPEN_ERRORdlopen()을 사용할 때 에러가 발생한 경우이다.
    TDL_SYM_ERRORdlsym()을 사용할 때 에러가 발생한 경우이다.
    TDL_CLOSE_ERRORdlclose()를 사용할 때 에러가 발생한 경우이다.
    TDL_SYSTEM_ERROR기타 시스템 콜을 사용하다가 에러가 발생한 경우이다.
    TDL_INT _ERROR라이브러리 내부에서 오류가 발생한 경우이다.
    TDL_ENOFUNC해당 모듈이나 함수를 찾을 수 없다.
    TDL_ENV_ERROR환경변수 설정에 오류가 있다.
    TDL_VER_ERRORTDL 공유 메모리 버전과 환경 파일(tdl.cfg) 버전이 일치하지 않는다.
    TDL_ARG _ERROR잘못된 파라미터가 설정되었다.
    TDL_ENOLIB지정한 라이브러리를 찾을 수 없다.
    TDL_TRAN_ERROR버전 정합성 처리 중 에러가 발생했다.
    TDL_EINACTIVE모듈이 일시적으로 사용 중지된 상태이다.

3.4. tdlcall2v

최신 버전의 동적 모듈 함수를 호출하는 함수로 라이브러리명과 함수명을 키로 사용한다. 동적 모듈 함수는 반드시 long funcname(int argc, char *argv[]) 형태의 원형을 가져야 한다.

라이브러리명과 함수명을 키로 사용하는 것을 제외하고는 tdlcall() 함수와 동일한 기능을 제공한다. TDL 환경 파일(tdl.cfg)에 VERSION=3으로 설정되었을 때 사용 가능하다.

  • 프로토타입

    #include <tdlcall.h>
    int tdlcall2v(char *libname, char *funcname, int argc, char *argv[], 
                 long *urcode, int flags)
  • 파라미터

    파라미터설명
    libname동적 모듈의 라이브러리명이다. (최대 크기 : TDL_FUNCNAME_SIZE – 1)
    funcname동적 모듈의 함수명이다. (최대 크기 : TDL_FUNCNAME_SIZE – 1)
    argc호출될 동적 모듈 함수의 파라미터 개수이다.
    argv호출될 동적 모듈 함수의 파라미터 벡터이다.
    urcode호출된 동적 모듈 함수의 반환값이다.
    flagsTDLTRAN으로 설정이 가능하며 이 경우에 urcode로 반드시 Global Sequence 번호를 전달해야 한다. 사용하지 않을 경우 TDL_NOFLAGS로 설정한다.
  • 반환값

    반환값설명
    TDL_OK성공적으로 종료한 경우이다.
    TDL_OPEN_ERRORdlopen()을 사용할 때 에러가 발생한 경우이다.
    TDL_SYM_ERRORdlsym()을 사용할 때 에러가 발생한 경우이다.
    TDL_CLOSE_ERRORdlclose()를 사용할 때 에러가 발생한 경우이다.
    TDL_SYSTEM_ERROR기타 시스템 콜을 사용하다가 에러가 발생한 경우이다.
    TDL_INT _ERROR라이브러리 내부에서 오류가 발생한 경우이다.
    TDL_ENOFUNC해당 모듈이나 함수를 찾을 수 없다.
    TDL_ENV_ERROR환경변수 설정에 오류가 있다.
    TDL_VER_ERRORTDL 공유 메모리 버전과 환경 파일(tdl.cfg) 버전이 일치하지 않는다.
    TDL_ARG _ERROR잘못된 파라미터가 설정되었다.
    TDL_ENOLIB지정한 라이브러리를 찾을 수 없다.
    TDL_TRAN_ERROR버전 정합성 처리 중 에러가 발생했다.
    TDL_EINACTIVE모듈이 일시적으로 사용 중지된 상태이다.

3.5. tdlcall2s

최신 버전의 동적 모듈 함수를 호출하는 함수로 라이브러리명과 함수명을 키로 사용한다. 동적 모듈 함수는 반드시 long funcname(void *input, void *output) 형태의 원형을 가져야 한다.

라이브러리명과 함수명을 키로 사용하는 것을 제외하고는 tdlcall() 함수와 동일한 기능을 제공한다. TDL 환경 파일(tdl.cfg)에 VERSION=3으로 설정되었을 때 사용 가능하다.

  • 프로토타입

    #include <tdlcall.h>
    int tdlcall2s(char *libname, char *funcname, void *input, void *output, 
                  long *urcode, int flags)
  • 파라미터

    파라미터설명
    libname동적 모듈의 라이브러리명이다. (최대 크기 : TDL_FUNCNAME_SIZE – 1)
    funcname동적 모듈의 함수명이다. (최대 크기 : TDL_FUNCNAME_SIZE – 1)
    input호출될 동적 모듈 함수의 입력 버퍼 포인터이다.
    output호출될 동적 모듈 함수의 출력 버퍼 포인터이다.
    urcode호출된 동적 모듈 함수의 반환값이다.
    flagsTDLTRAN으로 설정이 가능하며 이 경우에 urcode로 반드시 Global Sequence 번호를 전달해야 한다. 사용하지 않을 경우 TDL_NOFLAGS로 설정한다.
  • 반환값

    반환값설명
    TDL_OK성공적으로 종료한 경우이다.
    TDL_OPEN_ERRORdlopen()을 사용할 때 에러가 발생한 경우이다.
    TDL_SYM_ERRORdlsym()을 사용할 때 에러가 발생한 경우이다.
    TDL_CLOSE_ERRORdlclose()를 사용할 때 에러가 발생한 경우이다.
    TDL_SYSTEM_ERROR기타 시스템 콜을 사용하다가 에러가 발생한 경우이다.
    TDL_INT _ERROR라이브러리 내부에서 오류가 발생한 경우이다.
    TDL_ENOFUNC해당 모듈이나 함수를 찾을 수 없다.
    TDL_ENV_ERROR환경변수 설정에 오류가 있다.
    TDL_VER_ERRORTDL 공유 메모리 버전과 환경 파일(tdl.cfg) 버전이 일치하지 않는다.
    TDL_ARG _ERROR잘못된 파라미터가 설정되었다.
    TDL_ENOLIB지정한 라이브러리를 찾을 수 없다.
    TDL_TRAN_ERROR버전 정합성 처리 중 에러가 발생했다.
    TDL_EINACTIVE모듈이 일시적으로 사용 중지된 상태이다.

3.6. tdlcallva

최신 버전의 동적 모듈 함수를 호출하는 함수로 함수명을 키로 사용하는 함수이다. 동적 모듈 함수의 프로토 타입이 고정되지 않은 경우에 대해서 파라미터를 그대로 전달하여 함수를 호출한다. 단, 전달되는 인자들은 모두 <void *> 포인터 타입을 가져야 한다. 동적 모듈 함수에서도 전달받는 파라미터가 모두 <void *> 포인터 타입으로 작성되어야 한다.

TDL 환경 파일(tdl.cfg)에 VERSION=1 또는 VERSION=2로 설정된 경우 사용 가능하다.

  • 프로토타입

    #include <tdlcall.h>
    int tdlcallva(char *funcname, long urcode, int flags, int rettype, void *retval, 
                  int argc, …);
  • 파라미터

    파라미터설명
    funcname동적 모듈 함수명이다. (최대 크기 : TDL_FUNCNAME_SIZE – 1)
    urcode다른 tdlcall() 계열의 함수와 달리 Global Sequence 번호를 전달할 때만 사용한다. 사용하지 않을 경우에는 0을 입력한다.
    flagsTDLTRAN으로 설정이 가능하며 이 경우에 urcode로 반드시 Global Sequence 번호를 전달해야 한다. 사용하지 않을 경우 TDL_NOFLAGS로 설정한다.
    rettype호출될 동적 모듈 함수의 리턴 타입을 정의한다. 설정할 수 있는 값은 하단의 리턴 타입 항목을 참조한다.
    retval호출된 동적 모듈 함수의 리턴값을 저장할 버퍼의 포인터를 전달한다.
    argc호출될 동적 모듈 함수로 전달될 argument의 수를 입력한다. 현재 최대 10개까지 가능하다.
    ...호출될 동적 모듈 함수로 전달할 실제 파라미터들을 가변인자형으로 입력한다. 반드시 (void *) 포인터 타입의 파라미터를 전달해야 한다.
  • 리턴 타입 항목

    파라미터설명
    TDL_VA_CHAR호출될 동적 모듈 함수의 리턴 타입이 char 형이다.
    TDL_VA_SHORT호출될 동적 모듈 함수의 리턴 타입이 short 형이다.
    TDL_VA_INT호출될 동적 모듈 함수의 리턴 타입이 int 형이다.
    TDL_VA_LONG호출될 동적 모듈 함수의 리턴 타입이 long 형이다.
    TDL_VA_FLOAT호출될 동적 모듈 함수의 리턴 타입이 float 형이다.
    TDL_VA_DOUBLE호출될 동적 모듈 함수의 리턴 타입이 double 형이다.
    TDL_VA_PVOID호출될 동적 모듈 함수의 리턴 타입이 void * 형이다.
    TDL_VA_VOID호출될 동적 모듈 함수의 리턴 타입이 void 형이다.
  • 반환값

    반환값설명
    TDL_OK성공적으로 종료한 경우이다.
    TDL_OPEN_ERRORdlopen()을 사용할 때 에러가 발생한 경우이다.
    TDL_SYM_ERRORdlsym()을 사용할 때 에러가 발생한 경우이다.
    TDL_CLOSE_ERRORdlclose()를 사용할 때 에러가 발생한 경우이다.
    TDL_SYSTEM_ERROR기타 시스템 콜을 사용하다가 에러가 발생한 경우이다.
    TDL_INT _ERROR라이브러리 내부에서 오류가 발생한 경우이다.
    TDL_ENOFUNC해당 모듈이나 함수를 찾을 수 없다.
    TDL_ENV_ERROR환경변수 설정에 오류가 있다.
    TDL_VER_ERRORTDL 공유 메모리 버전과 환경 파일(tdl.cfg) 버전이 일치하지 않는다.
    TDL_ARG _ERROR잘못된 인자가 설정되었다.
    TDL_ENOLIB지정한 라이브러리를 찾을 수 없다.
    TDL_TRAN_ERROR버전 정합성 처리 중 에러가 발생했다.
    TDL_EINACTIVE모듈이 일시적으로 사용 중지된 상태이다.
  • 예제

    • 동적 모듈 함수

      int myfunc(double *a, double *b, double *c) {
          double sum;
          return (int)(((double)(*a) + (double)(*b) + (double)(*c))/3);
      }
      
      char * myfunc2(int *type) {
          char *msg;
          switch (*type) {
              case 1: msg = “foo”; break;
              case 2: msg = “bar”;break;
          }
          return msg;
      }
    • 호출 프로그램

      #include <tdlcall.h>
      int main(int argc, char *argv[]) {
          int n;
          long urcode;
          int retval;
          double a, b, c;
          int type;
          char *retmsg;
      
          urcode = tdlgetseqno();
          a = 2.5;
          b = 3.0;
          c = 3.5;
          if ((n = tdlcallva2(“mylib001”, “myfunc”, urcode, TDLTRAN,
                   TDL_VA_INT, &retval, 3, &a, &b, &c)) != TDL_OK) {
              error processing;
          }
      
          type = 1;
          if ((n = tdlcallva2(“mylib001”, “myfunc2”, urcode, TDLTRAN,
                   TDL_VA_PVOID, &retmsg, 1, &type)) != TDL_OK) {
              error processing;
          }
      }

3.7. tdlcallva2

최신 버전의 동적 모듈 함수를 호출하는 함수로 라이브러리명과 함수명을 키로 사용하는 함수이다. 동적 모듈 함수의 프로토타입이 고정되지 않은 경우에 대해서 파라미터를 그대로 전달하여 함수를 호출한다. 단, 전달되는 인자들은 모두 <void *> 포인터 타입을 가져야 한다. 동적 모듈 함수에서도 전달받는 파라미터가 모두 <void *> 포인터 타입으로 작성되어야 한다.

라이브러리명과 함수명을 키로 사용하는 것을 제외하고는 tdlcallva() 함수와 동일한 기능을 제공한다. TDL 환경 파일(tdl.cfg)에 VERSION=3 으로 설정된 경우 사용 가능하다.

  • 프로토타입

    #include <tdlcall.h>
    int tdlcallva2(char *libname, char *funcname, long urcode, int flags, int rettype, void *retval, int argc, …);
  • 파라미터

    파라미터설명
    libname동적 모듈 라이브러리명이다. (최대 크기 : TDL_FUNCNAME_SIZE – 1)
    funcname동적 모듈 함수명이다. (최대 크기 : TDL_FUNCNAME_SIZE – 1)
    urcode다른 tdlcall() 계열의 함수와 달리 Global Sequence 번호를 전달할 때만 사용한다. 사용하지 않을 경우에는 0을 입력한다.
    flagsTDLTRAN으로 설정이 가능하며 이 경우에 urcode로 반드시 Global Sequence 번호를 전달해야 한다. 사용하지 않을 경우 TDL_NOFLAGS로 설정한다.
    rettype호출될 동적 모듈 함수의 리턴 타입을 정의한다. 설정할 수 있는 값은 하단의 리턴 타입 항목을 참조한다.
    retval호출된 동적 모듈 함수의 리턴값을 저장할 버퍼의 포인터를 전달한다.
    argc호출될 동적 모듈 함수로 전달될 argument의 수를 입력한다. 현재 최대 10개까지 가능하다.
    ...호출될 동적 모듈 함수로 전달할 실제 파라미터들을 가변인자형으로 입력한다. 반드시 (void *) 포인터 타입의 파라미터를 전달해야 한다.
  • 리턴 타입 항목

    파라미터설명
    TDL_VA_CHAR호출될 동적 모듈 함수의 리턴 타입이 char 형이다.
    TDL_VA_SHORT호출될 동적 모듈 함수의 리턴 타입이 short 형이다.
    TDL_VA_INT호출될 동적 모듈 함수의 리턴 타입이 int 형이다.
    TDL_VA_LONG호출될 동적 모듈 함수의 리턴 타입이 long 형이다.
    TDL_VA_FLOAT호출될 동적 모듈 함수의 리턴 타입이 float 형이다.
    TDL_VA_DOUBLE호출될 동적 모듈 함수의 리턴 타입이 double 형이다.
    TDL_VA_PVOID호출될 동적 모듈 함수의 리턴 타입이 void * 형이다.
    TDL_VA_VOID호출될 동적 모듈 함수의 리턴 타입이 void 형이다.
  • 반환값

    반환값설명
    TDL_OK성공적으로 종료한 경우이다.
    TDL_OPEN_ERRORdlopen()을 사용할 때 에러가 발생한 경우이다.
    TDL_SYM_ERRORdlsym()을 사용할 때 에러가 발생한 경우이다.
    TDL_CLOSE_ERRORdlclose()를 사용할 때 에러가 발생한 경우이다.
    TDL_SYSTEM_ERROR기타 시스템 콜을 사용하다가 에러가 발생한 경우이다.
    TDL_INT _ERROR라이브러리 내부에서 오류가 발생한 경우이다.
    TDL_ENOFUNC해당 모듈이나 함수를 찾을 수 없다.
    TDL_ENV_ERROR환경변수 설정에 오류가 있다.
    TDL_VER_ERRORTDL 공유 메모리 버전과 환경 파일(tdl.cfg) 버전이 일치하지 않는다.
    TDL_ARG _ERROR잘못된 인자가 설정되었다.
    TDL_ENOLIB지정한 라이브러리를 찾을 수 없다.
    TDL_TRAN_ERROR버전 정합성처리 중 에러가 발생했다.
    TDL_EINACTIVE모듈이 일시적으로 사용 중지된 상태이다.

3.8. tdlcreate

최신 버전의 동적 모듈에서 Class Factory를 사용하여 클래스 인스턴스를 생성하는 함수로, 라이브러리명과 namespace, 클래스명을 키로 사용하고, TDL 환경 파일(tdl.cfg)에 VERSION=4로 설정되었을 때 사용 가능하다.

동적 모듈에서 Class Factory를 사용하기 위해서는 반드시 long tdlcreate_cb(char *namespace, char *classname, void *args, void *object) 형태의 Callback 함수를 구현해야 한다. Callback 함수에서는 tdlcreate()에서 전달한 파라미터 정보를 이용해서 실제 클래스 인스턴스를 생성하고, 생성된 인스턴스의 레퍼런스를 object로 전달해주도록 사용자가 구현한다.

사용자는 이 함수로 생성한 인스턴스의 사용이 완료되면 반드시 tdldestroy() 함수를 통해서 인스턴스를 파괴해야 한다. tdlcreate()로 생성한 이후 tdldestroy()로 인스턴스를 삭제하기 전에는 tdlupdate가 중간에 호출되어 동적 모듈이 새로운 버전으로 변경되어도 현재 생성되어 사용 중인 인스턴스는 기존의 버전으로 동작한다. 이 경우에는 tdldestroy()를 호출한 뒤에 다시 tdlcreate()를 호출하면 변경된 동적 모듈의 인스턴스가 생성된다.

Class Factory를 사용하기 위해서 동적 모듈은 tdlcreate_cb()와 tdldestroy_cb() Callback 함수를 구현해야 한다.

  • 프로토타입

    #include <tdlcall.h>
    int tdlcreate(char *libname, char *namespace, char *classname, void *args, void *object, long *urcode, int flags)
  • 파라미터

    파라미터설명
    libname동적 모듈의 라이브러리명이다. (최대 크기 : TDL_FUNCNAME_SIZE – 1)
    namespacenamespace를 지정한다. (최대 크기 : TDL_FUNCNAME_SIZE – 1)
    classname인스턴스를 생성할 클래스명이다. (최대 크기 : TDL_FUNCNAME_SIZE – 1)
    argstdlcreate_cb() Callback 함수로 사용자 정의 데이터를 전달할 파라미터이다.
    objecttdlcreate_cb() Callback 함수에서 생성된 클래스 인스턴스의 레퍼런스를 저장할 변수의 포인터이다. 사용자는 함수 호출이 성공하면 object 파라미터를 적절한 타입으로 변환하여 사용한다.
    urcodetdlcreate_cb() Callback 함수에서 수행된 결과의 반환값이다.
    flagsTDLTRAN으로 설정이 가능하며, 이 경우에 urcode로 반드시 Global Sequence 번호를 전달해야 한다. 사용하지 않을 경우 TDL_NOFLAGS로 설정한다.
  • 반환값

    반환값설명
    TDL_OK성공적으로 종료한 경우이다.
    TDL_OPEN_ERRORdlopen()을 사용할 때 에러가 발생한 경우이다.
    TDL_SYM_ERRORdlsym()을 사용할 때 에러가 발생한 경우이다.
    TDL_CLOSE_ERRORdlclose()를 사용할 때 에러가 발생한 경우이다.
    TDL_SYSTEM_ERROR기타 시스템 콜을 사용하다가 에러가 발생한 경우이다.
    TDL_INT _ERROR라이브러리 내부에서 오류가 발생한 경우이다.
    TDL_ENOFUNC해당 모듈이나 함수를 찾을 수 없다.
    TDL_ENV_ERROR환경변수 설정에 오류가 있다.
    TDL_VER_ERRORTDL 공유 메모리 버전과 환경 파일(tdl.cfg) 버전이 일치하지 않는다.
    TDL_ARG _ERROR잘못된 파라미터가 설정되었다.
    TDL_ENOLIB지정한 라이브러리를 찾을 수 없다.
    TDL_TRAN_ERROR버전 정합성 처리 중 에러가 발생했다.
    TDL_EINACTIVE모듈이 일시적으로 사용 중지된 상태이다.
  • Callback 함수 프로토타입

    long tdlcreate_cb(char *namespace, char *classname, void *args, void *object)
  • 파라미터

    파라미터설명
    namespacetdlcreate() 함수로부터 전달받은 namespace이다.
    classnametdlcreate() 함수로부터 전달받은 인스턴스를 생성할 클래스명이다
    args사용자 정의 데이터이다.
    objectCallback 함수에서 생성된 클래스 인스턴스의 레퍼런스를 저장할 변수의 포인터이다.

3.9. tdldestroy

최신 버전의 동적 모듈에 Class Factory를 사용해서 생성된 클래스 인스턴스를 파괴하는 함수로 라이브러리명과 namespace, 클래스명을 키로 사용하고, TDL 환경 파일(tdl.cfg)에 VERSION=4로 설정되었을 때 사용 가능하다.

동적 모듈에서 Class Factory를 사용하기 위해서는 반드시 long tdldestroy_cb(char *namespace, char *classname, void *args, void *object) 형태의 Callback 함수를 구현해야 한다. Callback 함수에서는 tdldestroy()에서 전달받은 파라미터 정보를 이용해서 클래스 인스턴스를 파괴하도록 사용자가 구현한다.

사용자는 tdlcreate()로 생성한 인스턴스의 사용이 완료되면 반드시 이 함수를 통해서 인스턴스를 파괴해야 한다. tdlcreate()로 생성한 이후 tdldestroy()로 인스턴스를 삭제하기 전에는 tdlupdate가 중간에 호출되어 동적 모듈이 새로운 버전으로 변경되어도 현재 생성되어 사용 중인 인스턴스는 기존의 버전으로 동작한다. 이 경우에는 tdldestroy()를 호출한 뒤에 다시 tdlcreate()를 호출하면 변경된 동적 모듈의 인스턴스가 생성된다.

  • 프로토타입

    #include <tdlcall.h>
    int tdldestroy(char *libname, char *namespcae, char *classname, void *args, void *object, long *urcode, int flags)
  • 파라미터

    파라미터설명
    libname동적 모듈의 라이브러리명이다. (최대 크기 : TDL_FUNCNAME_SIZE – 1)
    namespacenamespace를 지정한다. (최대 크기 : TDL_FUNCNAME_SIZE – 1)
    classname인스턴스를 생성할 클래스명이다. (최대 크기 : TDL_FUNCNAME_SIZE – 1)
    argstdldestroy_cb() Callback 함수로 사용자 정의 데이터를 전달할 파라미터이다.
    object파괴할 클래스 인스턴스의 레퍼런스를 전달한다. tdldestroy_cb() Callback 함수에서 해당 레퍼런스를 파괴한다. 반드시 tdlcreate() 함수로 생성한 object만을 사용해야 한다.
    urcodetdldestroy_cb() Callback 함수에서 수행된 결과의 반환값이다.
    flagsTDLTRAN으로 설정이 가능하며 이 경우에 urcode로 반드시 Global Sequence 번호를 전달해야 한다. 사용하지 않을 경우 TDL_NOFLAGS로 설정한다.
  • 반환값

    반환값설명
    TDL_OK성공적으로 종료한 경우이다.
    TDL_OPEN_ERRORdlopen()을 사용할 때 에러가 발생한 경우이다.
    TDL_SYM_ERRORdlsym()을 사용할 때 에러가 발생한 경우이다.
    TDL_CLOSE_ERRORdlclose()를 사용할 때 에러가 발생한 경우이다.
    TDL_SYSTEM_ERROR기타 시스템 콜을 사용하다가 에러가 발생한 경우이다.
    TDL_INT _ERROR라이브러리 내부에서 오류가 발생한 경우이다.
    TDL_ENOFUNC해당 모듈이나 함수를 찾을 수 없다.
    TDL_ENV_ERROR환경변수 설정에 오류가 있다.
    TDL_VER_ERRORTDL 공유 메모리 버전과 환경 파일(tdl.cfg) 버전이 일치하지 않는다.
    TDL_ARG _ERROR잘못된 파라미터가 설정되었다.
    TDL_ENOLIB지정한 라이브러리를 찾을 수 없다.
    TDL_TRAN_ERROR버전 정합성 처리 중 에러가 발생했다.
    TDL_EINACTIVE모듈이 일시적으로 사용 중지된 상태이다.
  • 콜백 함수 프로토타입

    long tdldestroy_cb(char *namespace, char *classname, void *args, void *object)
  • 파라미터

    파라미터설명
    namespacetdlcreate() 함수로부터 전달받은 namespace이다.
    classnametdlcreate() 함수로부터 전달받은 인스턴스를 생성할 클래스명이다
    args사용자 정의 데이터이다.
    objectCallback 함수에서 파괴할 클래스 인스턴스의 레퍼런스이다.

3.10. tdlerror

tdlcall()에 대한 에러가 발생했을 때 문자열 형태로 변환하는 함수이다. 직전의 tdlcall() 함수에서 에러가 발생한 경우 에러에 대한 자세한 정보를 문자열 형태로 전달한다. 주의할 점은 반환값으로 전달되는 포인터는 내부의 정적변수에 대한 포인터이므로 다음 tdlcall()을 호출할 경우에 다른 내용으로 채워져 버릴 수 있다는 것이다.

따라서 이 내용을 보관하거나 수정하고 싶으면 다른 변수로 복사를 하여 사용해야 한다.

  • 프로토타입

    #include <tdlcall.h>
    char* tdlerror(int retval)
  • 파라미터

    파라미터설명
    retval직전 tdlcall() 함수의 반환값이다.
  • 반환값

    반환값설명
    dlopen failtdlcall()의 반환값으로 TDL_OPEN_ERROR를 받을 경우이다.
    dlsym faitdlcall()의 반환값으로 TDL_SYM_ERROR를 받을 경우이다.
    dlclose failtdlcall()의 반환값으로 TDL_CLOSE_ERROR를 받을 경우이다.
    etc system call errortdlcall()의 반환값으로 TDL_SYSTEM_ERROR를 받을 경우이다.
    TDL lib internal errortdlcall()의 반환값으로 TDL_INT_ERROR를 받을 경우이다.
    funcname not foundtdlcall()의 반환값으로 TDL_ENOFUNC를 받을 경우이다.
    environment not foundtdlcall()의 반환값으로 TDL_ENV_ERROR를 받을 경우이다.
    shared version mismatchtdlcall()의 반환값으로 TDL_VER_ERROR를 받을 경우이다.
    invalid argumentstdlcall()의 반환값으로 TDL_ARG_ERROR를 받을 경우이다.
    library not foundtdlcall()의 반환값으로 TDL_ENOLIB를 받을 경우이다.
    transaction errortdlcall()의 반환값으로 TDL_TRAN_ERROR를 받을 경우이다.
    inactive funcationtdlcall()의 반환값으로 TDL_EINACTIVE를 받을 경우이다.

3.11. tdlgetseqno

Global sequence 번호를 가져오는 함수로 이를 반환값으로 반환한다.

  • 프로토타입

    #include <tdlcall.h>
    unsigned int tdlgetseqno(void)
  • 반환값

    반환값설명
    0보다 큰 값함수 호출에 성공한 경우이다.
    0함수 호출에 실패한 경우이다. “3.10. tdlerror”로 확인할 수 있다.

3.12. tdlstart

명시적 버전 정합성(Explicit Version Consistency) 유지가 시작된다.

  • 프로토타입

    #include <tdlcall.h>
    int tdlstart(void)
  • 반환값

    반환값설명
    TDL_OK함수 호출에 성공한 경우이다.
    TDL_TRAN _ERROR함수 호출 이전에 tdlstart()가 수행된 경우이다. 자세한 내용은 “3.2. tdlcall”을 참고한다.

3.13. tdlend

명시적 버전 정합성(Explicit Version Consistency) 유지가 종료된다.

  • 프로토타입

    #include <tdlcall.h>
    int tdlend(void)
  • 반환값

    반환값설명
    TDL_OK함수가 성공적으로 수행된 경우이다.
    TDL_TRAN _ERROR함수 호출 이전에 tdlstart()가 수행된 경우이다. 자세한 내용은 “3.2. tdlcall”을 참고한다.

3.14. tdlsuspend

일시적으로 버전 정합성 유지를 중지한다. sd(suspend descriptor)를 반환값으로 반환하며, 최대 동시 sd 개수는 8이다.

  • 프로토타입

    #include <tdlcall.h>
    int tdlsuspend(void)
  • 반환값

    반환값설명
    0보다 크거나 같은 값함수 호출에 성공한 경우이다.
    TDL_TRAN _ERROR현재 버전 정합성 유지 모드가 아닌 경우이다. 자세한 내용은 “3.2. tdlcall”을 참고한다.

3.15. tdlresume

일시적으로 중지된 버전 정합성 유지를 재개하는 함수이다.

  • 프로토타입

    #include <tdlcall.h>
    int tdlresume(int sd)
  • 프로토타입

    파라미터설명
    sdtdlsuspend() 함수에서 전달받은 Descriptor이다.
  • 반환값

    반환값설명
    TDL_OK성공적으로 종료된 경우이다.
    TDL_TRAN _ERRORsd가 유효한 값이 아닌 경우이다. 자세한 내용은 “3.2. tdlcall”을 참고한다.

3.16. tdlclose

해당 모듈의 레퍼런스 카운트를 0으로 초기화하거나, 모듈을 직접 메모리에서 해제한다.

  • 프로토타입

    #include <tdlcall.h>
    int tdlclose(char *name, int flags)
  • 파라미터

    파라미터설명
    name해당하는 모듈명이다.
    flags0으로 설정할 경우 해당하는 모듈의 레퍼런스 카운트만 0으로 초기화하고, 메모리에서 해제하지 않는다. TDLCLOSE_HARD로 설정할 경우 dlclose하여 해당 모듈을 메모리에서 해제한다.
  • 반환값

    반환값설명
    TDL_OK함수 호출에 성공한 경우이다.
    TDL_ENOLIB해당하는 이름의 모듈이 존재하지 않는 경우이다.

3.17. tdlload

tdlcall()을 통해 특정 모듈을 최초로 호출할 경우, 공유 메모리의 Hashtable 검색 및 라이브러리의 메모리 적재로 인해 약간의 시간이 소모된다. 이로 인해 최초 호출이 약간 지연되는 현상을 막기 위한 방법으로 Hashtable 검색 및 라이브러리 적재를 tdlcall()을 하기 전에 미리 수행하여 로컬 캐시에 해당 모듈의 정보를 저장하는 함수이다.

TDL 환경 파일(tdl.cfg)에 VERSION=1 또는 VERSION=2로 설정된 경우 tdlload()를 사용하고, VERSION=3일 경우에는 tdlload2(), VERSION=4일 경우에는 tdlload3()을 사용한다.

  • 프로토타입

    #include <tdlcall.h>
    int tdlload(char *funcname, int flags)
  • 파라미터

    파라미터설명
    funcname로드를 수행할 함수명이다.
    flags현재 사용하지 않는다.
  • 반환값

    반환값설명
    0함수 호출에 성공한 경우이다.
    TDL_ENOFUNC함수 인자로 libname이나 funcname이 NULL이 전달되거나 Hashtable에 존재하지 않는 값을 전달했을 경우이다.
    TDL_OPEN_ERRORHashtable에 존재하는 동적 라이브러리(Dynamic Library)를 메모리로 적재하는 것이 실패한 경우이다.
    TDL_SYSTEM_ERROR로컬 캐시를 생성하기 위한 시스템 자원 할당이 실패한 경우이다.

3.18. tdlload2

tdlload와 동일하므로 자세한 내용은 “3.17. tdlload”를 참고한다.

  • 프로토타입

    #include <tdlcall.h>
    int tdlload2(char *libname, char *funcname, int flags)
  • 파라미터

    파라미터설명
    libname로드를 수행할 라이브러리명이다.
    funcname로드를 수행할 함수명이다.
    flags현재 사용하지 않는다.
  • 반환값

    tdlload와 동일하므로 자세한 내용은 “3.17. tdlload”를 참고한다.

3.19. tdlinit

공유 메모리를 초기 설정하는 함수이다.

  • 프로토타입

    #include <tdlcall.h>
    int tdlinit(int flags)
  • 파라미터

    파라미터설명
    flags현재 사용되지 않는다.
  • 반환값

    반환값설명
    TDL_OK함수 호출에 성공한 경우이다.
    0보다 작은 값함수 호출에 실패한 경우이다. “3.10. tdlerror”로 확인할 수 있다.

3.20. tdldone

공유 메모리를 초기화하는 함수이다.

  • 프로토타입

    #include <tdlcall.h>
    int tdldone(int flags)
  • 파라미터

    파라미터설명
    flags현재 사용되지 않는다.
  • 반환값

    반환값설명
    TDL_OK함수 호출에 성공한 경우이다.
    0보다 작은 값함수 호출에 실패한 경우이다. “3.10. tdlerror”로 확인할 수 있다.

3.21. tdlfind

모듈의 인덱스를 찾는 함수이다. TDL 환경 파일(tdl.cfg)에 VERSION=1 또는 VERSION=2로 설정된 경우 사용한다.

  • 프로토타입

    #include <tdlcall.h>
    int tdlfind(char *funcname, int flags)
  • 파라미터

    파라미터설명
    funcname찾으려는 함수명이다.
    flags현재 사용되지 않는다.
  • 반환값

    반환값설명
    0이나 0보다 큰 값함수 호출에 성공한 경우이다.
    0보다 작은 값함수 호출에 실패한 경우이다. “3.10. tdlerror”로 확인할 수 있다.

3.22. tdlfind2

모듈의 인덱스를 찾는 함수이다. TDL 환경 파일(tdl.cfg)의 VERSION=3으로 설정된 경우 사용한다.

  • 프로토타입

    #include <tdlcall.h>
    int tdlfind2(char *libname, char *funcname, int flags)
  • 파라미터

    파라미터설명
    libname찾으려는 라이브러리명이다.
    funcname찾으려는 함수명이다.
    flags현재 사용되지 않는다.
  • 반환값

    반환값설명
    0이나 0보다 큰 값함수 호출에 성공한 경우이다.
    0보다 작은 값함수 호출에 실패한 경우이다. “3.10. tdlerror”로 확인할 수 있다.

3.23. tdlstat

TDL 통계 정보를 출력하는 함수이다.

TDL 환경 파일(tdl.cfg)에 VERSION=1 또는 VERSION=2로 설정된 경우 사용하고, 환경설정에서 MONITOR=Y로 설정해야 한다.

  • 프로토타입

    #include <tdlcall.h>
    int tdlstat(char *funcname, struct timeval svc_time, struct timeval cpu_time)
  • 파라미터

    파라미터설명
    funcname통계 정보를 수집할 함수명이다.
    svc_time통계 정보 중 서비스 타임이 기록되는 변수이다.
    cpu_time통계 정보 중 CPU 타임이 기록되는 변수이다.
  • 반환값

    반환값설명
    TDL_OK함수 호출에 성공한 경우이다.
    0보다 작은 값함수 호출에 실패한 경우이다. “3.10. tdlerror”로 확인할 수 있다.

3.24. tdlstat2

TDL 통계 정보를 출력하는 함수이다.

TDL 환경 파일(tdl.cfg)에 VERSION=3으로 설정된 경우 사용하고, 환경설정에서 MONITOR=Y로 설정해야 한다.

  • 프로토타입

    #include <tdlcall.h>
    int tdlstat2(char *libname, char *funcname, struct timeval svc_time, struct timeval cpu_usrtime, struct timeval cpu_systime)
  • 파라미터

    파라미터설명
    libname통계 정보를 수집할 라이브러리명이다.
    funcname통계 정보를 수집할 함수명이다.
    svc_time통계 정보 중 서비스 타임이 기록되는 변수이다.
    cpu_usrtime통계 정보 중 유저 CPU 타임이 기록되는 변수이다.
    cpu_systime통계 정보 중 시스템 CPU 타임이 기록되는 변수이다.
  • 반환값

    반환값설명
    TDL_OK함수 호출에 성공한 경우이다.
    0보다 작은 값함수 호출에 실패한 경우이다. “3.10. tdlerror”로 확인할 수 있다.