제2장 FDL 함수

내용 목차

2.1. 개요
2.2. fballoc
2.3. fbbufop
2.4. fbbufop_proj
2.5. fbcalcsize
2.6. fbchg_tu
2.7. fbchg_tut
2.8. fbdelall
2.9. fbdelall_tu
2.10. fbdelete
2.11. fbextread
2.12. fbfldcount
2.13. fbfprint
2.14. fbfree
2.15. fbftos
2.16. fbget
2.17. fbgetalloc_tu
2.18. fbgetalloc_tut
2.19. fbget_fbsize
2.20. fbget_fldkey
2.21. fbget_fldname
2.22. fbget_fldno
2.23. fbget_fldtype
2.24. fbgetlast_tu
2.25. fbget_strfldtype
2.26. fbget_tu
2.27. fbget_tut
2.28. fbget_unused
2.29. fbget_used
2.30. fbgetf
2.31. fbgetlen
2.32. fbgetnth
2.33. fbgetntht
2.34. fbgetval
2.35. fbgetvali
2.36. fbgetval_last_tu
2.37. fbgetvall_tu
2.38. fbgetvals
2.39. fbgetvals_tu
2.40. fbgetvalt
2.41. fbinit
2.42. fbinsert
2.43. fbisfbuf
2.44. fbispres
2.45. fbkeyoccur
2.46. fbmake_fldkey
2.47. fbnext_tu
2.48. fbprint
2.49. fbput
2.50. fbputt
2.51. fbrealloc
2.52. fbread
2.53. fbsnull
2.54. fbstelinit
2.55. fbstinit
2.56. fbstof
2.57. fbstrerror
2.58. fbtypecvt
2.59. fbupdate
2.60. fbwrite
2.61. getfberrno
2.62. getfberror

본 장에서는 FDL에서 제공하는 함수에 대한 사용법과 예제에 대해 설명한다.

2.1. 개요

다음은 FDL 함수의 목록이다.

함수명설명
fballoc필드 버퍼의 크기를 계산하고 메모리를 할당한다.
fbbufop필드 버퍼 내에서 필드 데이터의 이동, 복사, 비교 등을 입력 파라미터인 mode에 따라 처리한다.
fbbufop_proj특정 필드 버퍼의 필드 데이터를 지정한 필드 버퍼에 복사한다.
fbcalcsize필드 버퍼를 메모리에 할당받을 때 적정한 메모리를 할당받기 위하여 필드 버퍼의 크기를 계산한다.
fbchg_tu필드 버퍼에서 입력 파라미터에서 지정한 필드키의 필드 순번의 데이터를 변경한다.
fbchg_tut필드 버퍼에서 입력 파라미터에서 지정한 필드키의 필드 순번의 데이터를 사용자가 지정한 타입에서 필드키의 타입으로 변환한다.
fbdelall필드 버퍼에서 특정 필드키에 저장되어 있는 전체 데이터를 삭제한다.
fbdelall_tu필드키 배열에 지정된 모든 필드키에 저장되어 있는 모든 필드 데이터를 삭제한다.
fbdelete메모리에 할당한 필드 버퍼에서 지정한 필드키의 지정한 필드 순번에 해당하는 특정 필드의 데이터를 삭제한다.
fbextread지정하는 특정 파일로부터 필드키와 그에 해당하는 값을 읽어서 메모리에 할당한 필드 버퍼에 저장한다.
fbfldcount필드 버퍼에 현재 저장되어 있는 모든 필드의 수를 반환한다.
fbfprint필드 버퍼에 저장되어 있는 필드 데이터를 지정한 파일 스트림에 출력한다.
fbfree할당된 필드 버퍼의 메모리를 해제한다.
fbftos필드 버퍼에 저장되어 있는 데이터를 matching되는 구조체 버퍼로 전송한다.
fbget필드 버퍼에서 지정한 필드키에 해당하는 필드 데이터를 읽어 온다.
fbgetalloc_tu지정한 필드키의 필드 순번에 해당하는 필드 데이터를 읽어 온다.
fbgetalloc_tut필드키의 필드 순번에 해당하는 필드 데이터를 지정한 타입으로 필요한 길이만큼 버퍼를 새로 할당받아 저장하여 반환한다.
fbget_fbsize할당된 필드 버퍼의 크기를 반환한다.
fbget_fldkey필드 테이블(FDLFILE에 설정된 FDL 파일)과 관련하여 지정한 필드명과 matching되는 식별자를 반환한다.
fbget_fldname필드 테이블(FDLFILE에 설정된 FDL 파일)과 관련하여 지정한 필드키와 matching되는 필드 이름을 반환한다.
fbget_fldno필드 테이블을 생성하기 위해 필요한 데이터 중 지정한 필드키와 matching되는 필드 번호를 반환한다.
fbget_fldtype지정한 필드키의 필드형을 정수로 반환한다.
fbgetlast_tu필드 버퍼에서 지정한 필드키에 저장되어 있는 필드 데이터 중 마지막 순번의 데이터를 반환한다.
fbget_strfldtype지정한 필드키에 저장될 필드 데이터의 타입을 문자열로 반환한다.
fbget_tu필드 버퍼에서 지정한 필드키의 지정한 필드 순번에 해당하는 필드의 데이터를 읽어 온다.
fbget_tut지정한 필드키의 필드 순번에 해당하는 필드 데이터를 지정한 타입으로 변환하여 반환한다.
fbget_unused필드 버퍼 중 아직 사용되지 않은 필드 버퍼의 크기를 계산하여 Byte 단위로 반환한다.
fbget_used필드 버퍼 중 현재 사용 중인 필드 버퍼의 크기를 계산하여 Byte 단위로 반환한다.
fbgetf필드 버퍼에 저장되어 있는 필드 데이터를 순차적으로 읽어 온다.
fbgetlen필드 버퍼에 지정한 필드키의 필드 순번에 해당하는 필드 데이터의 길이를 반환한다.
fbgetnth필드 버퍼에서 지정한 필드키에 저장되어 있는 필드 데이터 중 지정한 데이터가 저장되어 있는 필드의 개수을 반환한다.
fbgetntht지정한 필드키에 저장되어 있는 필드 데이터 중 지정한 데이터가 저장되어 있는 필드 순번을 반환한다.
fbgetval필드 버퍼에서 지정한 필드키에 저장되어 있는 필드 데이터 중 지정한 필드 순번에 해당하는 필드 데이터를 반환한다.
fbgetvali필드 버퍼에서 지정한 필드키에 저장되어 있는 데이터 중 지정한 필드 순번에 해당하는 필드 데이터를 정수로 변환하여 반환한다.
fbgetval_last_tu필드 버퍼에서 지정한 필드키에 저장되어 있는 필드 데이터 중 마지막 순번의 데이터를 반환한다.
fbgetvall_tu필드 버퍼에서 지정한 필드키의 필드 순번의 데이터를 long형으로 변환하여 반환한다.
fbgetvals필드 버퍼에서 지정한 필드키에 저장되어 있는 필드 데이터 중 지정한 필드 순번의 필드 데이터를 그 필드형에 상관없이 모두 문자열로 변환하여 반환한다.
fbgetvals_tu필드 버퍼에서 필드키에 저장되어 있는 필드 데이터를 반환한다.
fbgetvalt필드 버퍼에서 지정한 필드키에 저장되어 있는 필드 데이터 중 지정한 필드 순번에 해당하는 필드 데이터를 지정한 타입(totype)으로 변환하여 반환한다.
fbinit메모리에 할당된 필드 버퍼를 초기화한다.
fbinsert메모리에 할당된 필드 버퍼에 지정한 필드키의 필드 순번에 해당되는 데이터를 반환한다.
fbisfbuf지정한 필드 버퍼가 메모리에 할당받은 유효한 버퍼인지 확인한다.
fbispres필드 버퍼에 지정한 필드키의 필드 순번에 필드 데이터가 존재하는지 확인한다.
fbkeyoccur필드 버퍼에서 지정한 필드키에 저장되어 있는 모든 필드의 개수를 반환한다.
fbmake_fldkey새로운 필드키를 동적으로 생성한다.
fbnext_tu필드 버퍼에서 다음 필드키와 필드 데이터를 반환한다.
fbprint현재 필드 버퍼의 내용을 정해진 형식에 따라 표준 출력한다.
fbput메모리에 할당된 필드 버퍼에 새로운 필드를 추가한다.
fbputt메모리에 할당된 필드 버퍼에 새로운 필드를 추가한다.
fbrealloc메모리에 할당된 필드 버퍼의 크기가 부족할 경우 메모리의 크기를 늘려서 다시 할당한다.
fbread지정한 파일 스트림으로부터 데이터를 읽어서 메모리에 할당된 필드 버퍼에 필드 데이터로 로드한다.
fbsnull필드 버퍼에서 지정한 필드키의 필드 순번과 mapping되는 구조체의 멤버 변수가 NULL인지 확인한다.
fbstelinit입력 파라미터에서 지정한 구조체의 멤버 변수를 개별적으로 NULL로 초기화한다.
fbstinit입력 파라미터에서 지정한 구조체 변수를 초기화한다.
fbstofC 구조체 버퍼(stname)에 저장되어 있는 데이터를 matching되는 필드 버퍼로 전송한다.
fbstrerror필드 버퍼와 관련된 API 함수를 수행할 때 발생하는 에러 코드에 해당하는 내용을 문자열로 반환한다.
fbtypecvt지정한 데이터형의 필드 데이터를 지정한 형으로 변환하여 반환한다.
fbupdate필드 버퍼에 입력 파라미터에 지정한 필드키의 필드 순번 위치로 지정한 데이터를 이미 저장되어 있는 필드 데이터와 변경한다.
fbwrite메모리에 할당된 필드 버퍼의 내용을 iop에 지정한 파일 스트림에 저장한다.
getfberrno필드 버퍼와 관련된 API 함수를 수행하는 도중 에러가 발생하였을 경우 에러 코드를 반환한다.
getfberror필드 버퍼와 관련된 API 함수를 수행하는 도중 에러가 발생하였을 경우 에러 코드를 반환한다.

2.2. fballoc

필드 버퍼의 크기를 계산하고 메모리를 할당하는 함수이다.

f~(), t~(), t~()를 조합한 형태이다. 함수에서 사용할 필드의 개수와 데이터의 길이를 파라미터로 전달하면 필드 버퍼의 크기를 계산하고 계산된 크기만큼의 필드 버퍼를 메모리에 할당한다.

할당되는 메모리의 크기=count*sizeof(int) + datalen + 필드키 헤더 크기

