내용 목차
본 장에서는 FDL에서 제공하는 함수에 대한 사용법과 예제에 대해 설명한다.
다음은 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 | 입력 파라미터에서 지정한 구조체 변수를 초기화한다. |
fbstof | C 구조체 버퍼(stname)에 저장되어 있는 데이터를 matching되는 필드 버퍼로 전송한다. |
fbstrerror | 필드 버퍼와 관련된 API 함수를 수행할 때 발생하는 에러 코드에 해당하는 내용을 문자열로 반환한다. |
fbtypecvt | 지정한 데이터형의 필드 데이터를 지정한 형으로 변환하여 반환한다. |
fbupdate | 필드 버퍼에 입력 파라미터에 지정한 필드키의 필드 순번 위치로 지정한 데이터를 이미 저장되어 있는 필드 데이터와 변경한다. |
fbwrite | 메모리에 할당된 필드 버퍼의 내용을 iop에 지정한 파일 스트림에 저장한다. |
getfberrno | 필드 버퍼와 관련된 API 함수를 수행하는 도중 에러가 발생하였을 경우 에러 코드를 반환한다. |
getfberror | 필드 버퍼와 관련된 API 함수를 수행하는 도중 에러가 발생하였을 경우 에러 코드를 반환한다. |
필드 버퍼의 크기를 계산하고 메모리를 할당하는 함수이다.
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()
필드 버퍼 내에서 필드 데이터의 이동, 복사, 비교 등을 입력 파라미터인 mode에 따라 처리하는 함수이다. fbbufop()의 파라미터 중 dest와 src 필드 버퍼는 같은 버퍼를 사용할 수 없고 반드시 다른 메모리에 할당된 버퍼를 사용해야 한다.
프로토타입
#include <fbuf.h> #include <atmi.h> int fbbufop(FBUF *dest, FBUF *src, int mode)
파라미터
파라미터 | 설명 |
---|---|
dest | fballoc() 또는 tpalloc()으로 메모리에 할당된 필드 버퍼이다. src에 있는 내용을 dest에 mode에 따라 저장한다. |
src | fballoc() 또는 tpalloc()으로 메모리에 할당된 필드 버퍼이다. 변경될 값을 가진 버퍼이다. |
mode | Process mode 중 하나를 설정한다. |
다음은 Process mode에 대한 설명이다.
Process mode | 설명 |
---|---|
FBMOVE | src 필드 버퍼의 내용을 dest 필드 버퍼로 복사한다. 이 모드에서는 dest 파라미터에 string 또는 carray 버퍼를 사용할 수 있다. string 또는 carray 버퍼를 사용하려면 dest 파라미터를 사용할 때 필드 버퍼(FBUF *)로 type casting을 한다. |
FBCOPY | src 필드 버퍼의 내용을 dest 필드 버퍼로 복사한다. 이 모드에서는 반드시 dest, src 파라미터가 모두 필드 버퍼여야 한다. |
FBCOMP | 다음은 설정값에 대한 설명이다.
|
FBCONCAT | src 필드 버퍼의 내용을 dest 필드 버퍼에 덧붙이는 경우로 dest 필드 버퍼에 기존 데이터와 src 필드 버퍼의 내용이 저장된다. |
FBJOIN | 필드키와 필드 순번이 matching되는 필드에 한해 해당 데이터를 src 필드 버퍼에서 dest 필드 버퍼에 복사한다. 단, dest 필드 버퍼에 기존에 존재하던 데이터는 모두 사라지므로 주의한다. |
FBOJOIN | FBJOIN 모드와 유사하게 동작하지만 함수를 수행하고 난 후 필드키와 필드 순번이 matching되지 않는 필드의 데이터는 수행하기 전의 상태로 보존된다. |
FBUPDATE | FBOJOIN 모드와 유사하게 동작한다. 필드키와 필드 순번이 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()
특정 필드 버퍼의 필드 데이터를 지정한 필드 버퍼에 복사하는 함수이다.
src 필드 버퍼의 지정한 필드의 필드 데이터를 dest 필드 버퍼에 복사한다. 함수의 dest와 src 필드 버퍼는 같은 버퍼를 사용할 수 없고 반드시 따로 메모리에 할당된 다른 버퍼를 사용해야 한다.
프로토타입
#include <fbuf.h> #include <atmi.h> int fbbufop_proj(FBUF *dest, FBUF *src, FLDKEY *fldkey)
파라미터
파라미터 | 설명 |
---|---|
dest | fballoc() 또는 tpalloc()으로 메모리에 할당된 필드 버퍼로 src에 있는 내용을 dest에 mode에 따라 저장한다. |
src | fballoc() 또는 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()
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()
alloc() 또는 tpalloc()으로 메모리에 할당된 필드 버퍼에서 입력 파라미터에서 지정한 필드키의 필드 순번의 데이터를 변경하는 함수이다.
입력 파라미터에서 지정한 필드 순번(nth)에 기존의 데이터가 없을 경우에는 필드 순번(nth)에 주어진 데이터가 자동으로 필드로 추가된다. 그러므로 이 함수를 이용해서 필드 데이터를 변경할 때는 관계가 없지만, 필드 순번을 추가할 경우에는 처리 속도가 저하되므로 주의한다.
프로토타입
#include <fbuf.h> #include <atmi.h> int fbchg_tu(FBUF *fbuf, FLDKEY fldkey, int nth, char *value, FLDLEN fldlen)
파라미터
파라미터 | 설명 |
---|---|
fbuf | fballoc() 또는 tpalloc()으로 메모리에 할당된 필드 버퍼이다. |
fldkey | 필드 버퍼에 변경할 필드의 필드키이다. |
nth | fldkey에서 지정한 필드키의 데이터 중 변경할 필드 순번을 의미한다. |
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()
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)
파라미터
파라미터 | 설명 |
---|---|
fbuf | fballoc() 또는 tpalloc()으로 메모리에 할당된 필드 버퍼이다. |
fldkey | 필드 버퍼에 변경할 필드의 필드키이다. |
nth | fldkey에서 지정한 필드키의 데이터 중 변경하려는 필드 순번을 의미한다. |
value | 파라미터가 (char *)형이므로 변경하려는 필드키가 정수형이나 실수형인 경우에는 반드시 (char *)형으로 type casting을 한다. |
fldlen | 일반적으로는 필드의 길이를 지정하지 않아도 된다. 그러나 필드키의 타입이 FB_CARRAY인 경우에는 반드시 필드 데이터의 길이를 Byte 단위로 지정한다. |
type | 필드 데이터를 변환할 데이터형으로 설정가능한 값은 다음과 같다.
|
반환값
반환값 | 설명 |
---|---|
1 | 함수 호출에 성공한 경우이다. |
-1 | 함수 호출에 실패한 경우이다(fberror에 에러 코드가 설정된다). |
오류
fberrno에는 다음 값 중 하나가 설정된다.
에러 코드 | 설명 |
---|---|
FBENOENT | 지정한 필드키가 FDLFILE(환경변수 : 기본값 tmax.fdl)에 정의되지 않아서 필드 버퍼에서 사용할 수 없는 경우 fberror는 FBENOENT로 설정된다. |
FBENOSPACE | 필드 버퍼에 데이터를 저장하거나 복사할 공간이 부족할 경우 fberror는 FBENOSPACE로 설정된다. |
FBEINVAL | 입력 파라미터로 지정된 값 중 유효하지 않은 파라미터가 있는 경우를 의미한다. (FB_CARRAY 타입인 경우 데이터 길이를 지정하지 않으면 이 코드가 설정된다) |
FBETYPE | Tmax에서 지원하지 않는 타입이 사용되었다. |
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()
필드 버퍼에서 특정 필드키에 저장되어 있는 전체 데이터를 삭제하는 함수이다.
프로토타입
#include <fbuf.h> #include <atmi.h> int fbdelall(FBUF *fbuf, FLDKEY fldkey)
파라미터
파라미터 | 설명 |
---|---|
fbuf | fballoc() 또는 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()
필드키 배열에 지정된 모든 필드키에 저장되어 있는 모든 필드 데이터를 삭제하는 함수이다.
파라미터 중 fldkey에 설정된 데이터를 삭제한다. 여러 개의 필드키를 동시에 삭제할 경우에는 fbdelall_tu()를 한 번 호출하는 것이 fbdelall()을 여러 번 호출하는 것보다 효율적이다.
프로토타입
#include <fbuf.h> #include <atmi.h> int fbdelall_tu(FBUF *fbuf, FLDKEY *fldkey)
파라미터
파라미터 | 설명 |
---|---|
fbuf | fballoc() 또는 tpalloc()으로 메모리에 할당된 필드 버퍼이다. |
fldkey | 필드 버퍼에서 삭제할 필드키를 2개 이상 지정한 필드키 배열이다. fieldkey에서 지정할 필드키 포인터는 배열로 선언하여 삭제하려는 필드키를 명시한다. 필드키 배열에 삭제할 필드키를 지정한 후 마지막 인덱스에는 반드시 0을 지정한다. |
반환값
반환값 | 설명 |
---|---|
삭제한 필드의 개수 | 함수 호출에 성공한 경우이다. |
-1 | 필드 버퍼가 유효하지 않은 경우 발생하는 에러로 입력 파라미터가 NULL일 때 발생한다(fberror에 에러 코드가 설정된다). |
오류
fberrno에는 다음 값 중 하나가 설정된다.
에러 코드 | 설명 |
---|---|
FBENOENT | fldkey 배열에서 마지막에 지정된 필드키에 해당하는 데이터가 없는 경우 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()
fballoc() 또는 tpalloc()으로 메모리에 할당한 필드 버퍼에서 지정한 필드키의 지정한 필드 순번에 해당하는 특정 필드의 데이터를 삭제하는 함수이다.
fbchg_tu()는 지정한 필드 순번에 해당하는 필드가 존재하지 않을 경우 자동으로 필드를 추가하지만 fbdelete()는 지정한 필드 순번에 해당하는 필드가 필드 버퍼에 존재하지 않을 경우 에러를 발생시키며 fberror는 FBENOENT로 설정된다. 그러므로 이 함수에서는 반드시 함수를 수행하기 전에 필드 버퍼에 존재하는 필드를 파라미터로 지정해야 한다.
프로토타입
#include <fbuf.h> #include <atmi.h> int fbdelete(FBUF *fbuf, FLDKEY fldkey, int nth)
파라미터
파라미터 | 설명 |
---|---|
fbuf | fballoc() 또는 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()
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별 필드키와 값이 저장되어 있는 파일의 형식은 다음과 같다.
flag가 '+'이거나 flag를 사용하지 않을 경우
[flag] field_name or field_id (tab) field_value
flag가 '='일 경우
[flag] field_name1 or field_id1 (tab) field_name2 or field_id2
flag가 '–'일 경우
[flag] field_name or field_id
프로토타입
#include <stdio.h> #include <usrinc/fbuf.h> int fbextread(FBUF *fbuf, FILE *iop)
파라미터
파라미터 | 설명 |
---|---|
fbuf | fballoc() 또는 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()
fballoc() 또는 tpalloc()으로 메모리에 할당한 필드 버퍼에 현재 저장되어 있는 모든 필드의 수를 반환하는 함수이다. fbfldcount()는 필드 버퍼 내에 필드 데이터가 몇 개 저장되어 있는지 계산한다. 이미 구현되어 있는 여러 API 함수를 이용하여 필드 버퍼에 몇 개의 필드가 실질적으로 저장되어 있는지도 확인할 수 있다. 하나의 필드키에 순번을 달리하여 여러 데이터가 저장되어 있더라도 fbfldcount()는 별개의 필드로 인식한다.
프로토타입
#include <fbuf.h> #include <atmi.h> int fbfldcount(FBUF *fbuf)
파라미터
파라미터 | 설명 |
---|---|
fbuf | fballoc() 또는 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()
필드 버퍼에 저장되어 있는 필드 데이터를 지정한 파일 스트림에 출력하는 함수이다. 지정한 파일은 텍스트 파일이고, 출력 형식은 fbprint()의 출력 형식과 같다.
프로토타입
#include <fbuf.h> #include <atmi.h> int fbfprint(FBUF *fbuf, FILE *iop)
파라미터
파라미터 | 설명 |
---|---|
fbuf | fballoc() 또는 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()
fballoc() 또는 tpalloc()으로 할당된 필드 버퍼의 메모리를 해제하는 함수이다. 함수는 이전에 할당받았던 버퍼를 메모리로부터 해제하는 함수이므로 수행한 후에 다시 해당 버퍼를 사용할 수 없다. 버퍼의 사용이 완전히 끝난 이후에 fbfree()를 호출해야 한다.
프로토타입
#include <fbuf.h> #include <atmi.h> int fbfree(FBUF *fbuf)
파라미터
파라미터 | 설명 |
---|---|
fbuf | fballoc() 또는 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()
필드 버퍼에 저장되어 있는 데이터를 matching되는 구조체 버퍼로 전송하는 함수이다.
프로토타입
#include <fbuf.h> #include <atmi.h> int fbftos(FBUF *fbuf, char *cstruct, char *stname)
파라미터
파라미터 | 설명 |
---|---|
fbuf | fballoc() 또는 tpalloc()으로 메모리에 할당된 필드 버퍼이다. |
cstruct | 사용할 구조체 타입의 변수를 (char *)형으로 type casting해서 사용한다. |
stname | VIEW에서 정의한 구조체의 이름을 문자열로 지정한다. |
반환값
반환값 | 설명 |
---|---|
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 | 구조체에서 저장할 수 있는 최대의 필드 순번을 의미한다. |
size | string형인 경우 배열의 크기를 의미한다. |
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되지 않을 경우에는 필드키가 무시된다.
필드 버퍼에서 지정한 필드키에 해당하는 필드 데이터를 읽어 오는 함수이다.
데이터를 필드 버퍼에서 읽어 오는 함수로 동일한 필드키로 저장된 데이터는 순차적으로 읽어서 loc에 저장한다. 즉 수동으로 순번을 증가시키지 않고 저장된 필드 순번만큼 이 함수를 호출하면 함수 내에서 자동으로 필드 순번을 증가시켜서 다음 데이터를 읽을 준비가 되므로 해당 필드키 내에 저장되어 있는 모든 필드 데이터를 읽어 올 수 있다. fbget()을 사용할 경우에 한 번 읽어 온 데이터는 다시 읽을 수 없으므로 주의한다. 그리고 저장된 필드 순번보다 더 많이 fbget 함수를 호출하면 마지막 필드 순번의 필드 데이터가 계속 반환된다.
프로토타입
#include <fbuf.h> #include <atmi.h> int fbget(FBUF *fbuf, FLDKEY fldkey, char *loc, FLDLEN *fldlen)
파라미터
파라미터 | 설명 |
---|---|
fbuf | fballoc() 또는 tpalloc()으로 메모리에 할당된 필드 버퍼이다. |
fldkey | 필드 버퍼에서 읽어 오려는 필드키를 의미한다. |
loc | 순차적으로 읽어 온 필드 데이터를 가리키는 포인터이다. 필드키가 정수형 또는 실수형인 경우에는 반드시 각 타입에 맞는 변수를 사용하되 앞에서 기술한 함수의 프로토타입에 맞게 type casting을 한다. |
fldlen | 읽어 온 데이터의 길이를 의미한다. |
반환값
반환값 | 설명 |
---|---|
1 | 지정한 필드키의 필드 데이터를 정상적으로 찾은 경우이다. |
-1 | 지정한 필드키를 필드 버퍼에서 찾지 못한 경우이다(fberror에 에러 코드가 설정된다). |
오류
fberrno에 다음 값 중 하나가 설정된다.
에러 코드 | 설명 |
---|---|
FBENOENT | 지정한 필드키가 FDLFILE(환경변수 : 기본값 tmax.fdl)에 정의되지 않아서 필드 버퍼에서 사용할 수 없는 경우 fberror는 FBENOENT로 설정된다. |
FBEINVAL | 입력 파라미터로 지정된 값 중 유효하지 않은 파라미터가 있음을 의미한다(CARRAY형인 경우 fldlen을 지정하지 않은 경우도 해당된다). |
FBETYPE | Tmax에서 지원하지 않는 타입이 사용되었다. |
예제
#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()
지정한 필드키의 필드 순번에 해당하는 필드 데이터를 읽어 오는 함수이다.
fldkey 및 nth 파라미터로 지정한 필드키의 필드 순번에 해당하는 필드 데이터를 읽어서 extralen에 지정한 길이만큼의 새로운 버퍼를 할당하여 해당 버퍼에 데이터를 저장하고 포인터를 반환한다.
프로토타입
#include <fbuf.h> #include <atmi.h> char *fbgetalloc_tu(FBUF *fbuf, FLDKEY fldkey, int nth, int *extralen)
파라미터
파라미터 | 설명 |
---|---|
fbuf | fballoc() 또는 tpalloc()으로 메모리에 할당된 필드 버퍼이다. |
fldkey | 필드 버퍼에서 읽어 올 필드키를 의미한다. |
nth | 데이터를 읽어 올 필드키의 필드 순번을 의미한다. |
extralen | 새로 할당받아야 하는 버퍼의 크기를 의미한다. 새로 할당받은 버퍼는 사용한 후 반드시 사용자가 메모리를 해제한다. extralen을 0으로 지정하면 함수 수행 후 새로 할당해야 하는 버퍼의 크기가 필드 데이터의 길이로 설정된다. extralen은 할당한 버퍼의 크기가 설정된다. |
반환값
반환값 | 설명 |
---|---|
버퍼의 포인터 | 함수 호출에 성공한 경우이다. |
NULL | 필드 버퍼에서 지정한 필드키를 찾지 못하거나 함수 수행 중 다른 에러가 발생하였을 경우이다(fberror에 에러 코드가 설정된다). |
오류
fberrno에 다음 값 중 하나가 설정된다.
에러 코드 | 설명 |
---|---|
FBENOENT | 지정한 필드키가 FDLFILE(환경변수 : 기본값 tmax.fdl)에 정의되지 않아서 필드 버퍼에서 사용할 수 없는 경우 fberror는 FBENOENT로 설정된다. |
FBEMALLOC | 시스템 에러로 필드 버퍼를 메모리에 할당하지 못했을 경우 fberror는 FBEMALLOC로 설정된다. |
FBEINVAL | 입력 파라미터로 지정된 값 중 유효하지 않은 파라미터가 있음을 의미한다. |
FBETYPE | Tmax에서 지원하지 않는 타입이 사용되었다. |
예제
#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()
필드 버퍼에서 지정한 필드키의 필드 순번에 해당하는 필드 데이터를 지정한 타입으로 필요한 길이만큼 버퍼를 새로 할당받아 저장하여 반환하는 함수이다.
이 함수를 사용하면 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)
파라미터
파라미터 | 설명 |
---|---|
fbuf | fballoc() 또는 tpalloc()으로 메모리에 할당된 필드 버퍼이다. |
fldkey | 필드 버퍼에서 읽어 올 필드키를 의미한다. |
nth | 데이터를 읽어 올 필드키의 필드 순번을 의미한다. |
type | 필드 데이터를 변환할 데이터형으로 설정가능한 값은 다음과 같다.
|
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로 설정된다. |
FBETYPE | Tmax에서 지원하지 않는 타입이 사용되었다. |
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()
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)
파라미터
파라미터 | 설명 |
---|---|
fbuf | ffballoc() 또는 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()
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()
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()
필드 테이블을 생성하기 위해 필요한 데이터 중 지정한 필드키와 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 | 입력 파라미터로 지정된 값 중 유효하지 않은 파라미터가 있음을 의미한다. |
FBETYPE | Tmax에서 지원하지 않는 타입이 사용되었다. |
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()
프로토타입
#include <fbuf.h> #include <atmi.h> int fbget_fldtype(FLDKEY fldkey)
파라미터
파라미터 | 설명 |
---|---|
fldkey | 필드 테이블을 생성하기 위하여 필요한 데이터를 정의해 놓은 파일(***.f)을 fdlc 유틸리티를 통하여 컴파일하여 생성된 헤더 파일(***_fdl.h)을 이용하거나 또는 fbget_fldkey()를 이용해서 얻은 필드키이다. |
반환값
반환값은 다음과 같이 1~8까지의 int 값으로 함수에서 반환되는 필드형과 그에 matching되는 반환값은 다음과 같다.
반환값 | 필드형 |
---|---|
1 | character |
2 | short integer |
3 | integer |
4 | long integer |
5 | float |
6 | double |
7 | string |
8 | character 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()
필드 버퍼에서 지정한 필드키에 저장되어 있는 필드 데이터 중 마지막 순번의 데이터를 반환하는 함수이다. 반환되는 데이터가 필드 데이터 중 몇 번째 순번인지와 필드 데이터의 길이를 데이터와 함께 반환한다.
프로토타입
#include <fbuf.h> #include <atmi.h> int fbgetlast_tu(FBUF *fbuf, FLDKEY fldkey, int *nth, char *loc, int *len)
파라미터
파라미터 | 설명 |
---|---|
fbuf | balloc() 또는 tpalloc()으로 메모리에 할당된 필드 버퍼이다. |
fldkey | 필드 버퍼에서 읽어 올 필드키를 의미한다. |
nth | 지정한 필드키에 저장되어 있는 필드 데이터 중 마지막 순번이 저장되는 포인터로 데이터를 읽어 올 필드키의 필드 순번을 저장한다. |
loc | 가져온 필드 데이터를 저장하는 포인터이다. |
len | 가져온 필드 데이터의 길이를 저장하는 포인터이다. |
반환값
반환값 | 설명 |
---|---|
1 | 함수 호출에 성공한 경우이다. |
-1 | 필드 버퍼에서 지정한 필드키를 찾지 못하거나 함수 수행 중 다른 에러가 발생하였을 경우이다(fberror에 에러 코드가 설정된다). |
오류
fberrno에 다음 값 중 하나가 설정된다.
에러 코드 | 설명 |
---|---|
FBENOENT | 지정한 필드키가 FDLFILE(환경변수 : 기본값 tmax.fdl)에 정의되지 않아서 필드 버퍼에서 사용할 수 없는 경우 fberror는 FBENOENT로 설정된다. |
FBEINVAL | 입력 파라미터로 지정된 값 중 유효하지 않은 파라미터가 있음을 의미한다. |
FBETYPE | Tmax에서 지원하지 않는 타입이 사용되었다. |
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()
지정한 필드키에 저장될 필드 데이터의 타입을 문자열로 반환하는 함수이다. 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()
필드 버퍼에서 지정한 필드키의 지정한 필드 순번에 해당하는 필드의 데이터를 읽어 오는 함수이다. 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)
파라미터
파라미터 | 설명 |
---|---|
fbuf | fballoc() 또는 tpalloc()으로 메모리에 할당된 필드 버퍼이다. |
fldkey | 필드 버퍼에서 읽어 올 필드키를 의미한다. |
nth | 읽어 올 필드 순번을 나타낸다. |
value | 읽어 온 필드 데이터를 가리키는 포인터이다. 필드키가 정수형 또는 실수형인 경우에는 반드시 각 타입에 맞는 변수를 사용하되 앞에서 기술한 함수의 프로토타입에 맞게 type casting을 한다. |
len | 읽어 온 데이터의 길이를 나타낸다. |
반환값
반환값 | 설명 |
---|---|
1 | 지정한 필드키가 필드 버퍼에 존재하는 경우이다. |
-1 | 지정한 필드키가 필드 버퍼에 존재하지 않는 경우이다(fberror에 에러 코드가 설정된다). |
오류
fberrno에 다음 값 중 하나가 설정된다.
에러 코드 | 설명 |
---|---|
FBENOENT | 지정한 필드키가 FDLFILE(환경변수 : 기본값 tmax.fdl)에 정의되지 않아서 필드 버퍼에서 사용할 수 없는 경우 fberror는 FBENOENT로 설정된다. |
FBEINVAL | 입력 파라미터로 지정된 값 중 유효하지 않은 파라미터가 있음을 의미한다. |
FBETYPE | Tmax에서 지원하지 않는 타입이 사용되었다. |
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()
지정한 필드키의 필드 순번에 해당하는 필드 데이터를 지정한 타입으로 변환하여 반환하는 함수이다. 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)
파라미터
파라미터 | 설명 |
---|---|
fbuf | fballoc() 또는 tpalloc()으로 메모리에 할당된 필드 버퍼이다. |
fldkey | 필드 버퍼에서 읽어 올 필드키를 의미한다. |
nth | 읽어 올 필드 순번을 의미한다. |
value | 읽어 온 필드 데이터를 가리키는 포인터이다. 만약 필드키가 정수형 또는 실수형인 경우에는 반드시 각 타입에 맞는 변수를 사용하되 앞에서 기술한 함수의 프로토타입에 맞게 type casting을 한다. |
len | 읽어 온 데이터의 길이를 의미한다. |
type | 읽어 온 데이터형을 변환할 경우 데이터형으로 설정가능한 값은 다음과 같다.
|
반환값
반환값 | 설명 |
---|---|
1 | 지정한 필드키가 필드 버퍼에 존재하는 경우이다. |
-1 | 지정한 필드키가 필드 버퍼에 존재하지 않는 경우이다(fberror에 에러 코드가 설정된다). |
오류
fberrno에 다음 값 중 하나가 설정된다.
에러 코드 | 설명 |
---|---|
FBENOENT | 지정한 필드키가 FDLFILE(환경변수 : 기본값 tmax.fdl)에 정의되지 않아서 필드 버퍼에서 사용할 수 없는 경우 fberror는 FBENOENT로 설정된다. |
FBETYPE | Tmax에서 지원하지 않는 타입이 사용되었다. |
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()
fballoc() 또는 tpalloc()으로 메모리에 할당된 필드 버퍼 중 아직 사용되지 않은 필드 버퍼의 크기를 계산하여 Byte 단위로 반환하는 함수이다.
프로토타입
#include <fbuf.h> #include <atmi.h> long fbget_unused(FBUF *fbuf)
파라미터
파라미터 | 설명 |
---|---|
fbuf | fballoc() 또는 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()
fballoc() 또는 tpalloc()으로 메모리에 할당된 필드 버퍼 중 현재 사용 중인 필드 버퍼의 크기를 계산하여 Byte 단위로 반환하는 함수이다.
프로토타입
#include <fbuf.h> #include <atmi.h> long fbget_used(FBUF *fbuf)
파라미터
파라미터 | 설명 |
---|---|
fbuf | fballoc() 또는 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()
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)
파라미터
파라미터 | 설명 |
---|---|
fbuf | fballoc() 또는 tpalloc()으로 메모리에 할당된 필드 버퍼이다. |
fldkey | 데이터를 가져오려는 필드키를 의미한다. |
loc | 읽어 온 데이터가 반환하는 포인터이다. |
fldlen | 읽어 온 데이터의 길이가 반환된다. |
pos | 읽어 올 다음 데이터의 위치를 반환하는 포인터이다. pos는 fbgetf()를 사용할 필드키마다 따로 두어야 하고, fbgetf()를 호출하기 전에 반드시 0으로 초기화한다. |
반환값
반환값 | 설명 |
---|---|
1 | 지정한 필드키의 필드 데이터를 정상적으로 읽어 온 경우이다. |
-1 | 지정한 필드키의 필드 데이터를 정상적으로 읽어 오지 못하는 경우이다(fberror에 에러 코드가 설정된다). |
오류
fberrno에 다음 값 중 하나가 설정된다.
에러 코드 | 설명 |
---|---|
FBENOENT | 지정한 필드키가 FDLFILE(환경변수 : 기본값 tmax.fdl)에 정의되지 않아서 필드 버퍼에서 사용할 수 없는 경우 fberror는 FBENOENT로 설정된다. |
FBEINVAL | 입력 파라미터로 지정된 값 중 유효하지 않은 파라미터가 있음을 의미한다. |
FBETYPE | Tmax에서 지원하지 않는 타입이 사용되었다. |
예제
#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()
fballoc() 또는 tpalloc()으로 메모리에 할당된 필드 버퍼에 지정한 필드키의 필드 순번에 해당하는 필드 데이터의 길이를 반환하는 함수이다.
프로토타입
#include <fbuf.h> #include <atmi.h> int fbgetlen(FBUF *fbuf, FLDKEY fldkey, int nth)
파라미터
파라미터 | 설명 |
---|---|
fbuf | fballoc() 또는 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()
필드 버퍼에서 지정한 필드키에 저장되어 있는 필드 데이터 중 지정한 데이터가 저장되어 있는 필드의 개수를 반환하는 함수이다. 데이터가 여러 번 저장되어 있다면 해당 필드의 개수 중 가장 작은 값이 반환된다.
프로토타입
#include <fbuf.h> #include <atmi.h> int fbgetnth(FBUF *fbuf, FLDKEY fldkey, char *value, FLDLEN fldlen)
파라미터
파라미터 | 설명 |
---|---|
fbuf | fballoc() 또는 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()
지정한 필드키에 저장되어 있는 필드 데이터 중 지정한 데이터가 저장되어 있는 필드 순번을 반환하는 함수이다. 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)
파라미터
파라미터 | 설명 |
---|---|
fbuf | fballoc() 또는 tpalloc()으로 메모리에 할당된 필드 버퍼이다. |
fldkey | 필드 버퍼에서 데이터를 비교할 필드키를 의미한다. |
value | 필드 데이터와 비교할 데이터를 가리키는 포인터이다. 필드키가 정수형 또는 실수형인 경우에는 반드시 각 타입에 맞는 변수를 사용하되 앞에서 기술한 함수의 프로토타입에 맞게 type casting을 한다. |
fldlen | 데이터의 길이를 나타내는데 지정한 필드키의 타입이 FB_CARRAY가 아닌 경우에는 0으로 지정해도 무방하다. |
fromtype | 사용자가 지정하는 value의 데이터형으로 다음의 값을 설정할 수 있다.
|
반환값
반환값 | 설명 |
---|---|
지정한 데이터의 필드 순번 | 지정한 필드키의 필드 순번이 필드 버퍼에 존재하는 경우이다. |
-1 | 지정한 필드키의 필드 순번이 필드 버퍼에 존재하지 않는 경우이다(fberror에 에러 코드가 설정된다). |
오류
fberrno에 다음 값 중 하나가 설정된다.
에러 코드 | 설명 |
---|---|
FBENOENT | 지정한 필드키가 FDLFILE(환경변수 : 기본값 tmax.fdl)에 정의되어 있지 않으므로 필드 버퍼에서 사용할 수 없는 경우 fberror는 FBENOENT로 설정된다. |
FBENOSPACE | 필드 버퍼에 데이터를 저장하거나 복사할 공간이 부족할 경우 fberror는 FBENOSPACE로 설정된다. |
FBEINVAL | 입력 파라미터로 지정된 값 중 유효하지 않은 파라미터가 있음을 의미한다. |
FBETYPE | Tmax에서 지원하지 않는 타입이 사용되었다. |
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()
필드 버퍼에서 지정한 필드키에 저장되어 있는 필드 데이터 중 지정한 필드 순번에 해당하는 필드 데이터를 반환하는 함수이다. 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)
파라미터
파라미터 | 설명 |
---|---|
fbuf | fballoc() 또는 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()
필드 버퍼에서 지정한 필드키에 저장되어 있는 데이터 중 지정한 필드 순번에 해당하는 필드 데이터를 정수로 변환하여 그 정수 값을 반환하는 함수이다.
fldkey에서 지정한 필드키에 저장되어 있는 데이터 중 nth에서 지정한 필드 순번에 해당하는 필드 데이터를 정수로 변환하여 반환한다. 지정한 필드키의 타입이 어떤 타입이라 하더라도 정수로 변환해 준다.
하지만 정수로 변환할 수 없는 경우, 예를 들면 필드 데이터가 “aaaa”일 때는 0을 반환한다.
프로토타입
#include <fbuf.h> #include <atmi.h> int fbgetvali (FBUF *fbuf, FLDKEY fldkey, int nth)
파라미터
파라미터 | 설명 |
---|---|
fbuf | fballoc() 또는 tpalloc()으로 메모리에 할당된 필드 버퍼이다. |
fldkey | 필드 버퍼에서 읽어 올 필드키를 의미한다. |
nth | 읽어 올 필드 순번을 의미한다. |
반환값
반환값 | 설명 |
---|---|
정수 | 함수 호출에 성공한 경우이다(fbgetvali()는 읽어 온 데이터를 정수로 변환하여 반환한다). |
0 | 지정한 필드키의 필드 순번이 필드 버퍼에 존재하지 않거나 함수 수행 중 다른 에러가 발생한 경우이다(fberror에 에러 코드가 설정된다). |
오류
fberrno에 다음 값 중 하나가 설정된다.
에러 코드 | 설명 |
---|---|
FBENOSPACE | 필드 버퍼에 데이터를 저장하거나 복사할 공간이 부족할 경우 fberror는 FBENOSPACE로 설정된다. |
FBEINVAL | 입력 파라미터로 지정된 값 중 유효하지 않은 파라미터가 있음을 의미한다. |
FBETYPE | Tmax에서 지원하지 않는 타입이 사용되었다. |
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()
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)
파라미터
파라미터 | 설명 |
---|---|
fbuf | fballoc() 또는 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()
필드 버퍼에서 지정한 필드키의 필드 순번의 데이터를 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)
파라미터
파라미터 | 설명 |
---|---|
fbuf | fballoc() 또는 tpalloc()으로 메모리에 할당된 필드 버퍼이다. |
fldkey | 필드 버퍼에서 읽어 올 필드키를 나타낸다. |
nth | 읽어 올 필드 순번을 나타낸다. |
반환값
반환값 | 설명 |
---|---|
필드 데이터 | 함수 호출에 성공한 경우이다(필드 데이터를 long형으로 변환하여 반환한다). |
0 | 필드 버퍼에서 지정한 필드키를 찾지 못하였을 경우 또는 지정한 필드키가 short, int, long형 중 하나가 아닌 경우이다(fberror에 에러 코드가 설정된다). |
오류
fberrno에 다음 값 중 하나가 설정된다.
에러 코드 | 설명 |
---|---|
FBENOENT | 지정한 필드키가 FDLFILE(환경변수 : 기본값 tmax.fdl)에 정의되지 않아서 필드 버퍼에서 사용할 수 없는 경우 fberror는 FBENOENT로 설정된다. |
FBETYPE | Tmax에서 지원하지 않는 타입이 사용되었다. 함수에서 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()
fldkey에서 지정한 필드키에 저장되어 있는 필드 데이터 중 nth에서 지정한 필드 순번의 필드 데이터를 그 필드형에 상관없이 모두 문자열로 변환하여 반환한다.
fbgetval()과 비슷하게 동작하지만 fbgetval()은 필드형 그대로 필드 데이터를 반환하는 것이고, fbgetvals()는 문자열로 변환하여 반환한다.
프로토타입
#include <fbuf.h> #include <atmi.h> char *fbgetvals (FBUF *fbuf, FLDKEY fldkey, int nth)
파라미터
파라미터 | 설명 |
---|---|
fbuf | fballoc() 또는 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()
필드 버퍼에서 지정한 필드키에 저장되어 있는 필드 데이터 중 지정한 필드 순번의 필드 데이터를 그 필드형이 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)
파라미터
파라미터 | 설명 |
---|---|
fbuf | fballoc() 또는 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()
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)
파라미터
파라미터 | 설명 |
---|---|
fbuf | fballoc() 또는 tpalloc()으로 메모리에 할당된 필드 버퍼이다. |
fldkey | 필드 버퍼에서 읽어 올 필드키를 나타낸다. |
nth | 읽어 올 필드 순번을 나타낸다 |
len | 읽어 온 데이터의 길이를 나타낸다. |
totype | totype에 설정가능한 값은 다음과 같다.
|
반환값
반환값 | 설명 |
---|---|
데이터 포인터 | 함수 호출에 성공한 경우이다(읽어 온 데이터가 저장되어 있는 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()
fballoc() 또는 tpalloc()으로 메모리에 할당된 필드 버퍼를 초기화하는 함수이다. 함수를 사용하기 전에 반드시 fballoc() 또는 tpalloc()을 사용하여 메모리에 필드 버퍼를 할당해야 한다. 이전에 필드 버퍼에 저장되어 있던 모든 데이터는 삭제되므로 주의해야 한다.
프로토타입
#include <fbuf.h> #include <atmi.h> int fbinit(FBUF *fbuf, FLDLEN buflen)
파라미터
파라미터 | 설명 |
---|---|
fbuf | fballoc() 또는 tpalloc()으로 메모리에 할당된 필드 버퍼이다. |
buflen | 메모리에 할당되어 초기화해야 하는 필드 버퍼의 크기를 나타낸다. |
반환값
반환값 | 설명 |
---|---|
1 | 함수 호출에 성공한 경우이다. |
-1 | 필드 버퍼를 초기화하는데 실패한 경우이다(fberror에 에러 코드가 설정된다). |
오류
fberrno에 다음 값 중 하나가 설정된다.
에러 코드 | 설명 |
---|---|
FBENOSPACE | buflen로 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()
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)
파라미터
파라미터 | 설명 |
---|---|
fbuf | fballoc() 또는 tpalloc()으로 메모리에 할당된 필드 버퍼이다. |
fldkey | 필드 버퍼에 저장할 필드키를 나타낸다. |
nth | 저장할 필드 순번을 나타낸다 |
value | 저장할 필드 데이터를 가리키는 포인터이다. 필드키가 정수형 또는 실수형인 경우에는 반드시 각 타입에 맞는 변수를 사용하되 앞에서 기술한 함수의 프로토타입에 맞게 type casting을 한다. |
fldlen | 저장할 데이터의 길이를 나타낸다. 일반적으로 필드키의 필드형이 FB_CARRAY인 경우에는 반드시 길이를 지정해야 하지만 그렇지 않은 경우에는 이 파라미터는 0으로 지정해도 무방하다. |
반환값
반환값 | 설명 |
---|---|
1 | 함수 호출에 성공한 경우이다. |
-1 | 필드 버퍼에 데이터를 저장하는데 실패한 경우이다(fberror에 에러 코드가 설정된다). |
오류
fberrno에 다음 값 중 하나가 설정된다.
에러 코드 | 설명 |
---|---|
FBENOSPACE | 필드 버퍼에 데이터를 저장하거나 복사할 공간이 부족할 경우 fberror는 FBENOSPACE로 설정된다. |
FBEINVAL | 입력 파라미터로 지정된 값 중 유효하지 않은 파라미터가 있음을 의미한다(현재 필드 순번보다 큰 수를 nth에 지정한 경우 필드키가 carray형이라면 이 에러가 설정된다). |
FBETYPE | Tmax에서 지원하지 않는 타입이 사용되었다. |
예제
#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()
필드 버퍼에 데이터를 저장하기 위해서는 반드시 미리 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()
필드 버퍼에 지정한 필드키의 필드 순번에 필드 데이터가 존재하는지 확인하는 함수이다.
프로토타입
#include <fbuf.h> #include <atmi.h> int fbispres(FBUF *fbuf, FLDKEY fldkey, int nth)
파라미터
파라미터 | 설명 |
---|---|
fbuf | fballoc() 또는 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()
필드 버퍼에서 지정한 필드키에 저장되어 있는 모든 필드의 개수를 반환하는 함수이다. fbfldcount()는 지정한 필드 버퍼에 저장되어 있는 모든 필드의 개수(1부터 시작되는 필드 수)를 반환하지만 fbkeyoccur()는 지정한 필드키에 대한 개수를 반환한다.
프로토타입
#include <fbuf.h> #include <atmi.h> int fbkeyoccur(FBUF *fbuf, FLDKEY fldkey)
파라미터
파라미터 | 설명 |
---|---|
fbuf | fballoc() 또는 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()
필드 정의 파일(***.f)에 정의되어 있지는 않지만 프로그램 내에서 동적으로 새로운 필드키를 생성해야 할 경우에 사용하는 함수이다.
필드키를 하나 만들 때에는 필드형과 Tmax에서 유일한 필드 번호가 필요하므로 이 두 가지를 파라미터로 지정하면 함수 수행 후 필드키가 생성되어 반환된다. 필드 번호에 이미 존재하는 번호를 지정하면 기존에 존재하는 필드키와 동일한 필드키를 생성할 수 있다. 생성된 필드키에 데이터를 저장하여 다른 프로세스에 전달하려면 전달하려는 프로세스에서도 내부적으로 새로 생성한 필드키와 동일한 필드키(type과 no가 같아야 함)가 생성되어 있어야 한다.
프로토타입
#include <fbuf.h> #include <atmi.h> FLDKEY fbmake_fldkey(int type, int no)
파라미터
파라미터 | 설명 |
---|---|
type | 새로 생성될 필드키의 타입이다. |
no | 필드키를 생성할 때 필요한 필드 번호로 다음의 값을 설정할 수 있다.
|
반환값
지정된 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()
필드 버퍼에서 다음 필드키와 필드 데이터를 반환하는 함수이다. fldkey에 시작 필드키를 지정하면 지정된 시작 필드키로부터 필드 버퍼에 있는 모든 필드키 및 필드 데이터를 순차적으로 반환하는 함수이다. 필드 버퍼에 저장되어 있는 첫 필드키부터 읽어 오려면 지정해야 할 시작 필드키는 반드시 FIRSTFLDKEY이어야 한다.
프로토타입
#include <fbuf.h> #include <atmi.h> int fbnext_tu(FBUF *fbuf, FLDKEY *fldkey, int *nth, char *value, int *len)
파라미터
파라미터 | 설명 |
---|---|
fbuf | fballoc() 또는 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()
현재 필드 버퍼의 내용을 정해진 형식에 따라 표준 출력하는 함수이다. 일반적으로 표준 출력은 모니터의 화면이므로 필드 버퍼의 내용을 모니터로 확인할 때 유용하게 사용된다.
출력 형식은 다음과 같다.
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)
파라미터
파라미터 | 설명 |
---|---|
fbuf | fballoc() 또는 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()
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)
파라미터
파라미터 | 설명 |
---|---|
fbuf | fballoc() 또는 tpalloc()으로 메모리에 할당된 필드 버퍼이다. |
fldkey | 생성할 필드의 필드키이다. |
value | 새로 생성된 필드에 저장할 데이터이다. |
len | value의 길이를 나타낸다. 필드의 필드형이 FB_CARRAY인 경우에는 반드시 길이를 명시해야 하지만 그렇지 않은 경우에는 무시하고 0으로 지정해도 무방하다. |
반환값
반환값 | 설명 |
---|---|
1 | 함수 호출에 성공한 경우이다. |
-1 | 필드 버퍼에 필드를 추가하는데 실패한 경우이다(fberror에 에러 코드가 설정된다). |
오류
fberrno에 다음 값 중 하나가 설정된다.
에러 코드 | 설명 |
---|---|
FBENOSPACE | 필드 버퍼에 데이터를 저장하거나 복사할 공간이 부족할 경우 fberror는 FBENOSPACE로 설정된다. |
FBEINVAL | 입력 파라미터로 지정된 값 중 유효하지 않은 파라미터가 있음을 의미한다. |
FBETYPE | Tmax에서 지원하지 않는 타입이 사용되었다. |
예제
#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()
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)
파라미터
파라미터 | 설명 |
---|---|
fbuf | fballoc() 또는 tpalloc()으로 메모리에 할당된 필드 버퍼이다. |
fldkey | 생성할 필드의 필드키이다. |
value | 새로 생성된 필드에 저장할 데이터이다. |
len | value의 길이를 나타낸다. 필드의 타입이 FB_CARRAY인 경우에는 반드시 길이를 명시해야 하지만 그렇지 않은 경우에는 무시하고 0으로 지정해도 무방하다. |
type | 사용자가 지정한 데이터형으로 데이터가 필드에 저장되기 전에 지정한 type에서 필드키의 타입으로 변환된다. type에 설정가능한 값은 다음과 같다.
|
반환값
반환값 | 설명 |
---|---|
1 | 함수 호출에 성공한 경우이다. |
-1 | 필드 버퍼에 필드를 추가하는데 실패한 경우이다(fberror에 에러 코드가 설정된다). |
오류
fberrno에 다음 값 중 하나가 설정된다.
에러 코드 | 설명 |
---|---|
FBENOSPACE | 필드 버퍼에 데이터를 저장하거나 복사할 공간이 부족할 경우 fberror는 FBENOSPACE로 설정된다. |
FBEINVAL | 입력 파라미터로 지정된 값 중 유효하지 않은 파라미터가 있음을 의미한다. |
FBETYPE | Tmax에서 지원하지 않는 타입이 사용되었다. |
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()
fballoc() 또는 tpalloc()으로 메모리에 할당된 필드 버퍼의 크기가 부족할 경우 메모리의 크기를 늘려서 다시 할당하는 함수이다.
프로토타입
#include <fbuf.h> #include <atmi.h> FBUF *fbrealloc(FBUF *fbuf, int ncount, int nlen)
파라미터
파라미터 | 설명 |
---|---|
fbuf | fballoc() 또는 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()
지정한 파일 스트림으로부터 데이터를 읽어서 fballoc() 또는 tpalloc()으로 메모리에 할당된 필드 버퍼에 필드 데이터로 로드하는 함수이다. iop에서 지정한 파일 스트림으로부터 데이터를 읽어서 fballoc() 또는 tpalloc()으로 메모리에 할당된 필드 버퍼에 필드 데이터로 로드한다.
fbread()에서 사용하는 파일 스트림은 이전에 fbwrite()를 호출하여 생성된 파일을 지정해야 한다. 파일을 다른 프로세스로부터 전달받은 데이터를 현재의 프로세스의 필드 버퍼로 로드할 경우에 사용한다.
프로토타입
#include <fbuf.h> #include <atmi.h> int fbread(FBUF *fbuf, FILE *iop)
파라미터
파라미터 | 설명 |
---|---|
fbuf | fballoc() 또는 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()
필드 버퍼에서 지정한 필드키의 필드 순번과 mapping되는 구조체의 멤버 변수가 NULL인지 확인하는 함수이다.
프로토타입
#include <fbuf.h> #include <atmi.h> int fbsnull(char *cstruct, char *cname, int nth, char *stname)
파라미터
파라미터 | 설명 |
---|---|
cstruct | 사용할 구조체 타입의 변수를 (char *)형으로 type casting해서 사용한다. |
cname | 구조체의 멤버 변수를 문자열로 지정할 수 있다. |
nth | 필드 순번을 나타낸다. |
stname | VIEW에서 정의한 구조체의 이름을 문자열로 지정한다. |
반환값
반환값 | 설명 |
---|---|
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()
입력 파라미터에서 지정한 구조체의 멤버 변수를 개별적으로 적절하게 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해서 사용한다. |
stname | VIEW에서 정의한 구조체의 이름을 문자열로 지정한다. |
반환값
반환값 | 설명 |
---|---|
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()
입력 파라미터에서 지정한 구조체 변수를 초기화하는 함수이다.
fbstelinit()는 지정한 구조체에 대해 각각의 멤버 변수를 적절하게 초기화하는 반면 fbstinit()는 구조체 전체를 한 번에 초기화한다. 그러므로 멤버 변수 중 하나를 초기화하고자 할 경우에는 fbstelinit()를 사용하고 구조체를 초기화하고자 할 경우에는 fbstinit()를 사용하는 것이 좋다.
프로토타입
#include <fbuf.h> #include <atmi.h> int fbstinit(char *cstruct, char *stname)
파라미터
파라미터 | 설명 |
---|---|
cstruct | 사용할 구조체 타입의 변수를 (char *)형으로 type casting해서 사용한다. |
stname | VIEW에서 정의한 구조체의 이름을 문자열로 지정한다. |
반환값
반환값 | 설명 |
---|---|
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()
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)
파라미터
파라미터 | 설명 |
---|---|
fbuf | fballoc() 또는 tpalloc()으로 메모리에 할당된 필드 버퍼이다. |
cstruct | 사용할 구조체 타입의 변수를 (char *)형으로 type casting해서 사용한다. |
mode | 데이터를 필드 버퍼로 전송할 때의 방식으로 mode에 따라 약간의 기능상의 차이점이 있다. mode는 fbbufop()의 각 모드와 완전히 일치하게 동작하므로 fbbufop()를 참고한다. mode에 설정가능한 값은 다음과 같다.
|
stname | VIEW에서 정의한 구조체의 이름을 문자열로 지정한다. |
반환값
반환값 | 설명 |
---|---|
1 | 구조체 버퍼에 저장되어 있는 데이터를 성공적으로 필드 버퍼에 전송했을 경우이다. |
-1 | 구조체 버퍼에 저장되어 있는 데이터를 성공적으로 필드 버퍼에 전송하지 못한 경우이다(fberror에 에러 코드가 설정된다). |
오류
fberrno에 다음 값 중 하나가 설정된다.
에러 코드 | 설명 |
---|---|
FBENOSPACE | 필드 버퍼에 데이터를 저장하거나 복사할 공간이 부족할 경우 fberror는 FBENOSPACE로 설정된다. |
FBETYPE | Tmax에서 지원하지 않는 타입이 사용되었다. |
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()
필드 버퍼와 관련된 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()
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 | 데이터를 변환할 타입으로 설정가능한 값은 다음과 같다.
|
fromval | 변환하려는 데이터를 가리키는 포인터이다. |
fromtype | fromval의 데이터형이다. |
fromlen | fromtype에 지정한 타입의 기본 크기와 관련이 있다. |
반환값
반환값 | 설명 |
---|---|
변환된 데이터의 포인터 | 데이터를 변환하는데 성공한 경우이다. |
NULL | 데이터를 변환하는데 실패한 경우이다 (fberror에 에러 코드를 설정한다). |
오류
fberrno에 다음 값 중 하나가 설정된다.
에러 코드 | 설명 |
---|---|
FBENOSPACE | 필드 버퍼에 데이터를 저장하거나 복사할 공간이 부족할 경우 fberror는 FBENOSPACE로 설정된다. |
FBEINVAL | 입력 파라미터로 지정된 값 중 유효하지 않은 파라미터가 있음을 의미한다(FB_CARRAY 타입인 경우 데이터 길이를 지정하지 않으면 이 에러가 설정된다). |
FBETYPE | Tmax에서 지원하지 않는 타입이 사용되었다. |
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()
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)
파라미터
파라미터 | 설명 |
---|---|
fbuf | fballoc() 또는 tpalloc()으로 메모리에 할당된 필드 버퍼이다. |
fldkey | 필드 버퍼에 변경할 필드의 필드키이다. |
nth | fldkey에서 지정한 필드키의 데이터 중 변경할 필드 순번을 의미한다. 그리고 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 | 입력 파라미터로 지정된 값 중 유효하지 않은 파라미터가 있음을 의미한다. |
FBETYPE | Tmax에서 지원하지 않는 타입이 사용되었다. |
예제
#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()
fballoc() 또는 tpalloc()으로 메모리에 할당된 필드 버퍼의 내용을 iop에 지정한 파일 스트림에 저장하는 함수이다. 파일 스트림에 저장되는 데이터는 바이너리를 포함한 데이터이다. 다른 프로세스에 데이터를 전달하기 위해 파일을 사용하는 경우에 사용한다. fbwrite()에 의해서 저장된 데이터는 fbread()를 통해서 필드 버퍼에 로드할 수 있으므로 주의한다.
프로토타입
#include <fbuf.h> #include <atmi.h> int fbwrite(FBUF *fbuf, FILE *iop)
파라미터
파라미터 | 설명 |
---|---|
fbuf | fballoc() 또는 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()
필드 버퍼와 관련된 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()
필드 버퍼와 관련된 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()