제2장 FDL 함수

본 장에서는 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()를 사용하여 해제해야 한다.

2.3. fbbufop

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

2.4. fbbufop_proj

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

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

2.5. fbcalcsize

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

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

2.6. fbchg_tu

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

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

2.7. fbchg_tut

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

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

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

2.8. fbdelall

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

2.9. fbdelall_tu

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

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

2.10. fbdelete

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

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

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

2.12. fbfldcount

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

2.13. fbfprint

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

2.14. fbfree

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

2.15. fbftos

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

2.16. fbget

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

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

2.17. fbgetalloc_tu

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

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

2.18. fbgetalloc_tut

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

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

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

2.19. fbget_fbsize

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

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

2.20. fbget_fldkey

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

2.21. fbget_fldname

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

2.22. fbget_fldno

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

2.23. fbget_fldtype

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

2.24. fbgetlast_tu

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

2.25. fbget_strfldtype

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

2.26. fbget_tu

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

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

2.27. fbget_tut

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

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

2.28. fbget_unused

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

2.29. fbget_used

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

2.30. fbgetf

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

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

2.31. fbgetlen

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

2.32. fbgetnth

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

2.33. fbgetntht

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

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

2.34. fbgetval

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

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

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

2.35. fbgetvali

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

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

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

2.36. fbgetval_last_tu

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

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

2.37. fbgetvall_tu

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

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

2.38. fbgetvals

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

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

2.39. fbgetvals_tu

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

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

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

2.40. fbgetvalt

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

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

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

2.41. fbinit

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

2.42. fbinsert

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

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

2.43. fbisfbuf

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

2.44. fbispres

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

2.45. fbkeyoccur

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

2.46. fbmake_fldkey

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

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

2.47. fbnext_tu

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

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

2.49. fbput

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

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

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

2.50. fbputt

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

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

2.51. fbrealloc

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

2.52. fbread

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

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

2.53. fbsnull

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

2.54. fbstelinit

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

2.55. fbstinit

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

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

2.56. fbstof

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

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

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

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

2.57. fbstrerror

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

2.58. fbtypecvt

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

2.59. fbupdate

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

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

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

2.60. fbwrite

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

2.61. getfberrno

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

2.62. getfberror

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

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