파라미터로 전달된 값으로 계산한 결과가 1024Byte보다 작은 경우에는 기본값으로 1024Byte가 할당된다. 함수를 사용하면 사용할 크기만큼만 메모리를 할당받으므로 메모리의 낭비를 막을 수 있다. 이 함수로 할당받은 버퍼를 사용한 후에는 반드시 fbfree()를 사용하여 해제해야 한다.

  • 프로토타입

    #include <fbuf.h>
    #include <atmi.h>
    FBUF *fballoc(int count, FLDLEN datalen)
  • 파라미터

    파라미터설명
    count데이터를 저장할 필드의 개수를 지정한다.
    datalen필드 버퍼에 저장될 데이터의 전체 크기를 Byte 단위로 지정한다.
  • 반환값

    반환값설명
    메모리 포인터함수 호출에 성공한 경우이다.
    NULL함수 호출에 실패한 경우이다(fberror에 에러 코드가 설정된다).
  • 오류

    fberrno에는 다음 값이 설정된다.

    에러 코드설명
    FBEMALLOC시스템 에러로, 필드 버퍼를 메모리에 할당하는 것에 실패한 경우이다.
  • 예제

    #include <fbuf.h>
    #include <atmi.h>
    ...
    FBUF *fbuf;
    if ((fbuf = fballoc(100, 1000)) == NULL) {
        printf(“fballoc failed, errno = %d\n”, fberror);
        ...
    /* result allocated size : 1408 bytes */

    필드 버퍼를 메모리에 할당하는 다른 방법으로 tpalloc()을 사용한다.

    다음과 같이 tpalloc()의 세 번째 파라미터에 0을 입력하면 기본값인 1024Byte가 할당된다. 파라미터에 1024Byte 보다 작은 수를 입력해도 기본값인 1024Byte가 할당된다.

    . . .
    FBUF *fbuf;
    if ((fbuf = (FBUF *)tpalloc(“FIELD”, NULL, 0)) == NULL) {
        printf(“fballoc failed, errno = %d\n”, fberror);
        ........
    /* result allocated size : 1024 bytes */
  • 관련 함수

    fbisfbuf(), fbcalcsize(), tpalloc(), fbinit()

2.3. fbbufop

필드 버퍼 내에서 필드 데이터의 이동, 복사, 비교 등을 입력 파라미터인 mode에 따라 처리하는 함수이다. fbbufop()의 파라미터 중 dest와 src 필드 버퍼는 같은 버퍼를 사용할 수 없고 반드시 다른 메모리에 할당된 버퍼를 사용해야 한다.

  • 프로토타입

    #include <fbuf.h>
    #include <atmi.h>
    int fbbufop(FBUF *dest, FBUF *src, int mode)
  • 파라미터

    파라미터설명
    destfballoc() 또는 tpalloc()으로 메모리에 할당된 필드 버퍼이다. src에 있는 내용을 dest에 mode에 따라 저장한다.
    srcfballoc() 또는 tpalloc()으로 메모리에 할당된 필드 버퍼이다. 변경될 값을 가진 버퍼이다.
    modeProcess mode 중 하나를 설정한다.

    다음은 Process mode에 대한 설명이다.

    Process mode설명
    FBMOVE

    src 필드 버퍼의 내용을 dest 필드 버퍼로 복사한다.

    이 모드에서는 dest 파라미터에 string 또는 carray 버퍼를 사용할 수 있다. string 또는 carray 버퍼를 사용하려면 dest 파라미터를 사용할 때 필드 버퍼(FBUF *)로 type casting을 한다.

    FBCOPYsrc 필드 버퍼의 내용을 dest 필드 버퍼로 복사한다. 이 모드에서는 반드시 dest, src 파라미터가 모두 필드 버퍼여야 한다.

    FBCOMP

    다음은 설정값에 대한 설명이다.

    • 0 또는 1 : dest와 src 필드 버퍼의 내용을 비교하여 matching되는 경우이다. 0을 반환하는 경우는 2개의 필드 버퍼의 value, 구조, 개수, 순서 등이 완전히 일치한다. 1을 반환하는 경우는 구조, 개수, 순서 등이 모두 일치하지만 value는 일치하지 않는다.

    • -1 : dest와 src 필드 버퍼의 내용을 비교하여 matching되지 않는 경우이다.

    FBCONCATsrc 필드 버퍼의 내용을 dest 필드 버퍼에 덧붙이는 경우로 dest 필드 버퍼에 기존 데이터와 src 필드 버퍼의 내용이 저장된다.
    FBJOIN필드키와 필드 순번이 matching되는 필드에 한해 해당 데이터를 src 필드 버퍼에서 dest 필드 버퍼에 복사한다. 단, dest 필드 버퍼에 기존에 존재하던 데이터는 모두 사라지므로 주의한다.
    FBOJOINFBJOIN 모드와 유사하게 동작하지만 함수를 수행하고 난 후 필드키와 필드 순번이 matching되지 않는 필드의 데이터는 수행하기 전의 상태로 보존된다.
    FBUPDATEFBOJOIN 모드와 유사하게 동작한다. 필드키와 필드 순번이 matching되는 필드의 데이터를 src 필드 버퍼에서 dest 필드 버퍼에 복사하는 것은 FBOJOIN 모드와 유사하다. 다만 FBUPDATE 모드는 필드키와 필드 순번이 matching되지 않는 src 필드 버퍼에 있는 필드의 데이터까지도 dest 필드 버퍼에 복사된다.
  • 반환값

    반환값설명
    1함수 호출에 성공한 경우이다.
    -1함수 호출에 실패한 경우이다(fberror에 에러 코드가 설정된다).
  • 오류

    fberrno에는 다음 값 중 하나가 설정된다.

    에러 코드설명
    FBENOSPACE필드 버퍼에 데이터를 저장하거나 복사할 공간이 부족할 경우 fberror는 FBENOSPACE로 설정된다.
    FBEMALLOC시스템 에러로, 필드 버퍼를 메모리에 할당하는 것을 실패할 경우 fberror는 FBEMALLOC으로 설정된다.
    FBEINVAL입력 파라미터로 지정된 값 중 유효하지 않은 파라미터가 있는 경우를 의미한다.
  • 예제

    #include "demo_fdl.h"
    ……
    main()
    {
        FBUF *destbuf, *srcbuf;
        …
        destbuf=fballoc(5,5);
        …
        fbput(destbuf, INPUT, "5555", 0);
        fbput(destbuf, INPUT, "7777", 0);
        fbput(destbuf, OUTPUT, "3333", 0);
        fbput(destbuf, SEQNO, "8888", 0);
    
        srcbuf=fballoc(5,5);
        …
        fbput(srcbuf, INPUT, "1111", 0);
        fbput(srcbuf, OUTPUT, "2222", 0);
        fbput(srcbuf, CORPNO, "3333", 0);
    
        /* Mode를 select할 수 있게 한다. */
        …
        printf("input : "); 
        scanf("%d", &a);
    
        switch(a)
        {
            /*FBMOVE mode */
            case 1:
                iRet=fbbufop(destbuf, srcbuf, FBMOVE);
                …
    
                fbprint(destbuf);
                break;
            /* destbuf : “1111”, “2222”, “3333”*/
    
            /*FBCOMP mode */
            case 2:
                iRet=fbbufop(destbuf, srcbuf, FBCOMP);
                printf("ret = %d\n", iRet);
                if(iRet < 0) {
                   printf("Do not match!!!\n");
                   fbfree(destbuf);
                   fbfree(srcbuf);
                   exit(0);
                }
                printf("Match!!!\n");
                break;
            /* “Do not match!!! */
    
            /*FBCOPY mode */
            case 3:
                iRet=fbbufop(destbuf, srcbuf, FBCOPY);
                …
                fbprint(destbuf);
                break;
            /* destbuf : “1111”, “2222”, “3333”*/
    
            /*FBCONCAT mode */
            case 4:
                iRet=fbbufop(destbuf, srcbuf, FBCONCAT);
                …
                fbprint(destbuf);
                break;
            /* destbuf : “5555”, “7777”, “3333”, “8888”, “1111”, “2222”, “3333”*/
    
            /*FBJOIN mode */
            case 5:
               iRet=fbbufop(destbuf, srcbuf, FBJOIN);
               …
               fbprint(destbuf);
               break;
            /* destbuf : “1111”, “2222”*/
    
            /*FBOJOIN mode */
            case 6:
               iRet=fbbufop(destbuf, srcbuf, FBOJOIN);
               …
               fbprint(destbuf);
               break;
            /*  destbuf : “1111”, “7777”, “2222”, “8888”*/
    
            /*FBUPDATE mode */
            case 7:
               iRet=fbbufop(destbuf, srcbuf, FBUPDATE);
                …
               fbprint(destbuf);
               break;
            /* destbuf : “1111”, “7777”, “2222”, “8888”, “3333”*/
    
        }
        fbfree(destbuf);
        fbfree(srcbuf);
    }
  • 관련 함수

    fbbufop_proj()

2.4. fbbufop_proj

특정 필드 버퍼의 필드 데이터를 지정한 필드 버퍼에 복사하는 함수이다.

src 필드 버퍼의 지정한 필드의 필드 데이터를 dest 필드 버퍼에 복사한다. 함수의 dest와 src 필드 버퍼는 같은 버퍼를 사용할 수 없고 반드시 따로 메모리에 할당된 다른 버퍼를 사용해야 한다.

  • 프로토타입

    #include <fbuf.h>
    #include <atmi.h>
    int fbbufop_proj(FBUF *dest, FBUF *src, FLDKEY *fldkey)
  • 파라미터

    파라미터설명
    destfballoc() 또는 tpalloc()으로 메모리에 할당된 필드 버퍼로 src에 있는 내용을 dest에 mode에 따라 저장한다.
    srcfballoc() 또는 tpalloc()으로 메모리에 할당된 필드 버퍼로 변경될 값을 가진 버퍼이다. src를 NULL로 설정하면 dest 필드 버퍼 자체에서 지정된 필드의 데이터가 복사된다.
    fldkey복사하려는 필드를 배열 형태로 지정할 수 있다. 배열의 마지막에는 반드시 0을 지정해야 한다. fldkey 포인터를 배열로 선언한 후 그 배열에 복사하려는 필드를 2개 이상 지정하면 src 필드 버퍼에서 dest 필드 버퍼로 fldkey에 지정한 필드의 데이터만 복사된다.
  • 반환값

    반환값설명
    1함수 호출에 성공한 경우이다.
    -1함수 호출에 실패한 경우이다(fberror에 에러 코드가 설정된다).

  • 오류

    fberrno에는 다음 값 중 하나가 설정된다.

    에러 코드설명
    FBEMALLOC시스템 에러로 필드 버퍼를 메모리에 할당하지 못했을 경우 fberror는 FBEMALLOC으로 설정된다.
    FBEINVAL입력 파라미터로 지정된 값 중 유효하지 않은 파라미터가 있음을 의미한다. 예를 들어 fbuf가 NULL일 경우 해당 에러가 발생한다.
  • 예제

    #include “demo_fdl.h”
    ...
    
    int iRet, i;
    FBUF *destbuf, *srcbuf;
    FLDKEY fkey[4];
    
    ...
    fbput(destbuf, INPUT, "aaa", 0);
    fbput(destbuf, OUTPUT, "bbb", 0);
    fbput(destbuf, SEQNO, "ccc", 0);
    . . .
    fbput(srcbuf, TEST1, "AAA", 0);
    fbput(srcbuf, TEST2, "BBB", 0);
    fbput(srcbuf, TEST3, "CCC", 0);
    
    fkey[0]=fbget_fldkey("INPUT");
    fkey[1]=fbget_fldkey("SEQNO");
    fkey[2]=0; /* The last entry in the array must be 0 */
    
    ret=fbbufop_proj(destbuf, NULL, fkey);
    . . .
    /* destbuf : aaa, ccc */
    . . .
    fkey[0]=fbget_fldkey("TEST3");
    fkey[1]=fbget_fldkey("TEST1");
    fkey[2]=fbget_fldkey("TEST2");
    
    fkey[3]=0; /* The last entry in the array must be 0 */
    
    ret=fbbufop_proj(destbuf, srcbuf, fkey);
    . . .
    /* destbuf : AAA, BBB, CCC */
    /* fkey array is sorted if the entries are not in numeric order */
    . . .
  • 관련 함수

    fbbufop()

2.5. fbcalcsize

fballoc() 또는 tpalloc()으로 필드 버퍼를 메모리에 할당받을 때 필드 버퍼의 크기를 계산하는 함수이다.

사용할 필드의 개수와 총 데이터의 길이(Byte 단위)를 파라미터로 전달하면 필드 버퍼의 크기를 계산한다.

  • 프로토타입

    #include <fbuf.h>
    #include <atmi.h> 
    long fbcalcsize(int count, FLDLEN datalen)
  • 파라미터

    파라미터설명
    count데이터를 저장할 필드의 개수를 의미한다.
    datalen필드 버퍼의 전체 데이터 크기를 Byte 단위로 지정한다.
  • 반환값

    주어진 입력 파라미터(count, datalen)에 근거하여 필드 버퍼의 크기를 Byte 단위로 반환한다.

  • 예제

    #include “demo_fdl.h”
    . . .
    
    FBUF *fbuf;
    long size;
    
    size = fbcalcsize(100, 1000);
    printf(“size : [%ld]\n”, size); /* output : size : [1408] */
    if ((fbuf = (FBUF *)tpalloc(“FIELD”, NULL, size)) == NULL) {
        printf(“tpalloc failed, errno = %d\n”, tperrno);
        .........
    }
    
    /* fbuf is set in 1024 bytes by default if size is less than 1024*/
    .....
  • 관련 함수

    fballoc(), tpalloc()

2.6. fbchg_tu

alloc() 또는 tpalloc()으로 메모리에 할당된 필드 버퍼에서 입력 파라미터에서 지정한 필드키의 필드 순번의 데이터를 변경하는 함수이다.

입력 파라미터에서 지정한 필드 순번(nth)에 기존의 데이터가 없을 경우에는 필드 순번(nth)에 주어진 데이터가 자동으로 필드로 추가된다. 그러므로 이 함수를 이용해서 필드 데이터를 변경할 때는 관계가 없지만, 필드 순번을 추가할 경우에는 처리 속도가 저하되므로 주의한다.

  • 프로토타입

    #include <fbuf.h>
    #include <atmi.h>
    int fbchg_tu(FBUF *fbuf, FLDKEY fldkey, int nth, char *value, FLDLEN fldlen)
  • 파라미터

    파라미터설명
    fbuffballoc() 또는 tpalloc()으로 메모리에 할당된 필드 버퍼이다.
    fldkey필드 버퍼에 변경할 필드의 필드키이다.
    nthfldkey에서 지정한 필드키의 데이터 중 변경할 필드 순번을 의미한다.
    value(char *)형이므로 변경하려는 필드키가 정수형이나 실수형인 경우에는 반드시 (char *)형으로 type casting을 한다. value에 NULL이 설정된 경우 해당 필드키를 지운다.
    fldlen일반적으로는 필드의 길이를 지정하지 않아도 된다. 필드키의 타입이 FB_CARRAY인 경우에는 반드시 필드 데이터의 길이를 Byte 단위로 지정한다.
  • 반환값

    반환값설명
    1함수 호출에 성공한 경우이다.
    -1함수 호출에 실패한 경우이다(fberror에 에러 코드가 설정된다).
  • 오류

    fberrno에는 다음 값 중 하나가 설정된다.

    에러 코드설명
    FBENOENT지정한 필드키가 FDLFILE(환경변수 : 기본값 tmax.fdl)에 정의되지 않아서 필드 버퍼에서 사용할 수 없는 경우 fberror는 FBENOENT로 설정된다.
    FBENOSPACE필드 버퍼에 데이터를 저장하거나 복사할 공간이 부족할 경우 fberror는 FBENOSPACE로 설정된다.
    FBEINVAL입력 파라미터로 지정된 값 중 유효하지 않은 파라미터가 있음을 의미한다.
  • 예제

    #include “demo_fdl.h”
    ...
    long rcvlen, ret;
    char buffer[100];
    FLDLEN fldlen;
    FBUF *fbuf;
    
    if ((fbuf = fballoc(10, 100)) == NULL) {
        printf(“fballoc failed, errno = %d\n”, tperrno);
        ...
    }
        
    fbput(fbuf, INPUT, “aaaa”, 0);  /* 영 번째 순번에는 aaaa가 있음. */
    ret = fbchg_tu(fbuf, INPUT, 1, “bbbb ”, 4);   /* 첫 번째 순번에 bbbb를 추가함. */
    if (ret < 0) {
        error processing...
    }
    ret = fbget_tu(fbuf, INPUT, 1, buffer, &fldlen); 
    /* 첫 번째 순번에 있는 데이터를 buffer에 넣음. */
    if (ret < 0) {
        error processing...
    }
    printf(“Field Data: [%s]\n”, buffer);
    /* output : Field Data: [bbbb] */
    
    fbprint(fbuf);   
    /* output : aaaa, bbbb   */
    .....
  • 관련 함수

    fbbufop_proj()

2.7. fbchg_tut

fballoc() 또는 tpalloc()으로 메모리에 할당된 필드 버퍼에서 입력 파라미터에서 지정한 필드키의 필드 순번의 데이터를 사용자가 지정한 타입에서 필드키의 타입으로 변환한 후 변경하는 함수이다.

fbchg_tu()와 유사하지만 데이터형이 변경할 필드키의 필드형과 다른 경우, 필드 데이터를 변경하기 전에 먼저 저장하려는 데이터형을 필드키의 타입으로 변환한 후 필드 데이터를 변경하여 저장할 수 있다는 점이 다르다.

입력 파라미터에서 지정한 필드 순번에 기존에 데이터가 없을 경우에는 필드 순번이 주어진 데이터로 자동적으로 필드가 추가된다. 그러므로 이 함수를 이용해서 필드 순번을 추가할 경우에는 처리 속도가 저하되므로 주의한다.

  • 프로토타입

    #include <fbuf.h>
    #include <atmi.h>
    int fbchg_tut(FBUF *fbuf, FLDKEY fldkey, int nth, char *value, FLDLEN fldlen, 
                  int type)
  • 파라미터

    파라미터설명
    fbuffballoc() 또는 tpalloc()으로 메모리에 할당된 필드 버퍼이다.
    fldkey필드 버퍼에 변경할 필드의 필드키이다.
    nthfldkey에서 지정한 필드키의 데이터 중 변경하려는 필드 순번을 의미한다.
    value파라미터가 (char *)형이므로 변경하려는 필드키가 정수형이나 실수형인 경우에는 반드시 (char *)형으로 type casting을 한다.
    fldlen일반적으로는 필드의 길이를 지정하지 않아도 된다. 그러나 필드키의 타입이 FB_CARRAY인 경우에는 반드시 필드 데이터의 길이를 Byte 단위로 지정한다.
    type

    필드 데이터를 변환할 데이터형으로 설정가능한 값은 다음과 같다.

    • FB_CARRAY, FB_SHORT , FB_DOUBLE , FB_LONG , FB_STRING, FB_CHAR, FB_FLOAT , FB_INT

  • 반환값

    반환값설명
    1함수 호출에 성공한 경우이다.
    -1함수 호출에 실패한 경우이다(fberror에 에러 코드가 설정된다).
  • 오류

    fberrno에는 다음 값 중 하나가 설정된다.

    에러 코드설명
    FBENOENT지정한 필드키가 FDLFILE(환경변수 : 기본값 tmax.fdl)에 정의되지 않아서 필드 버퍼에서 사용할 수 없는 경우 fberror는 FBENOENT로 설정된다.
    FBENOSPACE필드 버퍼에 데이터를 저장하거나 복사할 공간이 부족할 경우 fberror는 FBENOSPACE로 설정된다.
    FBEINVAL

    입력 파라미터로 지정된 값 중 유효하지 않은 파라미터가 있는 경우를 의미한다.

    (FB_CARRAY 타입인 경우 데이터 길이를 지정하지 않으면 이 코드가 설정된다)

    FBETYPETmax에서 지원하지 않는 타입이 사용되었다.
    FBEBADFLD잘못된 필드를 사용하였다.
  • 예제

    #include “demo_fdl.h”
    . . .
    long ret, lVal=100000;
    FBUF *fbuf;
    . . .
    fbputt(fbuf, INPUT, "aaaa", 0, FB_STRING);
    fbchg_tut(fbuf, INPUT, 0, (char *)&lVal, 0, FB_LONG);
    printf("1st occurrence of INPUT field is changed as follows : \n");
    fbprint(fbuf);
    ......
    /* fkey = 469762149, fname = INPUT, type = string, value = 100000 */
  • 관련 함수

    fbput(), fbchg_tu(), fbget_tu(), fbgetval(), fbgetval_last_tu(), fbgetvals_tu(), fbgetvall_tu()

2.8. fbdelall

필드 버퍼에서 특정 필드키에 저장되어 있는 전체 데이터를 삭제하는 함수이다.

  • 프로토타입

    #include <fbuf.h>
    #include <atmi.h>
    int fbdelall(FBUF *fbuf, FLDKEY fldkey)
  • 파라미터

    파라미터설명
    fbuffballoc() 또는 tpalloc()으로 메모리에 할당된 필드 버퍼이다.
    fldkey필드 버퍼에서 삭제할 필드키이다. fldkey에서 지정할 필드키는 반드시 이 함수를 호출하기 이전에 지정한 필드 버퍼에 필드 순번의 데이터가 1개 이상 저장되어 있어야 한다. 그렇지 않으면 –1을 반환하며 fberror는 FBENOENT로 설정된다.
  • 반환값

    반환값설명
    삭제한 필드의 개수함수 호출에 성공한 경우이다.
    -1함수 수행 중 필드 버퍼에 지정한 필드키가 존재하지 않아 에러가 발생한 경우이다(fberror에 에러 코드가 설정된다).
  • 오류

    fberrno에는 다음 값 중 하나가 설정된다.

    에러 코드설명
    FBENOENT지정한 필드키가 FDLFILE(환경변수 : 기본값 tmax.fdl)에 정의되지 않아서 필드 버퍼에서 사용할 수 없는 경우 fberror는 FBENOENT로 설정된다.
    FBEINVAL입력 파라미터로 지정된 값 중 유효하지 않은 파라미터가 있음을 의미한다.
  • 예제

    #include “demo_fdl.h”
    . . .
    int ret;
    FBUF *fbuf;
    if ((fbuf = fballoc(10, 100)) == NULL) {
        printf(“fballoc failed, errno = %d\n”, fberror);
        ........
    }
    
    fbput(fbuf, INPUT, “aaaa”, 0);
    fbput(fbuf, INPUT, “bbbb”, 0);
    fbput(fbuf, INPUT, “cccc”, 0);
    
    ret = fbdelall(fbuf, INPUT);
    printf(“Delete Field Number: [%d]\n”, ret);
    /* output: Delete Field Number: [3] */
    ......
  • 관련 함수

    fbput(), fbget(), fbdelete(), fbdelall_tu()

2.9. fbdelall_tu

필드키 배열에 지정된 모든 필드키에 저장되어 있는 모든 필드 데이터를 삭제하는 함수이다.

파라미터 중 fldkey에 설정된 데이터를 삭제한다. 여러 개의 필드키를 동시에 삭제할 경우에는 fbdelall_tu()를 한 번 호출하는 것이 fbdelall()을 여러 번 호출하는 것보다 효율적이다.

  • 프로토타입

    #include <fbuf.h>
    #include <atmi.h>
    int fbdelall_tu(FBUF *fbuf, FLDKEY *fldkey)
  • 파라미터

    파라미터설명
    fbuffballoc() 또는 tpalloc()으로 메모리에 할당된 필드 버퍼이다.
    fldkey필드 버퍼에서 삭제할 필드키를 2개 이상 지정한 필드키 배열이다. fieldkey에서 지정할 필드키 포인터는 배열로 선언하여 삭제하려는 필드키를 명시한다. 필드키 배열에 삭제할 필드키를 지정한 후 마지막 인덱스에는 반드시 0을 지정한다.
  • 반환값

    반환값설명
    삭제한 필드의 개수함수 호출에 성공한 경우이다.
    -1필드 버퍼가 유효하지 않은 경우 발생하는 에러로 입력 파라미터가 NULL일 때 발생한다(fberror에 에러 코드가 설정된다).
  • 오류

    fberrno에는 다음 값 중 하나가 설정된다.

    에러 코드설명
    FBENOENTfldkey 배열에서 마지막에 지정된 필드키에 해당하는 데이터가 없는 경우 fberror는 FBENOENT로 설정된다.
    FBEINVAL입력 파라미터로 지정된 값 중 유효하지 않은 파라미터가 있음을 의미한다.
  • 예제

    #include “demo_fdl.h”
    . . .
    FLDKEY fkey[3];
    
    if ((fbuf = fballoc(10, 100)) == NULL) {
        printf(“fballoc failed, errno = %d\n”, fberror);
        ........
    }
    
    fbput(fbuf, INPUT, “aaaa”, 0);
    fbput(fbuf, INPUT, “bbbb”, 0);
    fbput(fbuf, OUTPUT, “cccc”, 0);
    
    fkey[0] = INPUT;
    fkey[1] = OUTPUT;
    fkey[2] = 0; /* The last entry in the array must be 0 */
    
    ret = fbdelall_tu(fbuf, fkey);
    printf(“The Number of deleted fields: [%d]\n”, ret);
    
    /* output: Number of deleted fields: [3] */
    .....
  • 관련 함수

    fbput(), fbget(), fbdelete(), fbdelall()

2.10. fbdelete

fballoc() 또는 tpalloc()으로 메모리에 할당한 필드 버퍼에서 지정한 필드키의 지정한 필드 순번에 해당하는 특정 필드의 데이터를 삭제하는 함수이다.

fbchg_tu()는 지정한 필드 순번에 해당하는 필드가 존재하지 않을 경우 자동으로 필드를 추가하지만 fbdelete()는 지정한 필드 순번에 해당하는 필드가 필드 버퍼에 존재하지 않을 경우 에러를 발생시키며 fberror는 FBENOENT로 설정된다. 그러므로 이 함수에서는 반드시 함수를 수행하기 전에 필드 버퍼에 존재하는 필드를 파라미터로 지정해야 한다.

  • 프로토타입

    #include <fbuf.h>
    #include <atmi.h>
    int fbdelete(FBUF *fbuf, FLDKEY fldkey, int nth)
  • 파라미터

    파라미터설명
    fbuffballoc() 또는 tpalloc()으로 메모리에 할당된 필드 버퍼이다.
    fldkey필드 버퍼에서 삭제하려는 필드키를 의미한다.
    nth삭제하려는 특정 필드 순번을 의미한다.
  • 반환값

    반환값설명
    1함수 호출에 성공한 경우이다.
    -1파라미터로 지정한 필드키의 순번에 해당하는 필드가 필드 버퍼에 존재하지 않을 경우이다(fberror에 에러 코드가 설정된다).

  • 오류

    fberrno에는 다음 값 중 하나가 설정된다.

    에러 코드설명
    FBENOENT지정한 필드키가 FDLFILE(환경변수 : 기본값 tmax.fdl)에 정의되지 않아서 필드 버퍼에서 사용할 수 없는 경우 fberror는 FBENOENT로 설정된다. 지정한 필드 순번에 해당되는 데이터가 필드 버퍼에 존재하지 않는 경우에도 fberror가 FBENOENT로 설정된다.
    FBEINVAL입력 파라미터로 지정된 값 중 유효하지 않은 파라미터가 있음을 의미한다.
  • 예제

    #include “demo_fdl.h”
    . . .
    char buffer[100];
    int ret;
    FBUF *fbuf;
    
    if ((fbuf = fballoc(10, 100)) == NULL) {
        printf(“fballoc failed, errno = %d\n”, fberror);
        ........
    }
    
    fbput(fbuf, INPUT, “aaaa”, 0);  /* fbuf의 0번째 데이터는 “aaaa”이다. */
    fbput(fbuf, INPUT, “bbbb”, 0);  /* fbuf의 1번째 데이터는 “bbbb”이다. */
    fbput(fbuf, INPUT, “cccc”, 0);  /* fbuf의 2번째 데이터는 “cccc”이다. */
    fbdelete(fbuf, INPUT, 1);         /* fbuf의 1번째 데이터인 “bbbb”를 삭제한다. */
    
    ret=fbdelete(fbuf, INPUT, 3);
    if(ret<0){
         printf("fbdelete error : %s\n", fbstrerror(fberror));
    }                                 /* fbuf의 3번째 순번에는 데이터가 없기 때문에 
    fbdelete error : FBENOENT (not found) 가 출력된다. */
    
    fbget(fbuf, INPUT, buffer, 0);
    printf(“INPUT: [%s]\n”, buffer);   /* output:  INPUT: [aaaa] */
    fbget(fbuf, INPUT, buffer, 0);
    printf(“INPUT: [%s]\n”, buffer);   /* output:  INPUT: [cccc] */
    .....
  • 관련 함수

    fbput(), fbget(), fbdelall(), fbdelall_tu()

2.11. fbextread

iop에서 지정하는 특정 파일로부터 필드키와 그에 해당하는 값을 읽어서 fballoc() 또는 tpalloc()으로 메모리에 할당한 필드 버퍼에 저장하는 함수이다.

내부적으로 flag도 사용하지 않은 경우 fbput()을 호출하고, flag가 +인 경우 fbchg_tu()를, -인 경우 fbdelete()를, =인 경우 fbget_tu()를 호출한 후 fbchg_tu()를 호출한다. 따라서 이러한 함수에서 나타나는 에러와 동일한 에러가 fbextread()에서 발생할 수 있다.

flag는 4가지가 있는데 demo.f 파일의 flags에 설정된다. 각 flag의 내용은 다음과 같다.

flag설명
+필드 버퍼에서 필드키에 해당하는 값을 0번째 순번에 저장한다
-필드 버퍼에서 해당되는 필드키의 0번째 순번에 해당하는 데이터를 삭제한다.
=필드 버퍼에서 1번째 필드 이름(field_name1)에 해당하는 데이터 중 0번째 순번의 필드 값을 2번째 필드 이름(field_name2)에 해당하는 데이터 중 0번째 순번의 필드값으로 교체한다.
#주석(comment)으로 처리한다.
없음필드 버퍼에 새로운 필드를 추가한다.

flag별 필드키와 값이 저장되어 있는 파일의 형식은 다음과 같다.

  1. flag가 '+'이거나 flag를 사용하지 않을 경우

    [flag] field_name or field_id (tab) field_value
  2. flag가 '='일 경우

    [flag] field_name1 or field_id1 (tab) field_name2 or field_id2
  3. flag가 '–'일 경우

    [flag] field_name or field_id

  • 프로토타입

    #include <stdio.h>
    #include <usrinc/fbuf.h>
    
    int fbextread(FBUF *fbuf, FILE *iop)
  • 파라미터

    파라미터설명
    fbuffballoc() 또는 tpalloc()으로 메모리에 할당된 필드 버퍼이다.
    iop읽어 올 필드키와 그에 해당하는 값이 저장되어 있는 파일의 포인터이다.
  • 반환값

    반환값설명
    1함수 호출에 성공한 경우이다.
    -1함수 호출에 실패한 경우이다(fberror에 에러 코드가 설정된다).
  • 오류

    fberrno에는 다음 값이 설정된다.

    에러 코드설명
    FBEINVAL입력 파라미터로 지정된 값 중 유효하지 않은 파라미터가 있음을 의미한다. 예를 들면 fbuf가 NULL로 지정된 경우 해당 에러가 발생한다.
  • 예제

    #include <stdio.h>
    #include <usrinc/atmi.h>
    #include <usrinc/fbuf.h>
    #include "demo_fdl.h"
    
    int main()
    {
            long len;
            int ret;
            FILE *fp;
            FBUF *fbuf;
            FLDLEN fldlen;
            char buffer[100];
    
            fbuf = (FBUF *)tpalloc("FIELD", NULL, 0);
            if (fbuf == NULL) {
                printf("fbuf tpalloc fail[%d]\n", tperrnㅇo);
            }
            ret = fbput(fbuf, INPUT, "user_input", 10);
            if (ret < 0) {
                printf("fbput fail[%d]\n", fberror);
                return -1;
            }
            ret = fbput(fbuf, OUTPUT, "user_output", 10);
            if (ret < 0) {
                printf("fbput fail[%d]\n", fberror);
                return -1;
            }
            ret = fbput(fbuf, STATLIN, "user_statlin", 10);
            if (ret < 0) {
                printf("fbput fail[%d]\n", fberror);
                return -1;
            }
            fp = fopen("file", "r");
            fbprint(fbuf);
    
            ret = fbextread(fbuf, fp);
            if (ret < 0) printf("Fextread fail[%s]\n", fberror);
    
            printf("\n\n<after Fextread>-----------------\n");
            fbprint(fbuf); 
            tpfree((char *)fbuf);
    }

    • '+' flag를 이용하여 STSTLIN 필드키의 0번째 값을 'statlin0_'으로 변경한다.

      +STATLIN       statlin0_

      [결과]

      user_input, user_output, statlin0_, user_statlin

    • fbuf 버퍼에 필드값을 추가한다.

      OUTPUT  OUTPUT0_
      INPUT   INPUT0_
      INPUT   INPUT1_

      [결과]

      user_input, user_output, user_statlin, OUTPUT0_, INPUT0_, INPUT1_
    • '=' flag를 이용하여 INPUT 값을 OUTPUT에 저장한다.

      =OUTPUT  INPUT

      [결과]

      user_input, user_input, user_statlin
    • '-' flag를 이용하여 INPUT 필드키를 삭제한다.

      –INPUT

      [결과]

      user_output, user_statlin

  • 관련 함수

    fbput(), fbchg_tu(), fbdelete(), fbget_tu()

2.12. fbfldcount

fballoc() 또는 tpalloc()으로 메모리에 할당한 필드 버퍼에 현재 저장되어 있는 모든 필드의 수를 반환하는 함수이다. fbfldcount()는 필드 버퍼 내에 필드 데이터가 몇 개 저장되어 있는지 계산한다. 이미 구현되어 있는 여러 API 함수를 이용하여 필드 버퍼에 몇 개의 필드가 실질적으로 저장되어 있는지도 확인할 수 있다. 하나의 필드키에 순번을 달리하여 여러 데이터가 저장되어 있더라도 fbfldcount()는 별개의 필드로 인식한다.

  • 프로토타입

    #include <fbuf.h>
    #include <atmi.h>
    int fbfldcount(FBUF *fbuf)
  • 파라미터

    파라미터설명
    fbuffballoc() 또는 tpalloc()으로 메모리에 할당된 필드 버퍼이다.
  • 반환값

    반환값설명
    필드의 수함수 호출에 성공한 경우이다 (필드 버퍼에 현재 저장되어 있는 필드의 수를 반환한다).
    0함수 호출에 실패한 경우, 필드 버퍼에 저장되어 있는 필드가 없는 경우이다(fberror에 에러 코드가 설정된다).
  • 오류

    fberrno에는 다음 값이 설정된다.

    에러 코드설명
    FBEINVAL입력 파라미터로 지정된 값 중 유효하지 않은 파라미터가 있음을 의미한다. 예를 들면 fbuf가 NULL로 지정된 경우 해당 에러가 발생한다.
  • 예제

    #include “demo_fdl.h”
    . . .
    
    int cnt;
    FBUF *fbuf;
    
    if ((fbuf = fballoc(10, 100)) == NULL) {
        printf(“fballoc failed, errno = %d\n”, fberror);
        ........
    }
    
    fbput(fbuf, INPUT, “aaaa”, 0);
    fbput(fbuf, INPUT, “bbbb”, 0);
    fbput(fbuf, OUTPUT, “cccc”, 0);
    cnt = fbfldcount(fbuf);
    printf(“Field Count: [%d]\n”, cnt);
    
    /* output: Field Count: [3] */
    . . .
    }
  • 관련 함수

    fbgetnth(), fbkeyoccur()

2.13. fbfprint

필드 버퍼에 저장되어 있는 필드 데이터를 지정한 파일 스트림에 출력하는 함수이다. 지정한 파일은 텍스트 파일이고, 출력 형식은 fbprint()의 출력 형식과 같다.

  • 프로토타입

    #include <fbuf.h>
    #include <atmi.h>
    int fbfprint(FBUF *fbuf, FILE *iop)
  • 파라미터

    파라미터설명
    fbuffballoc() 또는 tpalloc()으로 메모리에 할당된 필드 버퍼이다.
    iop출력 데이터를 저장할 파일 스트림을 의미한다.
  • 반환값

    반환값설명
    1함수 호출에 성공한 경우이다.
    -1함수 호출에 실패한 경우이다(fberror에 에러 코드가 설정된다).
  • 오류

    fberrno에는 다음 값 중 하나가 설정된다.

    에러 코드설명
    FBEBADFB필드 버퍼가 유효하지 않다. 현재의 필드 버퍼 이외의 다른 정상적으로 메모리에 할당된 버퍼를 사용해야 한다.
    FBEINVAL입력 파라미터로 지정된 값 중 유효하지 않은 파라미터가 있음을 의미한다.
  • 예제

    #include “demo_fdl.h”
    . . .
    FILE *iop;
    FBUF *fbuf;
    
    if ((fbuf = fballoc(10, 100)) == NULL) {
        printf(“fballoc failed, errno = %d\n”, fberror);
        ........
    }
    
    iop = fopen(“sample.text”, “w”);
    fbput(fbuf, INPUT, “5555”, 0);
    fbput(fbuf, INPUT, “7777”, 0);
    fbfprint(fbuf, iop);
    fclose(iop);
  • 관련 함수

    fbprint()

2.14. fbfree

fballoc() 또는 tpalloc()으로 할당된 필드 버퍼의 메모리를 해제하는 함수이다. 함수는 이전에 할당받았던 버퍼를 메모리로부터 해제하는 함수이므로 수행한 후에 다시 해당 버퍼를 사용할 수 없다. 버퍼의 사용이 완전히 끝난 이후에 fbfree()를 호출해야 한다.

  • 프로토타입

    #include <fbuf.h>
    #include <atmi.h>
    int fbfree(FBUF *fbuf)
  • 파라미터

    파라미터설명
    fbuffballoc() 또는 tpalloc()으로 할당된 필드 버퍼이다.
  • 반환값

    반환값설명
    1버퍼를 정상적으로 해제하는 경우이다.
    -1필드 버퍼의 메모리를 해제하지 못하는 경우이다(fberror에 에러 코드가 설정된다).
  • 오류

    fberrno에는 다음 값이 설정된다.

    에러 코드설명
    FBEINVAL입력 파라미터로 지정된 값 중 유효하지 않은 파라미터가 있음을 의미한다. 예를 들면 fbuf가 NULL로 지정된 경우 해당 에러가 발생한다.
  • 예제

    #include “demo_fdl.h”
    . . .
    int ret;
    FBUF *fbuf;
    
    if ((fbuf = fballoc(10, 100)) == NULL) {
        printf(“fballoc failed, errno = %d\n”, fberror);
        ......
    }
    fbput(fbuf, INPUT, “aaaa”, 0);
    ret = fbfree(fbuf);
    printf(“fbfree, ret = %d\n”, ret);
    /* output : fbfree, ret = 1 */
    fbput(fbuf, INPUT, “bbbb”, 0);
    fbprint(fbuf);
    /* an error occurs since memory was not allocated. */
  • 관련 함수

    fbcalcsize(), tpalloc(), fballoc(), fbinit()

2.15. fbftos

필드 버퍼에 저장되어 있는 데이터를 matching되는 구조체 버퍼로 전송하는 함수이다.

  • 프로토타입

    #include <fbuf.h>
    #include <atmi.h>
    int fbftos(FBUF *fbuf, char *cstruct, char *stname)
  • 파라미터

    파라미터설명
    fbuffballoc() 또는 tpalloc()으로 메모리에 할당된 필드 버퍼이다.
    cstruct사용할 구조체 타입의 변수를 (char *)형으로 type casting해서 사용한다.
    stnameVIEW에서 정의한 구조체의 이름을 문자열로 지정한다.
  • 반환값

    반환값설명
    1필드 버퍼에 저장되어 있는 데이터를 성공적으로 C 구조체에 전송한 경우이다.
    -1필드 버퍼에 저장되어 있는 데이터를 성공적으로 C 구조체에 전송하지 못한 경우이다(fberror에 에러 코드가 설정된다).
  • 오류

    fberrno에 다음 값 중 하나가 설정된다.

    에러 코드설명
    FBENOENT지정한 필드키가 FDLFILE(환경변수 : 기본값 tmax.fdl)에 정의되지 않아서 필드 버퍼에서 사용할 수 없는 경우 fberror는 FBENOENT로 설정된다.
    FBENOSPACE필드 버퍼에 데이터를 저장하거나 복사할 공간이 부족할 경우 fberror는 FBENOSPACE로 설정된다.
    FBEINVAL입력 파라미터로 지정된 값 중 유효하지 않은 파라미터가 있음을 의미한다.
    FBEBADFLD유효하지 않은 필드키가 사용된 경우이다. 일반적으로 필드키가 fdlc 유틸리티를 사용하여 컴파일되지 않은 필드키가 사용되었을 경우 fberror는 FBEBADFLD로 설정된다.
    FBEBADSTRUCT유효하지 않은 구조체가 사용된 경우이다. 일반적으로 Tmax에서 인식하지 못하는 형태의 구조체가 사용되었거나 구조체 정의 파일이 잘못 컴파일되었을 경우에 발생하는 에러이다.
  • 예제

    #include “demo_fdl.h”
    #include “demo_sdl.h”
    . . .
    int ret, fdllen, val = 1000;
    struct demo temp;
    FBUF *fbuf;
    Char *cstruct;
    
    if(tpstart((TPSTART_T *)NULL) == -1) {
        printf(“tpstart failed\n”);
        ........
    }
    
    if ((fbuf = fballoc(10, 100)) == NULL) {
        printf(“fballoc failed, errno = %d\n”, fberror);
        ........
    }
    
    cstruct = (char *)&temp;
    if(fbstinit((char *)&temp, “demo”) < 1)  {
        printf(“fbstinit failed, errno = %d\n”, fberror);
        ........
    }
    
    fbput(fbuf, INPUT, “aaaa”, 0);
    fbput(fbuf, INTDATA, (char *)&val, 0);
    
    if(fbftos(fbuf, cstruct, “demo”) < 0) {
        ........
    }
    ........
  • 관련 함수

    fbstof(), fbstinit(), fbstelinit()

  • 참고

    fbftos()는 fballoc() 또는 tpalloc()을 통하여 메모리에 할당된 필드 버퍼에 저장되어 있는 필드 데이터를 matching되는 C 구조체 버퍼(stname)로 전송하는 함수이다.

    일반 구조체 파일인 ***.s와는 약간 다른 구조체 파일이 미리 정의되어 있어야 한다. 구조체 파일 내의 필드키는 정의되는 구조체의 멤버 변수와 1 : 1 mapping이 되어 있어야 한다.

    다음은 필드 버퍼와 C 구조체를 mapping시키는 구조체 파일의 예이다.

    VIEW demo
    #type      cname      Fldkey      count      flag      size      null
    string   demodata     INPUT          5        -         20       “”
    carray  carraydata    CARRAYDATA     1        -         20     “star”
    char    chardata      CHARDATA       1        -         -       “c”
    int       inum        INTDATA        5        -         -         0
    short     snum        SHORTDATA      1        -         -         0
    long      lnum        LONGDATA       1        -         -         1
    float     fnum        FLOATDATA      1        -         -        1.0
    double    dnum        DOUBLEDATA     1        -         -        1.0
    END
    항목설명
    type구조체 안의 멤버 변수의 데이터형을 의미한다.
    cname멤버 변수의 이름을 의미한다.
    Fldkey정한 멤버 변수와 mapping되는 필드키를 의미한다(필드키는 ***.f 에 정의되어 있어야 한다).
    count구조체에서 저장할 수 있는 최대의 필드 순번을 의미한다.
    sizestring형인 경우 배열의 크기를 의미한다.
    null초기화될 때의 값을 나타내는 것으로 필드 버퍼에 값이 저장되지 않은 상태에서 필드 데이터를 C 구조체의 버퍼로 전송할 경우 기본적으로 C 구조체에 복사되는 값이다. 만약에 null 항목에 값을 지정하지 않고 필드 버퍼에도 값이 저장되지 않은 경우 각 자료형에 맞는 기본값이 C 구조체에 저장된다. string, carray, char형의 기본값은 NULL이며 int, short, long형의 기본값은 0, float, double형의 기본값은 0.0이다.

    demo.s 또는 demo.v에 VIEW를 정의한 후 클라이언트에서는 sdlc 유틸리티를 이용하여 VIEW 파일을 다음과 같이 컴파일한다.

    $TMAXDIR$/sample/sdl> sdlc –c –v demo.s –o tmax.sdl 
    $TMAXDIR$/sample/sdl> sdlc –c –v demo.v –o tmax.sdl

    환경 파일(콘솔을 사용하는 경우 .profile)에 SDLFILE로 지정된 이름으로 –o 옵션으로 .sdl 파일을 생성한다. 이렇게 함으로써 필드키와 구조체 간의 변환 정보가 SDLFILE에 포함된다. 위의 VIEW 파일에 정의되어 있는 필드키는 반드시 ***.f 에 정의되어 있어야 한다는 점을 주의한다.

    VIEW 파일을 컴파일하면 demo_sdl.h와 tmax.sdl 파일이 생성된다. 클라이언트 프로그램에서는 demo_sdl.h 파일을 include해서 사용한다. 서버에서는 sdlc 유틸리티를 이용하여 VIEW 파일을 다음과 같이 컴파일한다.

    $TMAXDIR$/sample/sdl> sdlc –v demo.s

    구조체 파일을 컴파일하면 demo_sdl.c와 demo_sdl.h 파일이 생성된다. 필드키와 구조체 간의 변환 정보가 demo_sdl.c 파일에 있으므로 이 정보를 사용해야 하는 서버 프로그램을 컴파일할 때 demo_sdl.c 파일과 함께 컴파일이 되어야 한다. 서버 프로그램 내에서는 필요한 정보를 컴파일 시에 모두 가지므로 tmax.sdl 파일이 필요없다.

    필드 버퍼에서 구조체로 데이터를 전송할 때 필드키와 구조체의 멤버 변수의 데이터와 mapping되지 않을 경우에는 필드키가 무시된다.

2.16. fbget

필드 버퍼에서 지정한 필드키에 해당하는 필드 데이터를 읽어 오는 함수이다.

데이터를 필드 버퍼에서 읽어 오는 함수로 동일한 필드키로 저장된 데이터는 순차적으로 읽어서 loc에 저장한다. 즉 수동으로 순번을 증가시키지 않고 저장된 필드 순번만큼 이 함수를 호출하면 함수 내에서 자동으로 필드 순번을 증가시켜서 다음 데이터를 읽을 준비가 되므로 해당 필드키 내에 저장되어 있는 모든 필드 데이터를 읽어 올 수 있다. fbget()을 사용할 경우에 한 번 읽어 온 데이터는 다시 읽을 수 없으므로 주의한다. 그리고 저장된 필드 순번보다 더 많이 fbget 함수를 호출하면 마지막 필드 순번의 필드 데이터가 계속 반환된다.

  • 프로토타입

    #include <fbuf.h>
    #include <atmi.h>
    int fbget(FBUF *fbuf, FLDKEY fldkey, char *loc, FLDLEN *fldlen)
  • 파라미터

    파라미터설명
    fbuffballoc() 또는 tpalloc()으로 메모리에 할당된 필드 버퍼이다.
    fldkey필드 버퍼에서 읽어 오려는 필드키를 의미한다.
    loc순차적으로 읽어 온 필드 데이터를 가리키는 포인터이다. 필드키가 정수형 또는 실수형인 경우에는 반드시 각 타입에 맞는 변수를 사용하되 앞에서 기술한 함수의 프로토타입에 맞게 type casting을 한다.
    fldlen읽어 온 데이터의 길이를 의미한다.
  • 반환값

    반환값설명
    1지정한 필드키의 필드 데이터를 정상적으로 찾은 경우이다.
    -1지정한 필드키를 필드 버퍼에서 찾지 못한 경우이다(fberror에 에러 코드가 설정된다).
  • 오류

    fberrno에 다음 값 중 하나가 설정된다.

    에러 코드설명
    FBENOENT지정한 필드키가 FDLFILE(환경변수 : 기본값 tmax.fdl)에 정의되지 않아서 필드 버퍼에서 사용할 수 없는 경우 fberror는 FBENOENT로 설정된다.
    FBEINVAL입력 파라미터로 지정된 값 중 유효하지 않은 파라미터가 있음을 의미한다(CARRAY형인 경우 fldlen을 지정하지 않은 경우도 해당된다).
    FBETYPETmax에서 지원하지 않는 타입이 사용되었다.
  • 예제

    #include “demo_fdl.h”
    . . .
    long rcvlen, ret;
    FLDLEN fldlen;
    char buffer[100];
    FBUF *fbuf;
    
    if ((fbuf = fballoc(10, 100)) == NULL) {
        printf(“fballoc failed, errno = %d\n”, fberror);
        .......
    }
    
    fbput(fbuf, INPUT, “aaaa”, 0);
    fbput(fbuf, INPUT, “bbbb”, 0);
    fbput(fbuf, INPUT, “cccc”, 0);
    
    fbget(fbuf, INPUT, buffer, &fldlen);
    printf(“Field Data: [%s]\n”, buffer);
    /* output: Field Data: [aaaa] */
    . . . 
  • 관련 함수

    fbput(), fbchg_tu(), fbget_tu(), fbchg_tu(), fbgetval(), fbgetval_last_tu(), fbgetvals_tu(), fbgetvall_tu()

2.17. fbgetalloc_tu

지정한 필드키의 필드 순번에 해당하는 필드 데이터를 읽어 오는 함수이다.

fldkey 및 nth 파라미터로 지정한 필드키의 필드 순번에 해당하는 필드 데이터를 읽어서 extralen에 지정한 길이만큼의 새로운 버퍼를 할당하여 해당 버퍼에 데이터를 저장하고 포인터를 반환한다.

  • 프로토타입

    #include <fbuf.h>
    #include <atmi.h>
    char *fbgetalloc_tu(FBUF *fbuf, FLDKEY fldkey, int nth, int *extralen)
  • 파라미터

    파라미터설명
    fbuffballoc() 또는 tpalloc()으로 메모리에 할당된 필드 버퍼이다.
    fldkey필드 버퍼에서 읽어 올 필드키를 의미한다.
    nth데이터를 읽어 올 필드키의 필드 순번을 의미한다.
    extralen새로 할당받아야 하는 버퍼의 크기를 의미한다. 새로 할당받은 버퍼는 사용한 후 반드시 사용자가 메모리를 해제한다. extralen을 0으로 지정하면 함수 수행 후 새로 할당해야 하는 버퍼의 크기가 필드 데이터의 길이로 설정된다. extralen은 할당한 버퍼의 크기가 설정된다.
  • 반환값

    반환값설명
    버퍼의 포인터함수 호출에 성공한 경우이다.
    NULL필드 버퍼에서 지정한 필드키를 찾지 못하거나 함수 수행 중 다른 에러가 발생하였을 경우이다(fberror에 에러 코드가 설정된다).
  • 오류

    fberrno에 다음 값 중 하나가 설정된다.

    에러 코드설명
    FBENOENT지정한 필드키가 FDLFILE(환경변수 : 기본값 tmax.fdl)에 정의되지 않아서 필드 버퍼에서 사용할 수 없는 경우 fberror는 FBENOENT로 설정된다.
    FBEMALLOC시스템 에러로 필드 버퍼를 메모리에 할당하지 못했을 경우 fberror는 FBEMALLOC로 설정된다.
    FBEINVAL입력 파라미터로 지정된 값 중 유효하지 않은 파라미터가 있음을 의미한다.
    FBETYPETmax에서 지원하지 않는 타입이 사용되었다.
  • 예제

    #include “demo_fdl.h”
    . . .
    long ret;
    int extralen;
    char *buffer;
    FBUF *fbuf;
    
    if ((fbuf = fballoc(10, 100)) == NULL) {
        printf(“fballoc failed, errno = %d\n”, fberror);
        ........
    }
    fbput(fbuf, INPUT, “aaaa”, 0);
    fbput(fbuf, INPUT, “bbbb”, 0);
    fbput(fbuf, INPUT, “cccc”, 0);
    
    extralen = 4;
    buffer = fbgetalloc_tu(fbuf, INPUT, 0, &extralen);
    printf(“Field Data: [%s]\n”, buffer);
    /* output: Field Data: [aaaa], returned after adding 4 bytes to
    the length of the field value. */
    fbfree(fbuf);
    ….
  • 관련 함수

    fbgetalloc_tut(), fbput(), fbchg_tu(), fbget_tu(), fbchg_tu(), fbgetval(), fbgetval_last_tu(), fbgetvals_tu(), fbgetvall_tu()

2.18. fbgetalloc_tut

필드 버퍼에서 지정한 필드키의 필드 순번에 해당하는 필드 데이터를 지정한 타입으로 필요한 길이만큼 버퍼를 새로 할당받아 저장하여 반환하는 함수이다.

이 함수를 사용하면 fldkey 및 nth 파라미터로 지정한 필드키의 필드 순번에 해당하는 필드 데이터를 읽어 온다. 필드 데이터의 타입과 상관없이 지정한 타입으로 변환하여 extralen에 지정한 길이만큼의 새로운 버퍼를 할당하여 데이터를 저장하고 포인터를 반환한다.

fbgetalloc_tut()는 fbgetalloc_tu()와 매우 유사하지만 가져오는 필드 데이터의 타입을 변환할 수 있다는 점이 다르다.

  • 프로토타입

    #include <fbuf.h>
    #include <atmi.h>
    char *fbgetalloc_tut(FBUF *fbuf, FLDKEY fldkey, int nth, int type, int *extralen)
  • 파라미터

    파라미터설명
    fbuffballoc() 또는 tpalloc()으로 메모리에 할당된 필드 버퍼이다.
    fldkey필드 버퍼에서 읽어 올 필드키를 의미한다.
    nth데이터를 읽어 올 필드키의 필드 순번을 의미한다.
    type

    필드 데이터를 변환할 데이터형으로 설정가능한 값은 다음과 같다.

    • FB_CARRAY, FB_SHORT , FB_DOUBLE , FB_LONG , FB_STRING, FB_CHAR, FB_FLOAT , FB_INT

    extralen새로 할당받아야 하는 버퍼의 크기를 Byte 단위로 나타낸다. 할당받은 버퍼는 사용한 후 반드시 사용자가 메모리를 해제한다. extralen을 0으로 지정하면 함수 수행 후 새로 할당해야 하는 버퍼의 크기가 필드 데이터의 길이로 설정된다.
  • 반환값

    반환값설명
    버퍼의 포인터

    함수 호출에 성공한 경우이다.

    필드 데이터를 저장한 새로 할당받은 버퍼의 포인터를 반환한다. 반환값은 (char *)형으로 표현할 수 없는 int, long, double, long, float형의 경우에는 상황에 맞게 type casting을 한다.

    NULL필드 버퍼에서 지정한 필드키를 찾지 못하거나 함수 수행 중 다른 에러가 발생하였을 경우이다(fberror에 에러 코드가 설정된다).
  • 오류

    fberrno에 다음 값 중 하나가 설정된다.

    에러 코드설명
    FBENOENT지정한 필드키가 FDLFILE(환경변수 : 기본값 tmax.fdl)에 정의되지 않아서 필드 버퍼에서 사용할 수 없는 경우 fberror는 FBENOENT로 설정된다.
    FBEMALLOC시스템 에러로, 필드 버퍼를 메모리에 할당하지 못했을 경우 fberror는 FBEMALLOC로 설정된다.
    FBENOSPACE필드 버퍼에 데이터를 저장하거나 복사할 공간이 부족할 경우 fberror는 FBENOSPACE로 설정된다.
    FBEBADFLD유효하지 않은 필드키가 사용된 경우이다. 일반적으로 필드키가 fdlc 유틸리티를 사용하여 컴파일되지 않은 필드키가 사용되었을 경우 fberror는 FBEBADFLD로 설정된다.
    FBETYPETmax에서 지원하지 않는 타입이 사용되었다.
    FBEINVAL입력 파라미터로 지정된 값 중 유효하지 않은 파라미터가 있음을 의미한다. 예를 들면 fbuf가 NULL로 지정된 경우 해당 에러가 발생한다.
  • 예제

    #include “demo_fdl.h”
    . . .
    long ret;
    int extralen;
    char *buffer;
    FBUF *fbuf;
    
    if ((fbuf = fballoc(10, 100)) == NULL) {
        printf(“fballoc failed, errno = %d\n”, fberror);
        ........
    }
    
    fbput(fbuf, INPUT, “aaaa”, 0);
    fbput(fbuf, INPUT, “bbbb”, 0);
    fbput(fbuf, INPUT, “cccc”, 0);
    
    extralen = 4;
    buffer = fbgetalloc_tut(fbuf, INPUT, 0, FB_STRING, &extralen);
    printf(“Field Data: [%s]\n”, buffer);
    /* output: Field Data: [aaaa], returned after adding 4 bytes to the length of the 
    field value. */
    
    fbfree(fbuf);
    . . .
  • 관련 함수

    fbgetalloc_tu (), fbput(), fbget_tu(), fbchg_tu(), fbgetval(), fbgetval_last_tu(), fbgetvals_tu(), fbgetvall_tu()

2.19. fbget_fbsize

fballoc() 또는 tpalloc()으로 할당된 필드 버퍼의 크기를 반환하는 함수이다.

fballoc() 또는 tpalloc()을 통하여 메모리에 1024Byte 보다 작은 필드 버퍼를 할당하려고 할 때 기본적으로 메모리는 1024Byte로 할당한다. 이러한 경우 Tmax 내부에서 쓰이는 헤더 크기를 더하여 fbget_fbsize()는 1024 + 8 = 1032Byte를 반환한다. 그 이외의 경우에 fbget_fbsize()의 반환값은 fbcalcsize()로 계산한 결과에 헤더 크기(8Byte)를 더한 값과 같다.

  • 프로토타입

    #include <fbuf.h>
    #include <atmi.h>
    long fbget_fbsize(FBUF *fbuf)
  • 파라미터

    파라미터설명
    fbufffballoc() 또는 tpalloc()으로 메모리에 할당된 필드 버퍼이다.
  • 반환값

    반환값설명
    필드 버퍼의 크기함수 호출에 성공한 경우이다(메모리에 할당된 필드 버퍼의 크기를 반환한다).
  • 오류

    fberrno에 다음 값이 설정된다.

    에러 코드설명
    FBEINVAL입력 파라미터로 지정된 값 중 유효하지 않은 파라미터가 있음을 의미한다. 예를 들면 fbuf가 NULL로 지정된 경우 해당 에러가 발생한다.
  • 예제

    #include “demo_fdl.h”
    . . .
    long ret;
    FBUF *fbuf;
    
    if ((fbuf = fballoc(10, 100)) == NULL) {
        printf(“fballoc failed, errno = %d\n”, fberror);
        ........
    }
    fbput(fbuf, INPUT, “1111”, 0);
    ret = fbget_fbsize(fbuf ) ;
    printf(“Field Buffer Size: [%ld]\n”, ret);
    /* output: Field Buffer Size: [1024] */
    . . .
  • 관련 함수

    fbcalcsize(), tpalloc(), fballoc(), fbfree(), fbinit()

2.20. fbget_fldkey

fdlc 유틸리티에서 컴파일되어 생성된 필드 테이블(FDLFILE에 설정된 FDL 파일)과 관련하여 지정한 필드명과 matching되는 식별자를 반환하는 함수이다. 이 식별자를 필드키라고 부른다. 필드 버퍼에 저장되는 데이터의 형식은 필드키와 필드 데이터의 조합이기 때문에 필드 버퍼에 데이터를 저장하기 위해서는 지정한 필드 이름에 해당하는 필드키를 알아야 한다.

  • 프로토타입

    #include <fbuf.h>
    #include <atmi.h>
    FLDKEY fbget_fldkey(char *name)
  • 파라미터

    파라미터설명
    name필드 테이블을 생성하는데 사용되는 필드 이름이다.
  • 반환값

    반환값설명
    0지정한 필드 이름이 필드 테이블에 존재하지 않는 경우이다.
    필드 이름과 matching되는 필드키지정한 필드 이름이 필드 테이블에 존재하는 경우이다.
  • 예제

    #include “demo_fdl.h”
    . . .
    FLDKEY fkey;
    FBUF *sndbuf;
    
    fkey = fbget_fldkey(“INPUT”);
    printf(“Field Key : [%d]\n”, fkey);
    
    /* output : Field Key : [469762149] */
    ........
    fbput(sndbuf, fkey, “1111", 0);
    . . .
  • 관련 함수

    fbget_fldname(), fbget_fldno(), fbget_fldtype(), fbget_strfldtype(), fbtypecvt()

2.21. fbget_fldname

fbget_fldkey()와는 반대로 fdlc 유틸리티를 통하여 컴파일되어 생성된 필드 테이블(FDLFILE에 설정된 FDL 파일)과 관련하여 지정한 필드키와 matching되는 필드 이름을 반환하는 함수이다.

  • 프로토타입

    #include <fbuf.h>
    #include <atmi.h>
    char *fbget_fldname(FLDKEY fldkey)
  • 파라미터

    파라미터설명
    fldkey필드 테이블을 생성하기 위하여 필요한 데이터를 정의한 파일(***.f)을 fdlc 유틸리티를 통하여 컴파일하여 생성된 헤더 파일(***_fdl.h)을 이용하거나 또는 fbget_fldkey()를 이용해서 얻은 필드키이다.
  • 반환값

    반환값설명
    필드 이름과 matching되는 필드키지정한 필드키에 대한 필드 이름이 필드 테이블에 존재하는 경우이다.
    NULL지정한 필드키에 대한 필드 이름이 필드 테이블에 존재하지 않을 경우이다.
  • 예제

    #include “demo_fdl.h”
    . . .
    FLDKEY fkey;
    char *name;
    
    fkey = fbget_fldkey(“INPUT”);
    printf(“Field Key : [%d]\n”, fkey);
    /* output : Field Key : [469762149] */
    
    name = fbget_fldname(fkey);
    printf(“Field Name : [%s]\n”, name);
    /* output : Field Name : [INPUT] */
    . . .
  • 관련 함수

    fbget_fldkey(), fbget_fldno(), fbget_fldtype(), fbget_strfldtype(), fbtypecvt()

2.22. fbget_fldno

필드 테이블을 생성하기 위해 필요한 데이터 중 지정한 필드키와 matching되는 필드 번호를 반환하는 함수이다. 필드 테이블을 생성하기 위해서는 필드형, 필드 이름, 필드 번호 등이 필요하며 이러한 조합으로 유일한(unique) 필드키를 만들 수 있다. 이러한 필드키를 모아서 관리하는 것이 필드 테이블이다.

  • 프로토타입

    #include <fbuf.h>
    #include <atmi.h>
    int fbget_fldno(FLDKEY fldkey)
  • 파라미터

    파라미터설명
    fldkey필드 테이블을 생성하기 위하여 필요한 데이터를 정의해 놓은 파일(***.f)을 fdlc 유틸리티를 통하여 컴파일하여 생성된 헤더 파일(***_fdl.h)을 이용하거나 또는 fbget_fldkey()를 이용해서 얻은 필드키이다.
  • 반환값

    반환값설명
    1함수 호출에 성공한 경우이다.
    -1필드 버퍼에서 지정한 필드키를 찾지 못하거나 함수 수행 중 다른 에러가 발생하였을 경우이다(fberror에 에러 코드가 설정된다).
  • 오류

    fberrno에 다음 값 중 하나가 설정된다.

    에러 코드설명
    FBENOENT지정한 필드키가 FDLFILE(환경변수 : 기본값 tmax.fdl)에 정의되지 않아서 필드 버퍼에서 사용할 수 없는 경우 fberror는 FBENOENT로 설정된다.
    FBEINVAL입력 파라미터로 지정된 값 중 유효하지 않은 파라미터가 있음을 의미한다.
    FBETYPETmax에서 지원하지 않는 타입이 사용되었다.
    FBEBADFLD잘못된 필드를 사용하였다.
  • 예제

    #include “demo_fdl.h”
    . . .
    long ret;
    FLDKEY len;
    int nth;
    char buffer[100];
    FBUF *fbuf;
    
    if ((fbuf = fballoc(10, 100)) == NULL) {
        printf(“fballoc failed, errno = %d\n”, fberror);
        ........
    }
    
    fbput(fbuf, INPUT, “aaaa”, 0);
    fbput(fbuf, INPUT, “bbbb”, 0);
    fbput(fbuf, INPUT, “cccc”, 0);
    
    fbgetlast_tu(fbuf, INPUT, &nth, buffer, &len);
    printf(“Field Data: [%s], occurrence = %d, len = %d\n”, buffer, nth, len);
    /* output: Field Data: [cccc], occurrence = 2, len = 4 */
    . . .
  • 관련 함수

    fbput(), fbchg_tu(), fbget_tu(), fbgetval(), fbgetval_last_tu(), fbgetvals_tu(), fbgetvall_tu(), fbgetalloc_tu()

2.23. fbget_fldtype

지정한 필드키의 필드형을 정수로 반환하는 함수이다.

  • 프로토타입

    #include <fbuf.h>
    #include <atmi.h>
    int fbget_fldtype(FLDKEY fldkey)
  • 파라미터

    파라미터설명
    fldkey필드 테이블을 생성하기 위하여 필요한 데이터를 정의해 놓은 파일(***.f)을 fdlc 유틸리티를 통하여 컴파일하여 생성된 헤더 파일(***_fdl.h)을 이용하거나 또는 fbget_fldkey()를 이용해서 얻은 필드키이다.
  • 반환값

    반환값은 다음과 같이 1~8까지의 int 값으로 함수에서 반환되는 필드형과 그에 matching되는 반환값은 다음과 같다.

    반환값필드형
    1character
    2short integer
    3integer
    4long integer
    5float
    6double
    7string
    8character array(carray)
  • 예제

    #include “demo_fdl.h”
    . . .
    FLDKEY fkey;
    int type;
    
    fkey = fbget_fldkey(“INPUT”);
    printf(“Field Key : [%d]\n”, fkey);/* output: Field Key : [469762149] */
    type = fbget_fldtype(fkey);
    printf(“Field Type : [%d]\n”, type);/* output : Field Type : [7] */
    . . .
  • 관련 함수

    fbget_fldname(), fbget_fldno(), fbget_fldkey(), fbget_strfldtype(), fbtypecvt()

2.24. fbgetlast_tu

필드 버퍼에서 지정한 필드키에 저장되어 있는 필드 데이터 중 마지막 순번의 데이터를 반환하는 함수이다. 반환되는 데이터가 필드 데이터 중 몇 번째 순번인지와 필드 데이터의 길이를 데이터와 함께 반환한다.

  • 프로토타입

    #include <fbuf.h>
    #include <atmi.h>
    int fbgetlast_tu(FBUF *fbuf, FLDKEY fldkey, int *nth, char *loc, int *len)
  • 파라미터

    파라미터설명
    fbufballoc() 또는 tpalloc()으로 메모리에 할당된 필드 버퍼이다.
    fldkey필드 버퍼에서 읽어 올 필드키를 의미한다.
    nth지정한 필드키에 저장되어 있는 필드 데이터 중 마지막 순번이 저장되는 포인터로 데이터를 읽어 올 필드키의 필드 순번을 저장한다.
    loc가져온 필드 데이터를 저장하는 포인터이다.
    len가져온 필드 데이터의 길이를 저장하는 포인터이다.
  • 반환값

    반환값설명
    1함수 호출에 성공한 경우이다.
    -1필드 버퍼에서 지정한 필드키를 찾지 못하거나 함수 수행 중 다른 에러가 발생하였을 경우이다(fberror에 에러 코드가 설정된다).
  • 오류

    fberrno에 다음 값 중 하나가 설정된다.

    에러 코드설명
    FBENOENT지정한 필드키가 FDLFILE(환경변수 : 기본값 tmax.fdl)에 정의되지 않아서 필드 버퍼에서 사용할 수 없는 경우 fberror는 FBENOENT로 설정된다.
    FBEINVAL입력 파라미터로 지정된 값 중 유효하지 않은 파라미터가 있음을 의미한다.
    FBETYPETmax에서 지원하지 않는 타입이 사용되었다.
    FBEBADFLD잘못된 필드를 사용하였다.
  • 예제

    #include “demo_fdl.h”
    . . .
    long ret;
    FLDKEY len;
    int nth;
    char buffer[100];
    FBUF *fbuf;
    
    if ((fbuf = fballoc(10, 100)) == NULL) {
        printf(“fballoc failed, errno = %d\n”, fberror);
        ........
    }
    fbput(fbuf, INPUT, “aaaa”, 0);
    fbput(fbuf, INPUT, “bbbb”, 0);
    fbput(fbuf, INPUT, “cccc”, 0);
    
    fbgetlast_tu(fbuf, INPUT, &nth, buffer, &len);
    printf(“Field Data: [%s], occurrence = %d, len = %d\n”, buffer, nth, len);
    /* output: Field Data: [cccc], occurrence = 2, len = 4 */
    . . .
  • 관련 함수

    fbput(), fbchg_tu(), fbget_tu(), fbgetval(), fbgetval_last_tu(), fbgetvals_tu(), fbgetvall_tu(), fbgetalloc_tu()

2.25. fbget_strfldtype

지정한 필드키에 저장될 필드 데이터의 타입을 문자열로 반환하는 함수이다. fbget_fldtype()은 지정한 필드키의 필드형을 미리 지정한 정수로 반환하지만 이 함수는 필드형을 문자열 그대로 반환한다.

  • 프로토타입

    #include <fbuf.h>
    #include <atmi.h>
    char *fbget_strfldtype(FLDKEY fldkey)
  • 파라미터

    파라미터설명
    fldkey필드 테이블을 생성하기 위하여 필요한 데이터를 정의해 놓은 파일(***.f)을 fdlc 유틸리티를 통하여 컴파일하여 생성된 헤더 파일(***_fdl.h)을 이용하거나 또는 fbget_fldkey()를 이용해서 얻은 필드키이다.
  • 반환값

    반환값설명
    빈 문자열(" ")파라미터로 지정한 필드키에 해당하는 필드형이 없거나 필드키가 잘못 지정된 경우이다.
    문자열(지정한 필드키에 대한 필드형)파라미터로 지정한 필드키에 해당하는 필드키가 존재하는 경우이다.
  • 예제

    #include “demo_fdl.h”
    . . .
    FLDKEY fkey;
    char *stype;
    ……
    fkey = fbget_fldkey(“INPUT”);
    printf(“Field Key : [%d]\n”, fkey);
    /* output : Field Key : [469762149] */
    
    stype = fbget_strfldtype(fkey);
    printf(“Field Type : [%s]\n”, stype);
    /* output : Field type : [string] */
  • 관련 함수

    fbget_fldname(), fbget_fldno(), fbget_fldtype(), fbtypecvt()

2.26. fbget_tu

필드 버퍼에서 지정한 필드키의 지정한 필드 순번에 해당하는 필드의 데이터를 읽어 오는 함수이다. fldkey에서 지정한 필드키의 value에서 지정한 필드 순번에 해당하는 필드의 데이터를 읽어 온다.

fbget_tu()와 유사한 fbget()은 읽어 올 필드키만 지정하면 그 필드키에 저장되어 있는 필드 데이터를 처음부터 차례로 순번을 증가시켜 가면서 읽어 온다. 이에 비해 fbget_tu()는 지정한 필드키에 저장되어 있는 데이터 중 필드 순번까지도 지정할 수 있다. 또한 fbget()의 경우 한 번 읽어 온 데이터에 더 이상 접근할 수 없지만, fbget_tu()는 필드 순번까지 지정할 수 있으므로 하나의 필드 데이터를 여러 번 읽어 올 수 있다.

  • 프로토타입

    #include <fbuf.h>
    #include <atmi.h>
    int fbget_tu(FBUF *fbuf, FLDKEY fldkey, int nth, char *value, FLDLEN *len)

  • 파라미터

    파라미터설명
    fbuffballoc() 또는 tpalloc()으로 메모리에 할당된 필드 버퍼이다.
    fldkey필드 버퍼에서 읽어 올 필드키를 의미한다.
    nth읽어 올 필드 순번을 나타낸다.
    value읽어 온 필드 데이터를 가리키는 포인터이다. 필드키가 정수형 또는 실수형인 경우에는 반드시 각 타입에 맞는 변수를 사용하되 앞에서 기술한 함수의 프로토타입에 맞게 type casting을 한다.
    len읽어 온 데이터의 길이를 나타낸다.
  • 반환값

    반환값설명
    1지정한 필드키가 필드 버퍼에 존재하는 경우이다.
    -1지정한 필드키가 필드 버퍼에 존재하지 않는 경우이다(fberror에 에러 코드가 설정된다).

  • 오류

    fberrno에 다음 값 중 하나가 설정된다.

    에러 코드설명
    FBENOENT지정한 필드키가 FDLFILE(환경변수 : 기본값 tmax.fdl)에 정의되지 않아서 필드 버퍼에서 사용할 수 없는 경우 fberror는 FBENOENT로 설정된다.
    FBEINVAL입력 파라미터로 지정된 값 중 유효하지 않은 파라미터가 있음을 의미한다.
    FBETYPETmax에서 지원하지 않는 타입이 사용되었다.
    FBEBADFLD잘못된 필드를 사용하였다.
  • 예제

    #include “demo_fdl.h”
    . . .
    char buffer[100];
    long rcvlen;
    FLDLEN fldlen;
    FBUF *fbuf;
    
    if ((fbuf = fballoc(10, 100)) == NULL) {
        printf(“fballoc failed, errno = %d\n”, fberror);
        ........
    }
    
    fbput(fbuf, INPUT, “aaaa”, 0);
    fbput(fbuf, INPUT, “bbbb”, 0);
    fbput(fbuf, OUTPUT, “cccc”, 0);
    
    fbget_tu(fbuf, INPUT, 1, buffer, &fldlen);
    printf(“Data: [%s]\n”, buffer) /* output: Data: [bbbb] */
    .....
  • 관련 함수

    fbput(), fbget(), fbget_tut(), fbgetval(), fbgetval_tu(), fbgetvals_tu(), fbgetvall_tu(), fbgetval_last_tu()

2.27. fbget_tut

지정한 필드키의 필드 순번에 해당하는 필드 데이터를 지정한 타입으로 변환하여 반환하는 함수이다. fldkey에서 지정한 필드키의 nth에서 지정한 필드 순번에 해당하는 필드의 데이터를 읽어 온다.

fbget_tu()와 거의 같은 역할을 하지만 fbget_tu()는 지정한 필드키의 필드 순번에 해당하는 필드 데이터를 그대로 읽어 오고, fbget_tut()는 필드 데이터를 지정한 타입으로 변환하여 읽어 올 수 있다는 점이 다르다.

  • 프로토타입

    #include <fbuf.h>
    #include <atmi.h>
    int fbget_tut(FBUF *fbuf, FLDKEY fldkey, int nth, char *value, FLDLEN *len, 
                  int type)
  • 파라미터

    파라미터설명
    fbuffballoc() 또는 tpalloc()으로 메모리에 할당된 필드 버퍼이다.
    fldkey필드 버퍼에서 읽어 올 필드키를 의미한다.
    nth읽어 올 필드 순번을 의미한다.
    value읽어 온 필드 데이터를 가리키는 포인터이다. 만약 필드키가 정수형 또는 실수형인 경우에는 반드시 각 타입에 맞는 변수를 사용하되 앞에서 기술한 함수의 프로토타입에 맞게 type casting을 한다.
    len읽어 온 데이터의 길이를 의미한다.
    type

    읽어 온 데이터형을 변환할 경우 데이터형으로 설정가능한 값은 다음과 같다.

    • FB_CARRAY, FB_SHORT, FB_DOUBLE, FB_LONG, FB_STRING, FB_CHAR, FB_FLOAT, FB_INT

  • 반환값

    반환값설명
    1지정한 필드키가 필드 버퍼에 존재하는 경우이다.
    -1지정한 필드키가 필드 버퍼에 존재하지 않는 경우이다(fberror에 에러 코드가 설정된다).
  • 오류

    fberrno에 다음 값 중 하나가 설정된다.

    에러 코드설명
    FBENOENT지정한 필드키가 FDLFILE(환경변수 : 기본값 tmax.fdl)에 정의되지 않아서 필드 버퍼에서 사용할 수 없는 경우 fberror는 FBENOENT로 설정된다.
    FBETYPETmax에서 지원하지 않는 타입이 사용되었다.
    FBEBADFLD잘못된 필드를 사용하였다.
    FBEINVAL입력 파라미터로 지정된 값 중 유효하지 않은 파라미터가 있음을 의미한다. 예를 들면 fbuf가 NULL로 지정된 경우 해당 에러가 발생한다.
  • 예제

    #include “demo_fdl.h”
    . . .
    FBUF *fbuf;
    int ret, val=65;
    
    if ((fbuf = fballoc(10, 100)) == NULL) {
        printf(“fballoc failed, errno = %d\n”, fberror);
        ........
    }
    fbputt(fbuf, INPUT,  (char *)&val, 0, FB_INT);
    fbputt(fbuf, INTDATA, "1111", 0, FB_STRING);
    fbprint(fbuf);
    
    fbget_tut(fbuf, INTDATA, 0, (char *)&ret, &fldlen, FB_INT);
    printf("Field Data: [%d]\n", ret);
    /* output: Field Data: [1111] */
    .....
  • 관련 함수

    fbput(), fbget(), fbget_tu(), fbgetval(), fbgetval_tu(), fbgetvals_tu(), fbgetvall_tu(), fbgetval_last_tu()

2.28. fbget_unused

fballoc() 또는 tpalloc()으로 메모리에 할당된 필드 버퍼 중 아직 사용되지 않은 필드 버퍼의 크기를 계산하여 Byte 단위로 반환하는 함수이다.

  • 프로토타입

    #include <fbuf.h>
    #include <atmi.h>
    long fbget_unused(FBUF *fbuf)
  • 파라미터

    파라미터설명
    fbuffballoc() 또는 tpalloc()으로 메모리에 할당된 필드 버퍼이다.
  • 반환값

    메모리에 할당된 필드 버퍼 중 아직 사용되지 않은 메모리의 크기를 Byte 단위로 반환한다.

  • 오류

    fberrno에 다음 값이 설정된다.

    에러 코드설명
    FBEINVAL입력 파라미터로 지정된 값 중 유효하지 않은 파라미터가 있음을 의미한다.
  • 예제

    #include “demo_fdl.h”
    . . .
    long ret;
    FBUF *fbuf;
    
    if ((fbuf = fballoc(10, 100)) == NULL) {
        printf(“fballoc failed, errno = %d\n”, fberror);
        ........
    }
    
    fbput(fbuf, INPUT, “1111”, 0);
    ret = fbget_unused (fbuf);
    printf(“Unused Buffer Size: [%d]\n”, ret);
    
    /* output: Unused Buffer Size: [1000] */
    . . .
  • 관련 함수

    fbcalcsize(), fbget_fbsize(), fbget_used()

2.29. fbget_used

fballoc() 또는 tpalloc()으로 메모리에 할당된 필드 버퍼 중 현재 사용 중인 필드 버퍼의 크기를 계산하여 Byte 단위로 반환하는 함수이다.

  • 프로토타입

    #include <fbuf.h>
    #include <atmi.h>
    long fbget_used(FBUF *fbuf)
  • 파라미터

    파라미터설명
    fbuffballoc() 또는 tpalloc()으로 메모리에 할당된 필드 버퍼이다.
  • 반환값

    메모리에 할당된 필드 버퍼 중 현재 사용 중인 메모리의 크기를 Byte 단위로 반환한다.

  • 오류

    fberrno에 다음 값이 설정된다.

    에러 코드설명
    FBEINVAL입력 파라미터로 지정된 값 중 유효하지 않은 파라미터가 있음을 의미한다.
  • 예제

    #include “demo_fdl.h”
    . . .
    long ret;
    FBUF *fbuf;
    
    if ((fbuf = fballoc(10, 100)) == NULL) {
        printf(“fballoc failed, errno = %d\n”, fberror);
        ........
    }
    
    fbput(fbuf, INPUT, “1111”, 0);
    ret = fbget_used(fbuf);
    printf(“Used Buffer Size: [%d]\n”, ret);
    
    /* output: Used Buffer Size: [24] */
    . . .
  • 관련 함수

    fbcalcsize(), fbget_fbsize(), fbget_unused()

2.30. fbgetf

fballoc() 또는 tpalloc()으로 메모리에 할당된 필드 버퍼에 저장되어 있는 필드 데이터를 순차적으로 읽어 오는 함수이다.

fbgetf()는 fbget()과 똑같은 기능을 하는 함수이지만 내부적으로 다음 필드의 위치를 저장하고 있으므로 fbget()보다 수행 속도가 월등하게 빠르다. Microsoft Visual Basic에서 20,000개의 필드 데이터를 받는 경우, fbget()을 이용하면 400초가 소요되고, fbgetf()를 이용하면 2.5초가 소요된다.

  • 프로토타입

    #include <fbuf.h>
    #include <atmi.h>
    int fbgetf(FBUF *fbuf, FLDKEY fldkey, char *loc, int *fldlen, int *pos)
  • 파라미터

    파라미터설명
    fbuffballoc() 또는 tpalloc()으로 메모리에 할당된 필드 버퍼이다.
    fldkey데이터를 가져오려는 필드키를 의미한다.
    loc읽어 온 데이터가 반환하는 포인터이다.
    fldlen읽어 온 데이터의 길이가 반환된다.
    pos읽어 올 다음 데이터의 위치를 반환하는 포인터이다. pos는 fbgetf()를 사용할 필드키마다 따로 두어야 하고, fbgetf()를 호출하기 전에 반드시 0으로 초기화한다.
  • 반환값

    반환값설명
    1지정한 필드키의 필드 데이터를 정상적으로 읽어 온 경우이다.
    -1지정한 필드키의 필드 데이터를 정상적으로 읽어 오지 못하는 경우이다(fberror에 에러 코드가 설정된다).
  • 오류

    fberrno에 다음 값 중 하나가 설정된다.

    에러 코드설명
    FBENOENT지정한 필드키가 FDLFILE(환경변수 : 기본값 tmax.fdl)에 정의되지 않아서 필드 버퍼에서 사용할 수 없는 경우 fberror는 FBENOENT로 설정된다.
    FBEINVAL입력 파라미터로 지정된 값 중 유효하지 않은 파라미터가 있음을 의미한다.
    FBETYPETmax에서 지원하지 않는 타입이 사용되었다.
  • 예제

    #include “demo_fdl.h”
    . . .
    int ret, int0_pos, str0_pos, fldlen;
    char str0[30];
    FBUF *fbuf;
    
    if ((fbuf = fballoc(20000, 1000000)) == NULL) {
        printf(“fballoc failed, errno = %d\n”, fberror);
        ........
    }
    
    int0_pos = str0_pos = 0;
    while(1)
    {
        ret = fbgetf(fbuf, STR0, (char *)str0, (int *)&fldlen, &str0_pos);
        if(ret < 0)
        {
            printf(“FBERROR at STR0:%d\n”, fberror);
            break;
         }
         ret = fbgetf(fbuf, INT0, (char *)&int0, (int *)&fldlen, &int0_pos);
         if(ret < 0)
         {
            . . . .
         }
         . . . .
    }
    . . . .
  • 관련 함수

    fbget(), fbgetval(), fbget_tu(), fbgetvals(), fbgetvali(), fbgetvalt(), fbgetvall_tu()

2.31. fbgetlen

fballoc() 또는 tpalloc()으로 메모리에 할당된 필드 버퍼에 지정한 필드키의 필드 순번에 해당하는 필드 데이터의 길이를 반환하는 함수이다.

  • 프로토타입

    #include <fbuf.h>
    #include <atmi.h>
    int fbgetlen(FBUF *fbuf, FLDKEY fldkey, int nth)
  • 파라미터

    파라미터설명
    fbuffballoc() 또는 tpalloc()으로 메모리에 할당된 필드 버퍼이다.
    fldkey데이터를 가져올 필드키를 의미한다.
    nth데이터의 길이를 알고자 하는 필드 순번을 의미한다.
  • 반환값

    반환값설명
    필드 데이터의 길이필드 버퍼에서 지정한 필드를 찾은 경우이다.
    -1필드 버퍼에서 지정한 필드를 찾지 못한 경우이다(fberror에 에러 코드가 설정된다).
  • 오류

    fberrno에 다음 값 중 하나가 설정된다.

    에러 코드설명
    FBENOENT지정한 필드키가 FDLFILE(환경변수 : 기본값 tmax.fdl)에 정의되지 않아서 필드 버퍼에서 사용할 수 없는 경우 fberror는 FBENOENT로 설정된다.
    FBEBADFLD유효하지 않은 필드키가 사용되었다. 일반적으로 필드키가 fdlc 유틸리티를 사용하여 컴파일되지 않은 필드키가 사용되었을 경우 fberror는 FBEBADFLD로 설정된다.
    FBEINVAL입력 파라미터로 지정된 값 중 유효하지 않은 파라미터가 있음을 의미한다.
  • 예제

    #include “demo_fdl.h”
    . . .
    int ret;
    if ((fbuf = fballoc(10, 100)) == NULL) {
        printf(“fballoc failed, errno = %d\n”, fberror);
        ........
    }
    fbput(fbuf, INPUT, “aaaa”, 0);
    fbput(fbuf, INPUT, “bbbb”, 0);
    if(fbgetlen(fbuf, INPUT, 1)  <  0)
    {
          ......
    }
    ......
  • 관련 함수

    fbget_fbsize(), fbget_used(), fbget_unused(), fbcalcsize()

2.32. fbgetnth

필드 버퍼에서 지정한 필드키에 저장되어 있는 필드 데이터 중 지정한 데이터가 저장되어 있는 필드의 개수를 반환하는 함수이다. 데이터가 여러 번 저장되어 있다면 해당 필드의 개수 중 가장 작은 값이 반환된다.

  • 프로토타입

    #include <fbuf.h>
    #include <atmi.h>
    int fbgetnth(FBUF *fbuf, FLDKEY fldkey, char *value, FLDLEN fldlen)
  • 파라미터

    파라미터설명
    fbuffballoc() 또는 tpalloc()으로 메모리에 할당된 필드 버퍼이다.
    fldkey필드 버퍼에서 데이터를 비교할 필드키를 의미한다.
    value필드 데이터와 비교할 데이터를 가리키는 포인터이다. 필드키가 정수형 또는 실수형인 경우에는 반드시 각 타입에 맞는 변수를 사용하되 앞에서 기술한 함수의 프로토타입에 맞게 type casting을 한다.
    fldlen데이터의 길이를 나타내는데 지정한 필드키의 타입이 FB_CARRAY가 아닌 경우에는 0으로 지정해도 무방하다.
  • 반환값

    반환값설명
    지정한 데이터의 필드 순번지정한 필드키의 필드 순번이 필드 버퍼에 존재하는 경우이다.
    -1지정한 필드키의 필드 순번이 필드 버퍼에 존재하지 않는 경우이다(fberror에 에러 코드가 설정된다).
  • 오류

    fberrno에 다음 값이 설정된다.

    에러 코드설명
    FBEINVAL입력 파라미터로 지정된 값 중 유효하지 않은 파라미터가 있음을 의미한다.
  • 예제

    #include “demo_fdl.h”
    . . .
    int occ;
    FBUF *fbuf;
    .....
    if ((fbuf = fballoc(10, 100)) == NULL) {
        printf(“fballoc failed, errno = %d\n”, fberror);
        ........
    }
    fbput(fbuf, INPUT, “aaaa”, 0);
    fbput(fbuf, INPUT, “bbbb”, 0);
    fbput(fbuf, INPUT, “ddddd”, 0);
    fbput(fbuf, INPUT, “eeeee”, 0);
    fbput(fbuf, OUTPUT, “cccc”, 0);
    occ = fbgetnth(fbuf, INPUT, “eeee”, 0);
    printf(“Occurrence: [%d]\n”, occ); /* output: Occurrence: [3] */
    .....
  • 관련 함수

    fbfldcount(), fbkeyoccur(), fbgetntht()

2.33. fbgetntht

지정한 필드키에 저장되어 있는 필드 데이터 중 지정한 데이터가 저장되어 있는 필드 순번을 반환하는 함수이다. fbgetntht()는 fbgetnth()와 매우 유사하게 fldkey에 지정한 필드키에 저장되어 있는 필드 데이터 중 value에 지정한 데이터가 저장되어 있는 필드 순번을 반환한다.

사용자가 fromtype에서 지정한 데이터형과 fldkey에서 지정한 필드키의 필드형이 같지 않은 경우 value의 데이터형을 필드형으로 변환한 후 value, fldlen, 필드형이 일치하는 필드 순번을 찾아서 반환한다는 점이 fbgetnth()와 다르다. fbgetntht()는 value와 matching되는 1번째 필드 순번을 반환한다.

  • 프로토타입

    #include <fbuf.h>
    #include <atmi.h>
    int fbgetntht(FBUF *fbuf, FLDKEY fldkey, char *value, FLDLEN fldlen, int fromtype)
  • 파라미터

    파라미터설명
    fbuffballoc() 또는 tpalloc()으로 메모리에 할당된 필드 버퍼이다.
    fldkey필드 버퍼에서 데이터를 비교할 필드키를 의미한다.
    value필드 데이터와 비교할 데이터를 가리키는 포인터이다. 필드키가 정수형 또는 실수형인 경우에는 반드시 각 타입에 맞는 변수를 사용하되 앞에서 기술한 함수의 프로토타입에 맞게 type casting을 한다.
    fldlen데이터의 길이를 나타내는데 지정한 필드키의 타입이 FB_CARRAY가 아닌 경우에는 0으로 지정해도 무방하다.
    fromtype

    사용자가 지정하는 value의 데이터형으로 다음의 값을 설정할 수 있다.

    • FB_CARRAY, FB_SHORT, FB_DOUBLE, FB_LONG, FB_STRING, FB_CHAR, FB_FLOAT, FB_INT

  • 반환값

    반환값설명
    지정한 데이터의 필드 순번지정한 필드키의 필드 순번이 필드 버퍼에 존재하는 경우이다.
    -1지정한 필드키의 필드 순번이 필드 버퍼에 존재하지 않는 경우이다(fberror에 에러 코드가 설정된다).
  • 오류

    fberrno에 다음 값 중 하나가 설정된다.

    에러 코드설명
    FBENOENT지정한 필드키가 FDLFILE(환경변수 : 기본값 tmax.fdl)에 정의되어 있지 않으므로 필드 버퍼에서 사용할 수 없는 경우 fberror는 FBENOENT로 설정된다.
    FBENOSPACE필드 버퍼에 데이터를 저장하거나 복사할 공간이 부족할 경우 fberror는 FBENOSPACE로 설정된다.
    FBEINVAL입력 파라미터로 지정된 값 중 유효하지 않은 파라미터가 있음을 의미한다.
    FBETYPETmax에서 지원하지 않는 타입이 사용되었다.
    FBEBADFLD유효하지 않은 필드키가 사용되었다. 일반적으로 필드키가 fdlc 유틸리티를 사용하여 컴파일되지 않은 필드키가 사용되었을 경우 fberror는 FBEBADFLD로 설정된다.
  • 예제

    #include “demo_fdl.h”
    . . .
    int occ, val;
    FBUF *fbuf;
    .....
    if ((fbuf = fballoc(10, 100)) == NULL) {
        printf(“fballoc failed, errno = %d\n”, fberror);
        ........
    }
    
    val = 1111;
    fbput(fbuf, INPUT,  "aaaa", 0);
    fbput(fbuf, INPUT,  "dddd", 0);
    fbput(fbuf, INPUT,  “1111”, 0);
    fbput(fbuf, OUTPUT, "cccc", 0);
    
    occ=fbgetntht(fbuf, INPUT, (char *)&val, 0, FB_INT);
    printf("Occurrence: [%d]\n", occ); /* Occurrence: [2] */
    . . .
  • 관련 함수

    fbfldcount(), fbkeyoccur(), fbgetnth()

2.34. fbgetval

필드 버퍼에서 지정한 필드키에 저장되어 있는 필드 데이터 중 지정한 필드 순번에 해당하는 필드 데이터를 반환하는 함수이다. fldkey에서 지정한 필드키에 저장되어 있는 필드 데이터 중 nth 파라미터에서 지정한 필드 순번에 해당하는 필드 데이터를 반환한다.

fbgetval()은 fbget_tu()와 거의 같은 역할을 하는 함수이지만 약간의 차이가 있다. fbget_tu()는 읽어 오는 데이터가 함수의 파라미터를 통해 반환되지만 fbgetval()은 함수 자체의 반환값으로 읽어 오는 데이터를 반환한다. 함수가 반환하는 버퍼 내의 포인터는 관련 함수용으로만 사용 가능하며 버퍼의 내용을 수정하는 데는 사용할 수 없다. fbgetval()에서 반환되는 주소값은 해당 버퍼가 수정되지 않는 한 유효하다. 또한 이 값은 사용자가 지정한 타입의 파라미터를 따르지 않을 수도 있다. 따라서 long이나 double형 등에 대해서 casting하여 해당 값을 이용하는 경우 올바른 데이터 값을 보장할 수 없으며 시스템 에러가 발생할 수 있다.

이와 같은 관련 함수가 필요하다면 fbgetval()을 사용해야 한다.

  • 프로토타입

    #include <fbuf.h>
    #include <atmi.h>
    char *fbgetval(FBUF *fbuf, FLDKEY fldkey, int nth, FLDLEN *fldlen)
  • 파라미터

    파라미터설명
    fbuffballoc() 또는 tpalloc()으로 메모리에 할당된 필드 버퍼이다.
    fldkey필드 버퍼에서 읽어 올 필드키를 의미한다.
    nth읽어 올 필드 순번을 나타낸다.
    fldlen읽어 온 데이터의 길이를 의미한다.
  • 반환값

    반환값설명
    데이터에 대한 포인터지정한 필드키의 필드 순번이 필드 버퍼에 존재하는 경우이다.
    NULL지정한 필드키의 필드 순번이 필드 버퍼에 존재하지 않는 경우이다(fberror에 에러 코드가 설정된다).
  • 오류

    fberrno에 다음 값 중 하나가 설정된다.

    에러 코드설명
    FBENOENT지정한 필드키가 FDLFILE(환경변수 : 기본값 tmax.fdl)에 정의되지 않아서 필드 버퍼에서 사용할 수 없는 경우 fberror는 FBENOENT로 설정된다.
    FBEINVAL입력 파라미터로 지정된 값 중 유효하지 않은 파라미터가 있음을 의미한다.
  • 예제

    #include “demo_fdl.h”
    . . .
    
    char *ptr;
    long rcvlen;
    FLDLEN fldlen;
    FBUF *fbuf;
    
    fbuf = fballoc(10, 100);
    .......
    
    fbput(fbuf, INPUT, "aaaa", 0);
    fbput(fbuf, INPUT, "bbbb", 0);
    
    ptr=fbgetval(fbuf, INPUT, 0, &fldlen);
    printf("Data: [%s]\n", ptr);    /* output: Data: [aaaa] */
    printf("len = %d\n", fldlen);   /* len = 4 */
    .....
  • 관련 함수

    fbput(), fbget(), fbgetval(), fbgetvalt(), fbgetval_tu(), fbgetvals_tu(), fbgetvall_tu(), fbgetval_last_tu()

2.35. fbgetvali

필드 버퍼에서 지정한 필드키에 저장되어 있는 데이터 중 지정한 필드 순번에 해당하는 필드 데이터를 정수로 변환하여 그 정수 값을 반환하는 함수이다.

fldkey에서 지정한 필드키에 저장되어 있는 데이터 중 nth에서 지정한 필드 순번에 해당하는 필드 데이터를 정수로 변환하여 반환한다. 지정한 필드키의 타입이 어떤 타입이라 하더라도 정수로 변환해 준다.

하지만 정수로 변환할 수 없는 경우, 예를 들면 필드 데이터가 “aaaa”일 때는 0을 반환한다.

  • 프로토타입

    #include <fbuf.h>
    #include <atmi.h>
    int fbgetvali (FBUF *fbuf, FLDKEY fldkey, int nth)
  • 파라미터

    파라미터설명
    fbuffballoc() 또는 tpalloc()으로 메모리에 할당된 필드 버퍼이다.
    fldkey필드 버퍼에서 읽어 올 필드키를 의미한다.
    nth읽어 올 필드 순번을 의미한다.
  • 반환값

    반환값설명
    정수함수 호출에 성공한 경우이다(fbgetvali()는 읽어 온 데이터를 정수로 변환하여 반환한다).
    0지정한 필드키의 필드 순번이 필드 버퍼에 존재하지 않거나 함수 수행 중 다른 에러가 발생한 경우이다(fberror에 에러 코드가 설정된다).
  • 오류

    fberrno에 다음 값 중 하나가 설정된다.

    에러 코드설명
    FBENOSPACE필드 버퍼에 데이터를 저장하거나 복사할 공간이 부족할 경우 fberror는 FBENOSPACE로 설정된다.
    FBEINVAL입력 파라미터로 지정된 값 중 유효하지 않은 파라미터가 있음을 의미한다.
    FBETYPETmax에서 지원하지 않는 타입이 사용되었다.
    FBEBADFLD유효하지 않은 필드키가 사용되었다. 일반적으로 필드키가 fdlc 유틸리티를 사용하여 컴파일되지 않은 필드키가 사용되었을 경우 fberror는 FBEBADFLD로 설정된다.
    FBENOENT필드키의 필드 순번에 해당하는 데이터가 필드 버퍼에 존재하지 않는 경우 fberror은 FBENOENT로 설정된다.
  • 예제

    #include “demo_fdl.h ”
    . . .
    
    int cnt;
    int vali;
    FBUF *fbuf;
    
    if ((fbuf = fballoc(10, 100)) == NULL) {
        printf(“fballoc failed, errno = %d\n”, fberror);
        ........
    }
    
    cnt=111;
    fbput(fbuf, TOTMON, (char *)&cnt, 0);
    fbput(fbuf, INPUT, "aaaa", 0);
    vali=fbgetvali(fbuf, TOTMON, 0);
    printf("Field Data: [%d]\n", vali);  /* output: Field Data: [111] */
     
    vali = fbgetvali(fbuf, INPUT, 0);
    printf("Field Data : [%d]\n", vali);  /* output: Field Data: [0] */
     
    fbfree(fbuf);
    .....
  • 관련 함수

    fbput(), fbget(), fbgetval(), fbgetvalt(), fbgetval_tu(), fbgetvals_tu(), fbgetvall_tu(), fbgetval_last_tu()

2.36. fbgetval_last_tu

fldkey에서 지정한 필드키에 저장되어 있는 필드 데이터 중 마지막 순번의 데이터를 반환한다. 함수가 반환할 때 반환되는 데이터가 필드 데이터 중 몇 번째 순번인지와 필드 데이터의 길이를 데이터와 함께 반환한다.

fbgetlast_tu()와 거의 같은 역할을 하는 함수이지만 약간의 차이가 있다. fbgetlast_tu()는 읽어 오는 데이터가 함수의 파라미터를 통해 반환되지만 fbgetval_last_tu()는 함수 자체의 반환값으로 읽어 오는 데이터를 반환한다. 그래서 fbgetlast_tu()는 반드시 프로그램 안에서 로컬 버퍼로 데이터를 옮겼다가 사용해야 하지만 fbgetval_last_tu()는 다른 함수의 파라미터로 바로 사용할 수 있다.

  • 프로토타입

    #include <fbuf.h>
    #include <atmi.h>
    char *fbgetval_last_tu(FBUF *fbuf, FLDKEY fldkey, int *nth, FLDLEN *fldlen)
  • 파라미터

    파라미터설명
    fbuffballoc() 또는 tpalloc()으로 메모리에 할당된 필드 버퍼이다.
    fldkey필드 버퍼에서 읽어 올 필드키를 의미한다.
    nth지정한 필드키에 저장되어 있는 필드 데이터 중 마지막 순번이 저장되는 포인터이다.
    fldlen반환되는 데이터의 길이를 나타낸다.
  • 반환값

    반환값설명
    데이터가 저장된 포인터필드 버퍼에서 지정한 필드키를 찾은 경우이다(읽어 온 데이터가 저장되어 있는 char형 포인터를 반환한다).
    NULL필드 버퍼에서 지정한 필드키를 찾지 못한 경우이다(fberror에 에러 코드가 설정된다).
  • 오류

    fberrno에 다음 값 중 하나가 설정된다.

    에러 코드설명
    FBENOENT지정한 필드키가 FDLFILE(환경변수 : 기본값 tmax.fdl)에 정의되지 않아서 필드 버퍼에서 사용할 수 없는 경우 fberror는 FBENOENT로 설정된다.
    FBEINVAL입력 파라미터로 지정된 값 중 유효하지 않은 파라미터가 있음을 의미한다.
  • 예제

    #include “demo_fdl.h”
    . . .
    
    char     *ptr;
    long     rcvlen;
    int      i,occ ;
    FLDLEN   fldlen;
    FBUF     *fbuf;
    
    if ((fbuf = fballoc(10, 100)) == NULL) {
        printf(“fballoc failed, errno = %d\n”, fberror);
        ........
    }
    
    fbput(fbuf, INPUT, “aaaa”, 0);
    fbput(fbuf, INPUT, “bbbb”, 0);
    fbput(fbuf, INPUT, “ddddd”, 0);
    fbput(fbuf, INPUT, “eeeee”, 0);
    fbput(fbuf, OUTPUT, “cccc”, 0);
    
    ptr = fbgetval_last_tu(fbuf, INPUT, &occ, &fldlen);
    printf(“Data: [%s], Occurrence: [%d]\n”, ptr, occ);
    /* output: Data: [eeeee], Occurrence: [3] */
    for (i = 0; i < occ; i++) {
        ptr = fbgetval(fbuf, INPUT, i, &fldlen);
        printf(“Data: [%s]\n”, ptr);
    }
    .....
  • 관련 함수

    fbput(), fbget(), fbgetval(), fbgetvalt(), fbgetval_tu(), fbgetvals_tu(), fbgetvall_tu(), fbgetval_last_tu(), fbgetlast_tu()

2.37. fbgetvall_tu

필드 버퍼에서 지정한 필드키의 필드 순번의 데이터를 long형으로 변환하여 반환하는 함수이다. fldkey에서 지정한 필드키에 저장되어 있는 필드 데이터 중 nth에서 지정한 필드 순번의 필드 데이터의 필드형이 short, int, long인 경우 모두 long형으로 변환하여 그 값을 반환한다.

fbgetval()과 비슷하게 동작하지만 fbgetval()은 필드형 그대로 필드 데이터를 반환하고 fbgetvall_tu()는 long형으로 변환하여 반환한다. 만약 지정한 필드키의 필드 데이터가 long형으로 변환할 수 없는 형인 경우 fbgetvall_tu()는 0을 반환한다.

  • 프로토타입

    #include <fbuf.h>
    #include <atmi.h>
    long fbgetvall_tu(FBUF *fbuf, FLDKEY fldkey, int nth)
  • 파라미터

    파라미터설명
    fbuffballoc() 또는 tpalloc()으로 메모리에 할당된 필드 버퍼이다.
    fldkey필드 버퍼에서 읽어 올 필드키를 나타낸다.
    nth읽어 올 필드 순번을 나타낸다.
  • 반환값

    반환값설명
    필드 데이터함수 호출에 성공한 경우이다(필드 데이터를 long형으로 변환하여 반환한다).
    0필드 버퍼에서 지정한 필드키를 찾지 못하였을 경우 또는 지정한 필드키가 short, int, long형 중 하나가 아닌 경우이다(fberror에 에러 코드가 설정된다).
  • 오류

    fberrno에 다음 값 중 하나가 설정된다.

    에러 코드설명
    FBENOENT지정한 필드키가 FDLFILE(환경변수 : 기본값 tmax.fdl)에 정의되지 않아서 필드 버퍼에서 사용할 수 없는 경우 fberror는 FBENOENT로 설정된다.
    FBETYPETmax에서 지원하지 않는 타입이 사용되었다. 함수에서 short, int, long형이 아닌 필드가 fldkey로 사용된 경우가 해당된다.
    FBEINVAL입력 파라미터로 지정된 값 중 유효하지 않은 파라미터가 있음을 의미한다.
  • 예제

    #include “demo_fdl.h”
    . . .
    long lval;
    short sval;
    FBUF *fbuf;
    
    if ((fbuf = fballoc(10, 100)) == NULL) {
        printf(“fballoc failed, errno = %d\n”, fberror);
        ........
    }
    
    sval = 111;
    fbput(fbuf, INPUT, (char *)&sval, 0);
    lval = fbgetvall_tu(fbuf, INPUT, 0);
    
    printf(“Field Data: [%ld]\n”, lval); /* output: Field Data: [111] */
    .....
  • 관련 함수

    fbput(), fbget(), fbgetval(), fbgetvalt(), fbgetval_tu(), fbgetvals_tu(), fbgetval_last_tu()

2.38. fbgetvals

fldkey에서 지정한 필드키에 저장되어 있는 필드 데이터 중 nth에서 지정한 필드 순번의 필드 데이터를 그 필드형에 상관없이 모두 문자열로 변환하여 반환한다.

fbgetval()과 비슷하게 동작하지만 fbgetval()은 필드형 그대로 필드 데이터를 반환하는 것이고, fbgetvals()는 문자열로 변환하여 반환한다.

  • 프로토타입

    #include <fbuf.h>
    #include <atmi.h>
    char *fbgetvals (FBUF *fbuf, FLDKEY fldkey, int nth)
  • 파라미터

    파라미터설명
    fbuffballoc() 또는 tpalloc()으로 메모리에 할당된 필드 버퍼이다.
    fldkey필드 버퍼에서 읽어 올 필드키를 나타낸다.
    nth읽어 올 필드 순번을 나타낸다.
  • 반환값

    반환값설명
    필드 데이터함수 호출에 성공한 경우이다(필드 데이터를 문자열로 변환하여 반환한다).
    NULL필드 버퍼에서 지정한 필드키를 찾지 못하였을 경우 또는 함수 수행 중 다른 에러가 발생한 경우이다(fberror에 에러 코드가 설정된다).
  • 오류

    fberrno에 다음 값 중 하나가 설정된다.

    에러 코드설명
    FBENOENT지정한 필드키가 FDLFILE(환경변수 : 기본값 tmax.fdl)에 정의되지 않아서 필드 버퍼에서 사용할 수 없는 경우 fberror는 FBENOENT로 설정된다.
    FBENOSPACE필드 버퍼에 데이터를 저장하거나 복사할 공간이 부족할 경우 fberror는 FBENOSPACE로 설정된다.
    FBEINVAL입력 파라미터로 지정된 값 중 유효하지 않은 파라미터가 있음을 의미한다.
    FBEBADFLD유효하지 않은 필드키가 사용되었다. 일반적으로 필드키가 fdlc 유틸리티를 사용하여 컴파일되지 않은 필드키가 사용되었을 경우 fberror는 FBEBADFLD로 설정된다.
  • 예제

    #include “demo_fdl.h”
    . . .
    char *ptr;
    FBUF *fbuf;
    
    if ((fbuf = fballoc(10, 100)) == NULL) {
        printf(“fballoc failed, errno = %d\n”, fberror);
        ........
    }
    fbput(fbuf, INPUT, “aaaa”, 0);
    ptr = fbgetvals(fbuf, INPUT, 0);
    printf(“Field Data: [%s]\n”, ptr);
    /* output: Field Data: [aaaa] */
    ......
  • 관련 함수

    fbput(), fbget(), fbgetval(), fbgetvalt(), fbgetval_tu(), fbgetvals_tu(), fbgetvall_tu(), fbgetval_last_tu()

2.39. fbgetvals_tu

필드 버퍼에서 지정한 필드키에 저장되어 있는 필드 데이터 중 지정한 필드 순번의 필드 데이터를 그 필드형이 string인 경우 문자열을 반환한다.

fbgetval()과 비슷하게 동작하지만 fbgetval()은 필드형 그대로 필드 데이터를 반환하고 fbgetvals_tu()는 문자열을 반환한다. 또한 fbgetvals()와 비슷하게 동작하지만 약간의 차이점이 있다.

fbgetvals()는 필드 버퍼에서 지정한 필드키의 필드 순번에 해당하는 필드 데이터를 찾지 못했을 경우 NULL을 반환하지만 fbgetvals_tu()는 이러한 경우에 빈 문자열(“ ”)을 반환한다. fbgetvals()는 모든 필드형에서 동작하지만, fbgetvals_tu()는 필드형이 string인 경우에만 동작한다. 다른 필드형의 필드키가 파라미터로 지정되었다면 fbgetvals_tu()는 빈 문자열 (“ ”)을 반환한다.

  • 프로토타입

    #include <fbuf.h>
    #include <atmi.h>
    char *fbgetvals_tu(FBUF *fbuf, FLDKEY fldkey, int nth)
  • 파라미터

    파라미터설명
    fbuffballoc() 또는 tpalloc()으로 메모리에 할당된 필드 버퍼이다.
    fldkey필드 버퍼에서 읽어 올 필드키를 나타낸다.
    nth읽어 올 필드 순번을 나타낸다.
  • 반환값

    반환값설명
    필드 데이터함수 호출에 성공한 경우이다(필드 데이터를 문자열로 변환하여 반환한다).
    빈 문자열(“ ”)필드 버퍼에서 지정한 필드키를 찾지 못하였을 경우 또는 함수 수행 중 다른 에러가 발생한 경우이다(fberror에 에러 코드가 설정된다).
  • 오류

    fberrno에 다음 값이 설정된다.

    에러 코드설명
    FBEINVAL입력 파라미터로 지정된 값 중 유효하지 않은 파라미터가 있음을 의미한다.
  • 예제

    #include “demo_fdl.h”
    . . .
    char *ptr;
    FBUF *fbuf;
    
    if ((fbuf = fballoc(10, 100)) == NULL) {
        printf(“fballoc failed, errno = %d\n”, fberror);
        ........
    }
    fbput(fbuf, INPUT, “aaaa”, 0);
    fbput(fbuf, INPUT, “bbbb”, 0);
    ptr = fbgetvals_tu(fbuf, INPUT, 1);
    printf(“Field Data: [%s]\n”, ptr); /* output: Field Data: [bbbb] */
    .....
  • 관련 함수

    fbget(), fbgetval(), fbgetvalt(), fbgetvals(), fbgetval_tu(), fbgetvall_tu(), fbgetval_last_tu()

2.40. fbgetvalt

fldkey에서 지정한 필드키에 저장되어 있는 필드 데이터 중 nth 파라미터에서 지정한 필드 순번에 해당하는 필드 데이터를 지정한 타입(totype)으로 변환하여 반환한다.

fbgetvalt()는 fbget_tut()와 매우 유사하게 동작하지만 약간의 차이점이 있다.fbget_tut()는 읽어 오는 데이터가 함수의 파라미터를 통해 반환되지만 fbgetvalt()는 함수 자체의 반환값으로 읽어 오는 데이터를 반환한다. fbget_tut()는 반드시 프로그램 안에서 로컬 버퍼로 데이터를 옮겼다가 사용해야 하지만 fbgetvalt()는 다른 함수의 파라미터로 바로 사용할 수 있다.

또한 fbgetval()와 거의 같은 역할을 하지만 fbgetval()은 지정한 필드키의 필드 순번에 해당하는 필드 데이터를 그대로 읽어 오지만 fbgetvalt()는 필드 데이터를 지정한 타입으로 변환하여 읽어 올 수 있다는 점이 다르다. fbgetval()과는 달리 사용자가 지정한 타입의 파라미터를 따르기 때문에 long이나 double형 등에 대해서 casting하여 해당 값을 반환한다.

  • 프로토타입

    #include <fbuf.h>
    #include <atmi.h>
    char *fbgetvalt(FBUF *fbuf, FLDKEY fldkey, int nth, FLDLEN *len, int totype)
  • 파라미터

    파라미터설명
    fbuffballoc() 또는 tpalloc()으로 메모리에 할당된 필드 버퍼이다.
    fldkey필드 버퍼에서 읽어 올 필드키를 나타낸다.
    nth읽어 올 필드 순번을 나타낸다
    len읽어 온 데이터의 길이를 나타낸다.
    totype

    totype에 설정가능한 값은 다음과 같다.

    • FB_CARRAY, FB_SHORT, FB_DOUBLE, FB_LONG, FB_STRING, FB_CHAR, FB_INT, FB_FLOAT

  • 반환값

    반환값설명
    데이터 포인터함수 호출에 성공한 경우이다(읽어 온 데이터가 저장되어 있는 char형 포인터를 반환한다).
    NULL지정한 필드키의 필드 순번이 필드 버퍼에 존재하지 않는 경우이다(fberror에 에러 코드가 설정된다).
  • 오류

    fberrno에 다음 값 중 하나가 설정된다.

    에러 코드설명
    FBENOENT지정한 필드키가 FDLFILE(환경변수 : 기본값 tmax.fdl)에 정의되지 않아서 필드 버퍼에서 사용할 수 없는 경우 fberror는 FBENOENT로 설정된다.
    FBENOSPACE필드 버퍼에 데이터를 저장하거나 복사할 공간이 부족할 경우 fberror는 FBENOSPACE로 설정된다.
    FBEINVAL입력 파라미터로 지정된 값 중 유효하지 않은 파라미터가 있음을 의미한다.
    FBEBADFLD유효하지 않은 필드키가 사용된 경우이다. 일반적으로 필드키가 fdlc 유틸리티를 사용하여 컴파일되지 않은 필드키가 사용되었을 경우 fberror는 FBEBADFLD로 설정된다.
  • 예제

    #include “demo_fdl.h”
    . . .
    
    int *ptr;
    long rcvlen;
    FLDLEN fldlen;
    FBUF *fbuf;
    Int totype;
    Int val = 111;
    
    if ((fbuf = fballoc(10, 100)) == NULL) {
        printf(“fballoc failed, errno = %d\n”, fberror);
        ........
    }
    
    fbput(fbuf, INPUT, “aaaa”, 0);
    fbput(fbuf, INPUT, “bbbb”, 0);
    fbput(fbuf, INPUT, (char *)&val, 0, FB_INT);
    
    ptr = fbgetvalt(fbuf, INPUT, 2, &fldlen, FB_INT);
    printf(“Data: [%d]\n”, ptr); /* output: Data: [111] */
    .....
  • 관련 함수

    fbput(), fbget(), fbgetval(), fbgetval_tu(), fbgetvals_tu(), fbgetvall_tu(), fbgetval_last_tu()

2.41. fbinit

fballoc() 또는 tpalloc()으로 메모리에 할당된 필드 버퍼를 초기화하는 함수이다. 함수를 사용하기 전에 반드시 fballoc() 또는 tpalloc()을 사용하여 메모리에 필드 버퍼를 할당해야 한다. 이전에 필드 버퍼에 저장되어 있던 모든 데이터는 삭제되므로 주의해야 한다.

  • 프로토타입

    #include <fbuf.h>
    #include <atmi.h>
    int fbinit(FBUF *fbuf, FLDLEN buflen)
  • 파라미터

    파라미터설명
    fbuffballoc() 또는 tpalloc()으로 메모리에 할당된 필드 버퍼이다.
    buflen메모리에 할당되어 초기화해야 하는 필드 버퍼의 크기를 나타낸다.
  • 반환값

    반환값설명
    1함수 호출에 성공한 경우이다.
    -1필드 버퍼를 초기화하는데 실패한 경우이다(fberror에 에러 코드가 설정된다).
  • 오류

    fberrno에 다음 값 중 하나가 설정된다.

    에러 코드설명
    FBENOSPACEbuflen로 fbuf를 할당한 크기보다 크게 설정한 경우에 이 에러가 발생한다.
    FBEINVAL입력 파라미터로 지정된 값 중 유효하지 않은 파라미터가 있음을 의미한다. 예를 들면 fbuf가 NULL일 경우 이 에러가 발생한다.
  • 예제

    #include “demo_fdl.h”
    . . .
    FBUF *fbuf;
    int ret;
    long size;
    size = fbcalcsize(10, 100);
    
    if ((fbuf = (FBUF *)tpalloc(“FIELD”, NULL, size)) == NULL) {
        printf(“tpalloc failed, errno = %d\n”, tperrno);
        ........
    }
    ret = fbinit(fbuf, size);
    printf(“fbinit, ret : [%d]\n”, ret); /* fbinit, ret: [1] */
    ........
  • 관련 함수

    fbcalcsize(), tpalloc(), fballoc()

2.42. fbinsert

fballoc() 또는 tpalloc()을 통하여 메모리에 할당된 필드 버퍼에 지정한 필드키의 필드 순번에 해당되는 데이터를 반환하는 함수이다. fldkey 및 nth에 지정한 필드키의 필드 순번에 value에 지정한 데이터를 저장한다.

fbinsert()는 파라미터에 필드키와 필드 순번까지 지정해야 하므로 필드 버퍼 내 특정 위치에 데이터를 저장할 때 유용하게 사용될 수 있다. 그러나 일반적인 경우 필드 데이터를 순차적으로 저장할 때에는 반드시 nth 파라미터를 함수 사용자가 수동으로 증가시켜야 하므로 주의해야 한다. 필드키 내에 여러 필드 데이터가 저장되어 있는 상황에서 필드 순번 중간에 필드 데이터를 삽입할 경우에는 지정한 필드 순번에 데이터를 저장할 수 있고 그 필드 순번부터 저장되어 있던 기존의 데이터는 자동적으로 필드 순번이 하나씩 증가되어 다시 저장된다.

  • 프로토타입

    #include <fbuf.h>
    #include <atmi.h>
    int fbinsert(FBUF *fbuf, FLDKEY fldkey, int nth, char *value, int fldlen)
  • 파라미터

    파라미터설명
    fbuffballoc() 또는 tpalloc()으로 메모리에 할당된 필드 버퍼이다.
    fldkey필드 버퍼에 저장할 필드키를 나타낸다.
    nth저장할 필드 순번을 나타낸다
    value저장할 필드 데이터를 가리키는 포인터이다. 필드키가 정수형 또는 실수형인 경우에는 반드시 각 타입에 맞는 변수를 사용하되 앞에서 기술한 함수의 프로토타입에 맞게 type casting을 한다.
    fldlen저장할 데이터의 길이를 나타낸다. 일반적으로 필드키의 필드형이 FB_CARRAY인 경우에는 반드시 길이를 지정해야 하지만 그렇지 않은 경우에는 이 파라미터는 0으로 지정해도 무방하다.
  • 반환값

    반환값설명
    1함수 호출에 성공한 경우이다.
    -1필드 버퍼에 데이터를 저장하는데 실패한 경우이다(fberror에 에러 코드가 설정된다).
  • 오류

    fberrno에 다음 값 중 하나가 설정된다.

    에러 코드설명
    FBENOSPACE필드 버퍼에 데이터를 저장하거나 복사할 공간이 부족할 경우 fberror는 FBENOSPACE로 설정된다.
    FBEINVAL입력 파라미터로 지정된 값 중 유효하지 않은 파라미터가 있음을 의미한다(현재 필드 순번보다 큰 수를 nth에 지정한 경우 필드키가 carray형이라면 이 에러가 설정된다).
    FBETYPETmax에서 지원하지 않는 타입이 사용되었다.
  • 예제

    #include “demo_fdl.h”
    . . .
    long rcvlen, ret;
    FBUF *fbuf;
    
    if ((fbuf = fballoc(10, 100)) == NULL) {
        printf(“fballoc failed, errno = %d\n”, fberror);
        ........
    }
    fbinsert(fbuf, INPUT, 0, “aaaa”, 0);
    fbinsert (fbuf, INPUT, 1, “bbbb”, 0);
    fbinsert (fbuf, INPUT, 2, “cccc”, 0);
    .....
  • 관련 함수

    fbput(), fbchg_tu(), fbget_tu(), fbgetval(), fbgetval_last_tu(), fbgetvals_tu(), fbgetvall_tu()

2.43. fbisfbuf

필드 버퍼에 데이터를 저장하기 위해서는 반드시 미리 fballoc() 또는 tpalloc()으로 메모리에 버퍼를 할당받아야 한다. fbisfbuf()는 지정한 필드 버퍼가 메모리에 할당받은 유효한 버퍼인지 확인하는 함수이다.

  • 프로토타입

    #include <fbuf.h>
    #include <atmi.h>
    int fbisfbuf(FBUF *fbuf)
  • 파라미터

    파라미터설명
    fbuf검사하려는 필드 버퍼의 포인터이다.
  • 반환값

    반환값설명
    1지정한 필드 버퍼가 유효한 경우이다.
    0지정한 필드 버퍼가 유효하지 않은 경우이다(fberror에 에러 코드가 설정된다).
  • 오류

    fberrno에 다음 값이 설정된다.

    에러 코드설명
    FBEINVAL입력 파라미터로 지정된 값 중 유효하지 않은 파라미터가 있음을 의미한다. 예를 들면 fbuf가 NULL로 지정된 경우 해당 에러가 발생한다.
  • 예제

    #include “demo_fdl.h”
    . . .
    FBUF *fbuf;
    int ret;
    
    if ((fbuf = (FBUF *)tpalloc(“FIELD”, NULL, 0)) == NULL) {
        printf(“tpalloc failed, errno = %d\n”, tperrno);
        ........
    }
    ret = fbisfbuf(fbuf);
    printf(“ret : [%d]\n”, ret); /* output : ret : [1] */
    . . .
  • 관련 함수

    fballoc(), tpalloc()

2.44. fbispres

필드 버퍼에 지정한 필드키의 필드 순번에 필드 데이터가 존재하는지 확인하는 함수이다.

  • 프로토타입

    #include <fbuf.h>
    #include <atmi.h>
    int fbispres(FBUF *fbuf, FLDKEY fldkey, int nth)
  • 파라미터

    파라미터설명
    fbuffballoc() 또는 tpalloc()으로 메모리에 할당된 필드 버퍼이다.
    fldkey필드 버퍼에서 필드 데이터가 존재하는지 확인할 필드키를 의미한다.
    nth필드 데이터가 존재하는지 확인할 필드 순번을 의미한다.
  • 반환값

    반환값설명
    1필드 버퍼에서 지정한 필드키의 필드 순번에 필드 데이터가 존재하는 경우이다.
    0필드 버퍼에서 지정한 필드키의 필드 순번에 필드 데이터가 존재하지 않는 경우이다(fberror에 에러 코드가 설정된다).
  • 오류

    fberrno에 다음 값이 설정된다.

    에러 코드설명
    FBEINVAL입력 파라미터로 지정된 값 중 유효하지 않은 파라미터가 있음을 의미한다. 예를 들면 fbuf가 NULL로 지정된 경우 해당 에러가 발생한다.
  • 예제

    #include “demo_fdl.h”
    . . .
    int ret;
    FBUF *fbuf;
    
    if ((fbuf = fballoc(10, 100)) == NULL) {
        printf(“fballoc failed, errno = %d\n”, fberror);
        ......
    }
    fbput(fbuf, INPUT, “aaaa”, 0);
    fbput(fbuf, INPUT, “bbbb”, 0);
    ret = fbispres(fbuf, INPUT, 1);
    printf(“Field Occ: [%d]\n”, ret); /* output: Field Occ: [1] */
    . . .
  • 관련 함수

    fbgetnth(), fbfldcount(), fbkeyoccur()

2.45. fbkeyoccur

필드 버퍼에서 지정한 필드키에 저장되어 있는 모든 필드의 개수를 반환하는 함수이다. fbfldcount()는 지정한 필드 버퍼에 저장되어 있는 모든 필드의 개수(1부터 시작되는 필드 수)를 반환하지만 fbkeyoccur()는 지정한 필드키에 대한 개수를 반환한다.

  • 프로토타입

    #include <fbuf.h>
    #include <atmi.h>
    int fbkeyoccur(FBUF *fbuf, FLDKEY fldkey)
  • 파라미터

    파라미터설명
    fbuffballoc() 또는 tpalloc()으로 메모리에 할당된 필드 버퍼이다.
    fldkey개수를 알려는 필드키를 나타낸다.
  • 반환값

    반환값설명
    필드의 개수필드 버퍼에 지정한 필드키에 저장된 필드 데이터가 존재하는 경우이다.
    0필드 버퍼에 지정한 필드키에 저장된 필드 데이터가 존재하지 않는 경우이다(fberror에 에러 코드가 설정된다).
  • 오류

    fberrno에 다음 값 중 하나가 설정된다.

    에러 코드설명
    FBEINVAL입력 파라미터로 지정된 값 중 유효하지 않은 파라미터가 있음을 의미한다. 예를 들면 fbuf가 NULL로 지정된 경우 해당 에러가 발생한다.
  • 예제

    #include “demo_fdl.h”
    . . .
    int cnt;
    FBUF *fbuf;
    
    if ((fbuf = fballoc(10, 100)) == NULL) {
        printf(“fballoc failed, errno = %d\n”, fberror);
        ........
    }
    fbput(fbuf, INPUT, “aaaa”, 0);
    fbput(fbuf, INPUT, “bbbb”, 0);
    fbput(fbuf, OUTPUT, “cccc”, 0);
    cnt = fbkeyoccur(fbuf, INPUT);
    printf(“Field Count: [%d]\n”, cnt);
    /* output: Field Count: [2] */
    .....
  • 관련 함수

    fbgetnth(), fbfldcount()

2.46. fbmake_fldkey

필드 정의 파일(***.f)에 정의되어 있지는 않지만 프로그램 내에서 동적으로 새로운 필드키를 생성해야 할 경우에 사용하는 함수이다.

필드키를 하나 만들 때에는 필드형과 Tmax에서 유일한 필드 번호가 필요하므로 이 두 가지를 파라미터로 지정하면 함수 수행 후 필드키가 생성되어 반환된다. 필드 번호에 이미 존재하는 번호를 지정하면 기존에 존재하는 필드키와 동일한 필드키를 생성할 수 있다. 생성된 필드키에 데이터를 저장하여 다른 프로세스에 전달하려면 전달하려는 프로세스에서도 내부적으로 새로 생성한 필드키와 동일한 필드키(type과 no가 같아야 함)가 생성되어 있어야 한다.

  • 프로토타입

    #include <fbuf.h>
    #include <atmi.h>
    FLDKEY fbmake_fldkey(int type, int no)
  • 파라미터

    파라미터설명
    type새로 생성될 필드키의 타입이다.
    no

    필드키를 생성할 때 필요한 필드 번호로 다음의 값을 설정할 수 있다.

    • FB_CARRAY, FB_SHORT, FB_DOUBLE, FB_LONG, FB_STRING, FB_CHAR, FB_INT, FB_FLOAT

  • 반환값

    지정된 type과 no를 조합하여 새로운 필드키를 생성하고 필드키를 반환한다.

  • 예제

    #include “demo_fdl.h”
    . . .
    FLDKEY fkey;
    
    fkey = fbmake_fldkey(FB_STRING, 101);
    printf(“Field Key : [%d]\n”, fkey);
    /* output : Field Key : [469762149] */
    . . .
  • 관련 함수

    fbget_fldkey()

2.47. fbnext_tu

필드 버퍼에서 다음 필드키와 필드 데이터를 반환하는 함수이다. fldkey에 시작 필드키를 지정하면 지정된 시작 필드키로부터 필드 버퍼에 있는 모든 필드키 및 필드 데이터를 순차적으로 반환하는 함수이다. 필드 버퍼에 저장되어 있는 첫 필드키부터 읽어 오려면 지정해야 할 시작 필드키는 반드시 FIRSTFLDKEY이어야 한다.

  • 프로토타입

    #include <fbuf.h>
    #include <atmi.h>
    int fbnext_tu(FBUF *fbuf, FLDKEY *fldkey, int *nth, char *value, int *len)
  • 파라미터

    파라미터설명
    fbuffballoc() 또는 tpalloc()으로 메모리에 할당된 필드 버퍼이다.
    fldkey다음 필드의 필드 키를 가리키는 포인터이다.
    nth다음 필드의 필드 순번을 가리키는 포인터이다.
    value다음 필드의 필드 데이터를 가리키는 포인터이다. value가 NULL이 아니면 다음 필드의 필드 데이터가 value에 복사되고, 다음 필드가 더 이상 없어서 value가 NULL이 될 경우에는 value는 더 이상 값이 바뀌지 않고 fldkey와 nth만 바뀐다.
    len다음 필드 데이터의 길이를 가리키는 포인터이다. len은 버퍼가 필드 데이터를 저장하기 위한 공간이 충분한지 확인한다. 충분한 경우 len에 다음 필드 데이터가 저장되어 있는 value의 길이를 저장한다.
  • 반환값

    반환값설명
    1다음 필드를 정상적으로 찾을 경우이다(fldkey, nth, value, len 등의 값을 포인터로 반환한다).
    0다음 필드를 찾지 못할 경우이다.
    -1함수가 실행될 때 에러가 발생할 경우이다(fberror에 에러 코드가 설정된다).
  • 오류

    fberrno에 다음 값 중 하나가 설정된다.

    에러 코드설명
    FBENOSPACE필드 버퍼에 데이터를 저장하거나 복사할 공간이 부족할 경우 fberror는 FBENOSPACE로 설정된다.
    FBEINVAL입력 파라미터로 지정된 값 중 유효하지 않은 파라미터가 있음을 의미한다.
  • 예제

    #include “demo_fdl.h”
    . . .
    
    char data[100];
    long rcvlen;
    int i, occ, nth, fc, len;
    
    FLDKEY fkey;
    FBUF *fbuf;
    
    if ((fbuf = fballoc(10, 100)) == NULL) {
        printf(“fballoc failed, errno = %d\n”, fberror);
        ........
    }
    
    fbput(fbuf, INPUT, “aaaa”, 0);
    fbput(fbuf, INPUT, “bbbb”, 0);
    fbput(fbuf, INPUT, “dddd”, 0);
    fbput(fbuf, INPUT, “eeee”, 0);
    fbput(fbuf, INPUT, “cccc”, 0);
    
    len = 4;
    for(fkey = FIRSTFLDKEY;fc = fbnext_tu(fbuf, &fkey , &occ, data, &len) > 0;
    
    len = sizeof(data))
    printf(“fkey = %ld Data: [%s], Occurrence: [%d] len [%d]\n”, fkey, data, occ, 
    len);
    
    /* output: fkey = 469762149 Data: [aaaa], Occurrence: [0] len [4]
      output: fkey = 469762149 Data: [bbbb], Occurrence: [0] len [4]
      output: fkey = 469762149 Data: [dddd], Occurrence: [0] len [4]
      output: fkey = 469762149 Data: [eeee], Occurrence: [0] len [4]
      output: fkey = 469762149 Data: [cccc], Occurrence: [0] len [4] */
    . . .
  • 관련 함수

    fbput(), fbget(), fbgetval(), fbgetvalt(), fbgetval_tu(), fbgetvals_tu(), fbgetvall_tu(), fbgetval_last_tu(), fbgetlast_tu()

2.48. fbprint

현재 필드 버퍼의 내용을 정해진 형식에 따라 표준 출력하는 함수이다. 일반적으로 표준 출력은 모니터의 화면이므로 필드 버퍼의 내용을 모니터로 확인할 때 유용하게 사용된다.

출력 형식은 다음과 같다.

fkey = 469762149, fname = INPUT, type = string, value = 5555 fkey = 469762149, 
fname = INPUT, type = string, value = 7777 fkey = 469762149, fname = INPUT, 
type = string, value = 3333 fkey = 469762149, fname = INPUT, type = string, 
value = 8888
  • 프로토타입

    #include <fbuf.h>
    #include <atmi.h>
    int fbprint(FBUF *fbuf)
  • 파라미터

    파라미터설명
    fbuffballoc() 또는 tpalloc()으로 메모리에 할당된 필드 버퍼이다.
  • 반환값

    반환값설명
    1함수 호출에 성공한 경우이다.
    -1함수가 실행될 때 에러가 발생할 경우이다(fberror에 에러 코드가 설정된다).
  • 오류

    fberrno에 다음 값 중 하나가 설정된다.

    에러 코드설명
    FBEINVAL입력 파라미터로 지정된 값 중 유효하지 않은 파라미터가 있음을 의미한다.
    FBEBADFB필드 버퍼가 유효하지 않다. 그러므로 현재의 필드 버퍼 이외의 다른 정상적으로 메모리에 할당된 버퍼를 사용해야 한다.
  • 예제

    #include “demo_fdl.h”
    . . .
    
    FBUF *fbuf;
    if ((fbuf = fballoc(10, 100)) == NULL) {
        printf(“fballoc failed, errno = %d\n”, fberror);
        ........
    }
    
    fbput(fbuf, INPUT, “5555”, 0);
    fbput(fbuf, INPUT, “7777”, 0);
    fbput(fbuf, INPUT, “3333”, 0);
    fbput(fbuf, INPUT, “8888”, 0);
    
    fbprint(fbuf);
    ......
  • 관련 함수

    fbfprintf()

2.49. fbput

fballoc() 또는 tpalloc()으로 메모리에 할당된 필드 버퍼에 새로운 필드를 추가하는 함수이다.

함수의 파라미터에서 지정한 필드키에 필드를 추가할 때 value는 지정한 필드키에 필드가 존재하지 않으면 1번째 필드 순번으로 필드가 생성되며, 이미 필드가 하나 이상 존재한다면 value는 현재 존재하는 필드 순번 중 가장 높은 필드 순번보다 1이 더 큰 필드 순번으로 필드가 생성되면서 그 필드에 필드 데이터로 저장된다. fbput()은 필드 순번이 자동적으로 적절하게 증가되므로 fbinsert()와 같이 필드 버퍼에 데이터를 저장할 때 필드 순번까지 생각할 필요가 없다.

value의 데이터형이 char *형으로 되어 있지만 필드키의 필드형에 따라 string형이 아닌 경우에는 필드형에 맞는 변수를 선언하여 데이터를 저장하고 함수를 호출하는 경우 적절하게 type casting을 한다. 그러므로 함수의 프로토타입이 다음과 같이 정의되어 있다 하더라도 FB_INT, FB_LONG, FB_FLOAT 등의 데이터도 원하는 필드키에 필드를 추가하여 저장할 수 있다.

  • 프로토타입

    #include <fbuf.h>
    #include <atmi.h>
    int fbput(FBUF *fbuf, FLDKEY fldkey, char *value, FLDLEN len)
  • 파라미터

    파라미터설명
    fbuffballoc() 또는 tpalloc()으로 메모리에 할당된 필드 버퍼이다.
    fldkey생성할 필드의 필드키이다.
    value새로 생성된 필드에 저장할 데이터이다.
    lenvalue의 길이를 나타낸다. 필드의 필드형이 FB_CARRAY인 경우에는 반드시 길이를 명시해야 하지만 그렇지 않은 경우에는 무시하고 0으로 지정해도 무방하다.
  • 반환값

    반환값설명
    1함수 호출에 성공한 경우이다.
    -1필드 버퍼에 필드를 추가하는데 실패한 경우이다(fberror에 에러 코드가 설정된다).
  • 오류

    fberrno에 다음 값 중 하나가 설정된다.

    에러 코드설명
    FBENOSPACE필드 버퍼에 데이터를 저장하거나 복사할 공간이 부족할 경우 fberror는 FBENOSPACE로 설정된다.
    FBEINVAL입력 파라미터로 지정된 값 중 유효하지 않은 파라미터가 있음을 의미한다.
    FBETYPETmax에서 지원하지 않는 타입이 사용되었다.
  • 예제

    #include “demo_fdl.h”
    . . .
    
    long rcvlen, ret;
    FBUF *fbuf;
    int ival = 1000;
    if ((fbuf = fballoc(10, 100)) == NULL) {
        printf(“fballoc failed, errno = %d\n”, fberror);
        ........
    }
    
    fbput(fbuf, INPUT, “aaaa”, 0);
    fbput(fbuf, INTDATA, (char *)&ival, 0);
  • 관련 함수

    fbinsert(), fbchg_tu(), fbget_tu(), fbgetval(), fbgetval_last_tu(), fbgetvals_tu(), fbgetvall_tu()

2.50. fbputt

fballoc() 또는 tpalloc()으로 메모리에 할당된 필드 버퍼에 새로운 필드를 추가하는 함수이다. 필드가 필드 버퍼에 추가되기 전에, 저장할 데이터인 value는 사용자가 지정한 데이터형에서 저장할 필드키의 필드형으로 변환된다.

fbputt()는 fbput()과 매우 유사하게 동작하는데 fbput()은 지정한 데이터를 그대로 새로 생성된 필드에 저장하는 반면 fbputt()는 지정한 데이터형과 저장할 필드키의 필드형이 같지 않을 경우 지정한 데이터형을 필드키의 필드형으로 변환하여 저장할 수 있다는 점이 다르다.

  • 프로토타입

    #include <fbuf.h>
    #include <atmi.h>
    int fbputt(FBUF *fbuf, FLDKEY fldkey, char *value, FLDLEN len, int type)
  • 파라미터

    파라미터설명
    fbuffballoc() 또는 tpalloc()으로 메모리에 할당된 필드 버퍼이다.
    fldkey생성할 필드의 필드키이다.
    value새로 생성된 필드에 저장할 데이터이다.
    lenvalue의 길이를 나타낸다. 필드의 타입이 FB_CARRAY인 경우에는 반드시 길이를 명시해야 하지만 그렇지 않은 경우에는 무시하고 0으로 지정해도 무방하다.
    type

    사용자가 지정한 데이터형으로 데이터가 필드에 저장되기 전에 지정한 type에서 필드키의 타입으로 변환된다.

    type에 설정가능한 값은 다음과 같다.

    • FB_CARRAY, FB_SHORT, FB_DOUBLE, FB_LONG, FB_STRING, FB_CHAR, FB_INT, FB_FLOAT

  • 반환값

    반환값설명
    1함수 호출에 성공한 경우이다.
    -1필드 버퍼에 필드를 추가하는데 실패한 경우이다(fberror에 에러 코드가 설정된다).
  • 오류

    fberrno에 다음 값 중 하나가 설정된다.

    에러 코드설명
    FBENOSPACE필드 버퍼에 데이터를 저장하거나 복사할 공간이 부족할 경우 fberror는 FBENOSPACE로 설정된다.
    FBEINVAL입력 파라미터로 지정된 값 중 유효하지 않은 파라미터가 있음을 의미한다.
    FBETYPETmax에서 지원하지 않는 타입이 사용되었다.
    FBEBADFLD유효하지 않은 필드키가 사용되었다. 일반적으로 필드키가 fdlc 유틸리티를 사용하여 컴파일되지 않은 필드키가 사용되었을 경우 fberror는 FBEBADFLD로 설정된다.
  • 예제

    #include “demo_fdl.h”
    . . .
    long rcvlen, ret;
    FBUF *fbuf;
    int ival;
    
    if ((fbuf = fballoc(10, 100)) == NULL) {
        printf(“fballoc failed, errno = %d\n”, fberror);
        ........
    }
    ival = 1111;
    fbputt(fbuf, INPUT, “aaaa”, 0, FB_STRING);
    /* string형인 INPUT 필드키에 int형인 ival(1111)을 넣기 위해 FB_INT형을 지정. */
    fbputt(fbuf, INPUT, (char *)&ival, 0, FB_INT);
    ….
    fbprint(fbuf);
    fbfree(fbuf);
    ……
    /* output :    fkey = 469762149, fname = NAME, type = string, value = aaaa
                   fkey = 469762149, fname = NAME, type = string, value = 1111  */
    .....
  • 관련 함수

    fbinsert(), fbchg_tu(), fbget_tu(), fbgetval(), fbgetval_last_tu(), fbgetvals_tu(), fbgetvall_tu()

2.51. fbrealloc

fballoc() 또는 tpalloc()으로 메모리에 할당된 필드 버퍼의 크기가 부족할 경우 메모리의 크기를 늘려서 다시 할당하는 함수이다.

  • 프로토타입

    #include <fbuf.h>
    #include <atmi.h>
    FBUF *fbrealloc(FBUF *fbuf, int ncount, int nlen)
  • 파라미터

    파라미터설명
    fbuffballoc() 또는 tpalloc()으로 메모리에 할당된 필드 버퍼이다.
    ncount데이터를 저장할 필드의 개수를 의미한다.
    nlen필드 버퍼의 전체 크기를 Byte 단위로 지정한다.
  • 반환값

    반환값설명
    메모리의 포인터함수 호출에 성공한 경우이다.
    NULL필드 버퍼를 메모리에 할당하는 것을 실패한 경우이다(fberror에 에러 코드가 설정된다).
  • 오류

    fberrno에 다음 값 중 하나가 설정된다.

    에러 코드설명
    FBEOS운영체제 또는 메모리 할당 실패, Tmax에 접속 실패(서비스 호출, send, recv 등)와 같은 시스템 에러 또는 네트워크의 상태가 불안정할 경우 등에 나타나는 에러이다.
    FBEINVAL입력 파라미터로 지정된 값 중 유효하지 않은 파라미터가 있음을 의미한다. 예를 들면 fbuf가 NULL로 지정된 경우 해당 에러가 발생한다.
  • 예제

    #include “demo_fdl.h“
    . . .
    FBUF *fbuf;
    
    if ((fbuf = fballoc(10, 100)) == NULL) {
        printf(“fballoc failed, errno = %d\n“, fberror);
        ........
    }
    printf(“Buffer Size: [%ld]\n“, fbget_fbsize(fbuf));
    /* output: Buffer Size: [1024] */
    if ((fbuf = (FBUF *)fbrealloc(fbuf, 1000, 150)) == NULL) {
        printf(“fbrealloc failed, errno = %d\n“, fberror);
        ........
    }
    
    printf(“Buffer Size: [%ld]\n”fbget_fbsize(fbuf));
    /* output: Buffer Size: [4158] */
  • 관련 함수

    fballoc(), tpalloc(), fbget_fbsize(), fbget_used(), fbget_unused()

2.52. fbread

지정한 파일 스트림으로부터 데이터를 읽어서 fballoc() 또는 tpalloc()으로 메모리에 할당된 필드 버퍼에 필드 데이터로 로드하는 함수이다. iop에서 지정한 파일 스트림으로부터 데이터를 읽어서 fballoc() 또는 tpalloc()으로 메모리에 할당된 필드 버퍼에 필드 데이터로 로드한다.

fbread()에서 사용하는 파일 스트림은 이전에 fbwrite()를 호출하여 생성된 파일을 지정해야 한다. 파일을 다른 프로세스로부터 전달받은 데이터를 현재의 프로세스의 필드 버퍼로 로드할 경우에 사용한다.

  • 프로토타입

    #include <fbuf.h>
    #include <atmi.h>
    int fbread(FBUF *fbuf, FILE *iop)
  • 파라미터

    파라미터설명
    fbuffballoc() 또는 tpalloc()으로 메모리에 할당된 필드 버퍼이다.
    iop데이터를 읽어 올 파일 스트림을 지정한다.
  • 반환값

    반환값설명
    1지정된 파일 스트림으로부터 데이터를 정상적으로 로드한 경우이다.
    -1지정된 파일 스트림으로부터 데이터를 정상적으로 로드하지 못한 경우이다(fberror에 에러 코드가 설정된다).

  • 오류

    fberrno에 다음 값 중 하나가 설정된다.

    에러 코드설명
    FBEINVAL입력 파라미터로 지정된 값 중 유효하지 않은 파라미터가 있음을 의미한다.
    FBEOS운영체제 또는 메모리 할당 실패하거나 Tmax에 접속 실패(서비스 호출, send, recv 등)하는 경우와 같이 시스템 에러 또는 네트워크의 상태가 불안정할 경우에 나타나는 에러이다.
  • 예제

    #include “demo_fdl.h”
    . . .
    int ret;
    FILE *iop;
    FBUF *fbuf;
    
    if ((fbuf = fballoc(10, 100)) == NULL) {
        printf(“fballoc failed, errno = %d\n”, fberror);
        ........
    }
    iop = fopen(“sample.dat”, “r”);
    ret = fbread(fbuf, iop);
    
    if (ret == 1)
       fbprint(fbuf);
    fclose(iop)
    ......
  • 관련 함수

    fbwrite()

2.53. fbsnull

필드 버퍼에서 지정한 필드키의 필드 순번과 mapping되는 구조체의 멤버 변수가 NULL인지 확인하는 함수이다.

  • 프로토타입

    #include <fbuf.h>
    #include <atmi.h>
    int fbsnull(char *cstruct, char *cname, int nth, char *stname)
  • 파라미터

    파라미터설명
    cstruct사용할 구조체 타입의 변수를 (char *)형으로 type casting해서 사용한다.
    cname구조체의 멤버 변수를 문자열로 지정할 수 있다.
    nth필드 순번을 나타낸다.
    stnameVIEW에서 정의한 구조체의 이름을 문자열로 지정한다.
  • 반환값

    반환값설명
    1지정한 필드 순번의 필드 데이터가 NULL인 경우이다.
    0지정한 필드 순번의 필드 데이터가 NULL이 아닌 경우이다.
    -1함수 수행 중 에러가 발생하였을 경우이다(fberror에 에러 코드가 설정된다).
  • 오류

    fberrno에 다음 값이 설정된다.

    에러 코드설명
    FBEBADSTRUCT

    유효하지 않은 구조체가 사용된 경우이다.

    일반적으로 Tmax에서 인식하지 못하는 형태의 구조체가 사용되었거나 구조체 정의 파일이 잘못 컴파일되었을 경우에 발생하는 에러이다.

  • 예제

    #include “demo_fdl.h”
    #include “demo_sdl.h”
    . . .
    int val = 1000, ret;
    struct demo temp;
    char *cstruct;
    FBUF *fbuf;
    
    if ((fbuf = fballoc(10, 100)) == NULL) {
        printf(“fballoc failed, errno = %d\n”, fberror);
        ........
    }
    
    if(tpstart((TPSTART_T *)NULL) == NULL){
        printf(tpstart error\n”);
        ........
    }
    
    cstruct = (char *)&temp;
    if(fbstinit(cstruct, “demo”) < 0){
         ........
    }
    
    fbput(fbuf, INPUT, “aaaa”, 0);
    if(fbftos(fbuf, cstruct, “demo”) < 0){
         ........
    }
    ret = fbsnull(cstruct, “demodata”, 0, “demo”);
    if(ret < 0) {
         printf(“fbsnull failed\n”);
         ........
    }
    else if(ret == 0)
         printf(“This occurrence is not null\n”);
    else
         printf(“This occurrence is null\n”);
    ........
  • 관련 함수

    fbgetlen(), fbstinit(), fbstelinit(), fbinit()

2.54. fbstelinit

입력 파라미터에서 지정한 구조체의 멤버 변수를 개별적으로 적절하게 NULL로 초기화하는 함수이다. 멤버 변수의 데이터형이 정수인 경우에는 0으로 초기화하고 문자 배열인 경우에는 NULL로 초기화한다.

  • 프로토타입

    #include <fbuf.h>
    #include <atmi.h>
    int fbstelinit(char *cstruct, char *cname, char *stname)
  • 파라미터

    파라미터설명
    cstruct사용할 구조체 타입의 변수를 (char *)형으로 type casting해서 사용한다.
    cname구조체의 멤버 변수를 문자열로 지정하거나, (char *)형으로 type casting해서 사용한다.
    stnameVIEW에서 정의한 구조체의 이름을 문자열로 지정한다.
  • 반환값

    반환값설명
    1지정한 멤버 변수를 정상적으로 초기화한 경우이다.
    -1지정한 멤버 변수를 정상적으로 초기화하지 못한 경우이다(fberror에 에러 코드가 설정된다).
  • 오류

    fberrno에 다음 값이 설정된다.

    에러 코드설명
    FBEBADSTRUCT유효하지 않은 구조체가 사용되었다. 일반적으로 Tmax에서 인식하지 못하는 형태의 구조체가 사용되었거나 구조체 정의 파일이 잘못 컴파일되었을 경우에 발생하는 에러이다.
  • 예제

    #include “demo_fdl.h”
    #include “demo_sdl.h”
    . . .
    cstruct demo temp;
    char *cstruct;
    if(tpstart((TPSTART_T *)NULL) == NULL) {
         printf(“tpstart failed\n”);
         ......
    }
    cstruct = (char *)&temp;
    if(fbstelinit(cstruct, “demodata”, “demo”) < 0) {
         ......
    }
    ......
  • 관련 함수

    fbstinit(), fbinit(), fbsnull()

2.55. fbstinit

입력 파라미터에서 지정한 구조체 변수를 초기화하는 함수이다.

fbstelinit()는 지정한 구조체에 대해 각각의 멤버 변수를 적절하게 초기화하는 반면 fbstinit()는 구조체 전체를 한 번에 초기화한다. 그러므로 멤버 변수 중 하나를 초기화하고자 할 경우에는 fbstelinit()를 사용하고 구조체를 초기화하고자 할 경우에는 fbstinit()를 사용하는 것이 좋다.

  • 프로토타입

    #include <fbuf.h>
    #include <atmi.h>
    int fbstinit(char *cstruct, char *stname)
  • 파라미터

    파라미터설명
    cstruct사용할 구조체 타입의 변수를 (char *)형으로 type casting해서 사용한다.
    stnameVIEW에서 정의한 구조체의 이름을 문자열로 지정한다.
  • 반환값

    반환값설명
    1지정한 구조체를 정상적으로 초기화한 경우이다.
    -1지정한 구조체를 정상적으로 초기화하지 못한 경우이다(fberror에 에러 코드가 설정된다).
  • 오류

    fberrno에 다음 값 중 하나가 설정된다.

    에러 코드설명
    FBEBADSTRUCT유효하지 않은 구조체가 사용된 경우이다. 일반적으로 Tmax에서 인식하지 못하는 형태의 구조체가 사용되었거나 구조체 정의 파일이 잘못 컴파일되었을 경우에 발생하는 에러이다.
  • 예제

    #include “demo_fdl.h”
    #include “demo_sdl.h”
    . . .
    cstruct demo temp;
    char *cstruct;
    if(tpstart((TPSTART_T *)NULL) == NULL) {
         printf(“tpstart failed\n”);
         ......
    }
    cstruct = (char *)&temp;
    if(fbstinit(cstruct, “demo”) < 0) {
         ......
    }
    ......
  • 관련 함수

    fbstelinit(), fbinit(), fbsnull()

2.56. fbstof

C 구조체 버퍼(stname)에 저장되어 있는 데이터를 matching되는 필드 버퍼로 전송하는 함수로 fbftos()와 반대의 기능을 한다. 일반 구조체 파일인 ***.s와는 약간 다른 구조체 파일(VIEW 정의 파일)이 미리 정의되어 있어야 한다. 구조체 파일 내의 필드키는 정의되는 구조체의 멤버 변수와 1:1 mapping이 되어 있어야 한다. VIEW 정의 파일에 관한 내용은 fbftos()를 참고한다.

fbstof()는 fbftos()와는 다르게 다음과 같은 경우 C 구조체에 있는 값이 필드 버퍼에 복사되지 않는다.

  • VIEW 파일의 NULL 항목에 설정해 놓은 값과 동일한 경우

  • 필드 버퍼에 복사하려고 하는 구조체 필드에 있는 값이 기본값과 동일한 경우

필드 버퍼에 값을 저장하지 않은 상태에서 fbftos()를 이용해 C 구조체에 복사할 경우에는 VIEW 파일의 NULL 항목에 정의된 값이 복사된다. C 구조체에 값을 저장하지 않은 상태에서 fbstof()를 이용해 필드 버퍼에 복사할 경우 또는 NULL 항목에 설정한 값과 동일한 값으로 저장한 후 복사하려 하는 경우에는 필드 버퍼에 아예 복사되지 않는다.

VIEW 파일의 NULL 항목에 값을 정의하지 않고 필드 버퍼에 값을 저장하지 않은 상태에서 fbftos()를 이용해 C 구조체에 복사할 경우 fbftos()에서는 기본값이 복사된다. C 구조체에 값을 저장하지 않은 상태에서 fbstof()를 이용해 필드 버퍼에 복사하려고 하는 경우 또는 기본값과 동일한 값으로 저장한 후 복사할 경우에는 아무 값도 복사되지 않는다.

  • 프로토타입

    #include <fbuf.h>
    #include <atmi.h>
    int fbstof(FBUF *fbuf, char *cstruct, int mode, char *stname)
  • 파라미터

    파라미터설명
    fbuffballoc() 또는 tpalloc()으로 메모리에 할당된 필드 버퍼이다.
    cstruct사용할 구조체 타입의 변수를 (char *)형으로 type casting해서 사용한다.
    mode

    데이터를 필드 버퍼로 전송할 때의 방식으로 mode에 따라 약간의 기능상의 차이점이 있다. mode는 fbbufop()의 각 모드와 완전히 일치하게 동작하므로 fbbufop()를 참고한다.

    mode에 설정가능한 값은 다음과 같다.

    • FBUPDATE : FBUPDATE mode인 경우 구조체의 멤버 변수의 값이 NULL인 경우 그 데이터는 무시되고 필드 버퍼에 전송되지 않는다.

    • FBJOIN

    • FBOJOIN

    • FBCONCAT

    stnameVIEW에서 정의한 구조체의 이름을 문자열로 지정한다.
  • 반환값

    반환값설명
    1구조체 버퍼에 저장되어 있는 데이터를 성공적으로 필드 버퍼에 전송했을 경우이다.
    -1구조체 버퍼에 저장되어 있는 데이터를 성공적으로 필드 버퍼에 전송하지 못한 경우이다(fberror에 에러 코드가 설정된다).
  • 오류

    fberrno에 다음 값 중 하나가 설정된다.

    에러 코드설명
    FBENOSPACE필드 버퍼에 데이터를 저장하거나 복사할 공간이 부족할 경우 fberror는 FBENOSPACE로 설정된다.
    FBETYPETmax에서 지원하지 않는 타입이 사용되었다.
    FBEINVAL입력 파라미터로 지정된 값 중 유효하지 않은 파라미터가 있는 경우를 의미한다.
    FBEBADFLD유효하지 않은 필드키가 사용되었다. 일반적으로 fdlc 유틸리티를 사용하여 컴파일되지 않은 필드키가 사용되었을 경우 fberror는 FBEBADFLD로 설정된다.
    FBEBADSTRUCT유효하지 않은 구조체가 사용된 경우이다. 일반적으로 Tmax에서 인식하지 못하는 형태의 구조체가 사용되었거나 구조체 정의 파일이 잘못 컴파일되었을 경우에 발생하는 에러이다.
    FBEMALLOC시스템 에러로 필드 버퍼를 메모리에 할당하는 것을 실패할 경우 fberror는 FBEMALLOC로 설정된다.
  • 예제

    #include “demo_fdl.h”
    #include “demo_sdl.h”
    . . .
    int ret, fdllen, val = 1000;
    struct demo temp;
    FBUF *fbuf;
    Char *cstruct;
    
    if(tpstart((TPSTART_T *)NULL) == -1) {
        printf(“tpstart failed\n”);
        ........
    }
    
    if ((fbuf = fballoc(10, 100)) == NULL) {
        printf(“fballoc failed, errno = %d\n”, fberror);
        ........
    }
    
    cstruct = (char *)&temp;
    if(fbstinit((char *)&temp, “demo”) < 1)  {
        printf(“fbstinit failed, errno = %d\n”, fberror);
        ........
    }
    
    strcpy(temp.demodata, “aaaa”);
    temp.num = 1000;
    if(fbstof(fbuf, cstruct, FBUPDATE, “demo”) < 0) {
    ........
    }
    ........
  • 관련 함수

    fbftof(), fbbufop(), fbstinit(), fbstelinit(), fbsnull()

2.57. fbstrerror

필드 버퍼와 관련된 API 함수를 수행할 때 발생하는 에러 코드에 해당하는 내용을 문자열로 반환하는 함수이다.

  • 프로토타입

    #include <fbuf.h>
    #include <atmi.h>
    char *fbstrerror(int fberror)
  • 파라미터

    파라미터설명
    fberror필드 버퍼와 관련된 API 함수를 수행할 때 에러가 발생하면 우선 fberror라는 변수에 에러 코드가 설정된다. 이 fberror의 값을 함수의 입력 파라미터로 지정하여 그 에러에 대한 내용을 문자열로 볼 수 있다. 여기에서 발생할 수 있는 모든 에러는 FDL과 관련된 헤더 파일인 <fbuf.h>에 정의되어 있다.
  • 반환값

    반환값설명
    문자열함수 호출에 성공한 경우이다. (에러 코드에 대한 내용을 문자열로 반환한다. )
    NULL함수 수행에 실패한 경우이다.
  • 예제

    #include “demo_fdl.h”
    . . .
    int ret;
    FBUF *fbuf;
    
    if ((fbuf = fballoc(10, 100)) == NULL) {
        printf(“fballoc failed, errno = %d\n”, fberror);
        ........
    }
    
    ret = fbget(fbuf, INPUT, “aaaa”, 0);
    if( ret < 0 )
        printf(“ret = %d , fberror = %s[%d]\n”, ret, fbstrerror(fberror) , fberror);
    /* output : ret = -1, fberror = not found[6] */
    . . .
  • 관련 함수

    fberror()

2.58. fbtypecvt

fromval에 지정한 fromtype 데이터형의 필드 데이터를 totype으로 type casting해서 반환하는 함수이다.

  • 프로토타입

    #include <fbuf.h>
    #include <atmi.h>
    char *fbtypecvt(FLDLEN *tolen, int totype, char *fromval, int fromtype, 
                    FLDLEN fromlen)
  • 파라미터

    파라미터설명
    tolen변환된 데이터의 길이를 반환하는 포인터이다.
    totype

    데이터를 변환할 타입으로 설정가능한 값은 다음과 같다.

    • FB_CARRAY,FB_SHORT, FB_DOUBLE, FB_LONG, FB_STRING, FB_CHAR, FB_INT, FB_FLOAT

    fromval변환하려는 데이터를 가리키는 포인터이다.
    fromtypefromval의 데이터형이다.
    fromlenfromtype에 지정한 타입의 기본 크기와 관련이 있다.
  • 반환값

    반환값설명
    변환된 데이터의 포인터데이터를 변환하는데 성공한 경우이다.
    NULL데이터를 변환하는데 실패한 경우이다 (fberror에 에러 코드를 설정한다).
  • 오류

    fberrno에 다음 값 중 하나가 설정된다.

    에러 코드설명
    FBENOSPACE필드 버퍼에 데이터를 저장하거나 복사할 공간이 부족할 경우 fberror는 FBENOSPACE로 설정된다.
    FBEINVAL입력 파라미터로 지정된 값 중 유효하지 않은 파라미터가 있음을 의미한다(FB_CARRAY 타입인 경우 데이터 길이를 지정하지 않으면 이 에러가 설정된다).
    FBETYPETmax에서 지원하지 않는 타입이 사용되었다.
    FBEBADFLD유효하지 않은 필드키가 사용되었다. 일반적으로 필드키가 fdlc 유틸리티를 사용하여 컴파일되지 않은 필드키가 사용되었을 경우 fberror는 FBEBADFLD로 설정된다.
  • 예제

    #include “demo_fdl.h”
    . . .
    int tolen, totype, fromtype, fromlen;
    long vall;
    FBUF *fbuf;
    char *ptr;
    
    if ((fbuf = fballoc(10, 100)) == NULL) {
          printf(“fballoc failed, errno = %d\n”, fberror);
          ........
    }
    
    vall = 1111;
    fromlen = sizeof(long);
    
    fbput(fbuf, TOTMON,(char *)&vall, 0);
    ptr = fbtypecvt(&tolen, FB_STRING, (char *)&vall, FB_LONG, fromlen);
    
    printf(“Converted string = %s\n”, ptr);
    /* output Converted string = 1111 */
    ......
  • 관련 함수

    fbget_fldname(), fbget_fldno(), fbget_fldtype(), fbget_strfldtype()

2.59. fbupdate

fballoc() 또는 tpalloc()으로 메모리에 할당된 필드 버퍼에 입력 파라미터에 지정한 필드키의 필드 순번 위치로 value에 지정한 데이터를 이미 저장되어 있는 필드 데이터와 변경하는 함수이다.

특정 위치에 있는 필드 데이터를 변경하는 것이므로 반드시 필드키와 필드 순번을 지정해야 한다. 동일한 필드키에 필드 순번이 중복되어 데이터가 치환되면 맨 나중에 변경한 필드 데이터가 유효하다.

fbupdate()는 fbchg_tu()와 유사하게 동작한다. 다만 fbchg_tu()는 변경하고자 하여 지정한 필드키의 필드 순번이 이미 존재하지 않는 경우 자동적으로 새로 필드를 하나 추가하여 데이터를 저장하지만, fbupdate()는 지정한 필드키의 필드 순번이 이미 존재하지 않는 경우에는 에러가 발생하고 fberror에 FBENOENT로 설정한다는 점이 다르다.

  • 프로토타입

    #include <fbuf.h>
    #include <atmi.h>
    int fbupdate(FBUF *fbuf, FLDKEY fldkey, int nth, char *value, int fldlen)
  • 파라미터

    파라미터설명
    fbuffballoc() 또는 tpalloc()으로 메모리에 할당된 필드 버퍼이다.
    fldkey필드 버퍼에 변경할 필드의 필드키이다.
    nthfldkey에서 지정한 필드키의 데이터 중 변경할 필드 순번을 의미한다. 그리고 value 파라미터가 (char * )형이므로 변경할 필드키가 정수형이나 실수형인 경우에는 반드시 (char *)형으로 type casting을 한다.
    value파라미터가 (char *)형이므로 변경할 필드키가 정수형이나 실수형인 경우에는 반드시 (char *)형으로 type casting을 한다.
    fldlen일반적으로는 필드의 길이를 지정하지 않아도 된다. 필드키가 FB_CARRAY형인 경우에는 반드시 필드 데이터의 길이를 Byte 단위로 지정한다.
  • 반환값

    반환값설명
    1정상적으로 필드 데이터를 변경했을 경우이다.
    -1

    정상적으로 필드 데이터를 변경하지 못한 경우이다(fberror에 에러 코드를 설정한다).

  • 오류

    fberrno에 다음 값 중 하나가 설정된다.

    에러 코드설명
    FBENOENT지정한 필드키가 FDLFILE(환경변수 : 기본값 tmax.fdl)에 정의되지 않아서 필드 버퍼에서 사용할 수 없는 경우 fberror는 FBENOENT로 설정된다.
    FBENOSPACE필드 버퍼에 데이터를 저장하거나 복사할 공간이 부족할 경우 fberror는 FBENOSPACE로 설정된다.
    FBEINVAL입력 파라미터로 지정된 값 중 유효하지 않은 파라미터가 있음을 의미한다.
    FBETYPETmax에서 지원하지 않는 타입이 사용되었다.
  • 예제

    #include “demo_fdl.h”
    . . .
    long rcvlen, ret;
    FBUF *fbuf;
    char buf[20];
    if ((fbuf = fballoc(10, 100)) == NULL) {
        printf(“fballoc failed, errno = %d\n”, fberror);
        ........
    }
    fbinsert(fbuf, INPUT, 0, “aaaa”, 0);
    ret = fbupdate(fbuf, INPUT, 0, “bbbbb”, 0);
    fbget (fbuf, INPUT, buf, 0);
    printf(“ret = [%d] INPUT = %s \n”, ret, buf);
    /* output: “ret = 1 INPUT = bbbbbb” */
    .....
  • 관련 함수

    fbinsert(), fbput(), fbchg_tu(), fbegt(), fbget_tu(), fbgetval(), fbgetval_last_tu(), fbgetvals_tu(), fbgetvall_tu()

2.60. fbwrite

fballoc() 또는 tpalloc()으로 메모리에 할당된 필드 버퍼의 내용을 iop에 지정한 파일 스트림에 저장하는 함수이다. 파일 스트림에 저장되는 데이터는 바이너리를 포함한 데이터이다. 다른 프로세스에 데이터를 전달하기 위해 파일을 사용하는 경우에 사용한다. fbwrite()에 의해서 저장된 데이터는 fbread()를 통해서 필드 버퍼에 로드할 수 있으므로 주의한다.

  • 프로토타입

    #include <fbuf.h>
    #include <atmi.h>
    int fbwrite(FBUF *fbuf, FILE *iop)
  • 파라미터

    파라미터설명
    fbuffballoc() 또는 tpalloc()으로 메모리에 할당된 필드 버퍼이다.
    iop데이터를 저장할 파일 스트림을 가리키는 포인터이다.
  • 반환값

    반환값설명
    1지정된 파일 스트림에 데이터를 정상적으로 저장한 경우이다.
    -1지정된 파일 스트림에 데이터를 정상적으로 저장하지 못한 경우이다(fberror에 에러 코드를 설정한다).
  • 오류

    fberrno에 다음 값 중 하나가 설정된다.

    에러 코드설명
    FBEINVAL입력 파라미터로 지정된 값 중 유효하지 않은 파라미터가 있음을 의미한다.
    FBEOS운영체제 또는 메모리 할당 실패, Tmax에 접속 실패(서비스 호출, send, recv 등)와 같은 시스템 에러 또는 네트워크의 상태가 불안정할 경우 등에 나타나는 에러이다.
  • 예제

    #include “demo_fdl.h”
    . . .
    int ret;
    FILE *iop;
    FBUF *fbuf;
    if ((fbuf = fballoc(10, 100)) == NULL) {
        printf(“fballoc failed, errno = %d\n”, fberror);
        ........
    }
    iop = fopen(“sample.dat”, “w”);
    fbput(fbuf, INPUT, “aaaa”, 0);
    fbput(fbuf, INPUT, “bbbb”, 0);
    fbwrite(fbuf, iop);
    fclose(iop)
    ......
  • 관련 함수

    fbread()

2.61. getfberrno

필드 버퍼와 관련된 API 함수를 수행하는 도중 에러가 발생하였을 경우 에러 코드를 반환하는 함수이다. 함수에서 반환하는 에러 코드에 대한 에러 메시지를 알고 싶을 경우 이 함수를 입력 파라미터로 하여 fbstrerror()를 이용하면 된다. getfberrno()는 입력 파라미터가 없다.

  • 프로토타입

    #include <fbuf.h>
    #include <atmi.h>
    int getfberrno(void)
  • 반환값

    현재 fberror에 설정된 값을 반환한다.

  • 예제

    #include “demo_fdl.h”
    . . .
    int ret;
    FBUF *fbuf;
    
    if ((fbuf = fballoc(10, 100)) == NULL) {
        printf(“fballoc failed, errno = %d\n”, fberror);
        ........
    }
    
    ret = fbget(fbuf, INPUT, “aaaa”, 0);
    if( ret < 0 )
        printf(“ret = %d , error = %s[%d]\n”, ret, fbstrerror(getfberrno()) , 
                 getfberrno());
    
    /* output : ret = -1, error = not found[6] */
    . . .
  • 관련 함수

    fbstrerror(), getfberror()

2.62. getfberror

필드 버퍼와 관련된 API 함수를 수행하는 도중 에러가 발생하였을 경우 에러 코드를 반환하는 함수이다.

함수에서 반환하는 에러 코드에 대한 에러 메시지를 알고 싶을 경우 이 함수를 입력 파라미터로 하여 fbstrerror()를 이용하면 된다. getfberrno()는 입력 파라미터가 없다.

  • 프로토타입

    #include <fbuf.h>
    #include <atmi.h>
    int getfberror(void)
  • 반환값

    현재 fberror에 설정된 값을 반환한다.

  • 예제

    #include “demo_fdl.h”
    . . .
    int ret;
    FBUF *fbuf;
    
    if ((fbuf = fballoc(10, 100)) == NULL) {
        printf(“fballoc failed, errno = %d\n”, fberror);
        ........
    }
    ret = fbget(fbuf, INPUT, “aaaa”, 0);
    if( ret < 0 )
        printf(“ret = %d , error = %s[%d]\n”, ret, fbstrerror(getfberror()) , 
                getfberror());
    /* output : ret = -1, error = not found[6] */
    . . .
  • 관련 함수

    fbstrerror(), getfberror()