Tmax FDL Reference Guide Tmax v5.0 SP1 Copyright 2009 TmaxSoft Co., Ltd. All Rights Reserved.
Copyright Notice Copyright 2009 TmaxSoft Co., Ltd. All Rights Reserved. 대한민국경기도성남시분당구서현동 263 분당스퀘어 (AK 프라자 ) 12 층 Restricted Rights Legend All TmaxSoft Software (Tmax ) and documents are protected by copyright laws and the Protection Act of Com puter Programs, and international convention. TmaxSoft software and documents are made available under the terms of the TmaxSoft License Agreement and may only be used or copied in accordance with the terms of this agreement. No part of this document may be transmitted, copied, deployed, or reproduced in any form or by any means, electronic, mechanical, or optical, without the prior written consent of TmaxSoft Co., Ltd. 이소프트웨어 (Tmax ) 사용서의내용과프로그램은저작권법, 컴퓨터프로그램보호법및국제조약에의해서보호받고있습니다. 사용서의내용과여기에된프로그램은 TmaxSoft Co., Ltd. 와의사용권계약하에서만사용이가능하며, 사용권계약을준수하는경우에만사용또는복제할수있습니다. 이사용서의전부또는일부분을 TmaxSoft의사전서면동의없이전자, 기계, 녹음등의수단을사용하여전송, 복제, 배포, 2차적저작물작성등의행위를하여서는안됩니다. Trademarks Tmax, Tmax WebtoB and JEUS are registered trademark of TmaxSoft Co., Ltd. Other products, titles or services may be registered trademarks of their respective companies. Tmax, Tmax WebtoB 와 JEUS 는 TmaxSoft Co., Ltd. 의등록상표입니다. 기타모든제품들과회사이름은각각해당소유주의상표로서참조용으로만사용됩니다. Open Source Software Notice This product includes various open source software that has been developed and/or licensed by OpenSSL, RSA Data Security, Inc., Apache Foundation, or Jean-loup Gailly and Mark Adler. TmaxSoft fully respects the aforementioned parties and the open source software used in this product. More details can be found within the directory ${INSTALL_PATH/license/oss_licenses 본제품은 OpenSSL, RSA Data Security, Inc., Apache Foundation 및 Jean-loup Gailly와 Mark Adler 에의해개발또는라이선스된오픈소스소프트웨어를포함합니다. 오픈소스소프트웨어와개발자에대해경의를표합니다. 관련상세정보는제품의디렉터리 ${INSTALL_PATH/license/oss_licenses 에기재된사항을참고해주십시오. 안내서정보안내서제목 : Tmax FDL Reference Guide 발행일 : 2009-08-10 소프트웨어버전 : Tmax v5.0 SP1 안내서버전 : v2.1.1
내용목차 안내서에대하여... v 제1장 소개... 1 1.1. 개요... 1 1.2. C 구조체와필드버퍼... 2 1.3. FDL 테이블생성... 3 1.3.1. 명령어... 3 1.3.2. 예제... 5 제2장 FDL 함수... 7 2.1. fballoc... 10 2.2. fbbufop... 11 2.3. fbbufop_proj... 15 2.4. fbcalcsize... 17 2.5. fbchg_tu... 18 2.6. fbchg_tut... 20 2.7. fbdelall... 22 2.8. fbdelall_tu... 24 2.9. fbdelete... 25 2.10. fbextread... 27 2.11. fbfldcount... 31 2.12. fbfprint... 32 2.13. fbfree... 34 2.14. fbftos... 35 2.15. fbget... 38 2.16. fbgetalloc_tu... 40 2.17. fbgetalloc_tut... 42 2.18. fbget_fbsize... 44 2.19. fbget_fldkey... 46 2.20. fbget_fldname... 47 2.21. fbget_fldno... 48 2.22. fbget_fldtype... 49 2.23. fbgetlast_tu... 51 2.24. fbget_strfldtype... 52 2.25. fbget_tu... 53 2.26. fbget_tut... 55 2.27. fbget_unused... 57 2.28. fbget_used... 58 2.29. fbgetf... 59 2.30. fbgetlen... 61 2.31. fbgetnth... 63 2.32. fbgetntht... 64 Tmax iii
2.33. fbgetval... 66 2.34. fbgetvali... 68 2.35. fbgetval_last_tu... 70 2.36. fbgetvall_tu... 72 2.37. fbgetvals... 73 2.38. fbgetvals_tu... 75 2.39. fbgetvalt... 77 2.40. fbinit... 79 2.41. fbinsert... 80 2.42. fbisfbuf... 82 2.43. fbispres... 83 2.44. fbkeyoccur... 84 2.45. fbmake_fldkey... 86 2.46. fbnext_tu... 87 2.47. fbprint... 89 2.48. fbput... 90 2.49. fbputt... 92 2.50. fbrealloc... 94 2.51. fbread... 96 2.52. fbsnull... 97 2.53. fbstelinit... 99 2.54. fbstinit... 100 2.55. fbstof... 102 2.56. fbstrerror... 105 2.57. fbtypecvt... 106 2.58. fbupdate... 108 2.59. fbwrite... 110 2.60. getfberrno... 111 2.61. getfberror... 112 색인... 115 iv Tmax FDL Reference Guide
안내서에대하여 안내서의대상 본안내서는 Tmax ( 이하 Tmax) 의 FDL(Field Definition Language) 함수를이용하여프로그램을구현하는개발자를대상으로기술한다. FDL 함수는필드버퍼를사용하여서로다른프로세스간에데이터를교환하기위해필드를조작 ( 저장, 수정, 삭제 ) 하는데사용하는함수이다. 개발자가이러한 FDL 함수의정의와사용예제프로그램을참조하여 FDL의모든기능을활용함으로써효율적인프로그램을구현하는데도움을주고자한다. 안내서의전제조건 본안내서는 Tmax 시스템에대한전반적인이해와 Tmax 시스템이제공하는각종기능및특성에대한습득을위한기본서이다. 본안내서를원활하게이해하기위해서는다음과같은사항을미리알고있어야한다. 미들웨어 (Middleware) 및 UNIX 시스템에대한이해 Tmax 의기본개념이해 Java, C 프로그래밍의이해 안내서의제한조건 본안내서를읽기전에 Tmax 의기본개념을숙지하고있어야한다. 실무에서의구체적인사용방법이나 관리및운용에관한사항은각제품의안내서를참고한다. 참고 Tmax 시스템개발에대한기본적인내용은 "Tmax Administration Guide" 나 "Tmax Application Devel oment Guide" 를참고한다. Tmax에서제공하는명령어와 C API에대한은 Tmax Reference Guide 를참고한다. 안내서에대하여 v
안내서구성 Tmax FDL Reference Guide는총 2개의장으로구성되어있다. 각장의주요내용은다음과같다. 제1장 : 개요 FDL의전반전인내용에대해한다. 제 2 장 : FDL 함수 FDL 에서사용하는 API 함수에대해기술한다. vi Tmax FDL Reference Guide
안내서규약 표기 <AaBbCc123> <Ctrl>+C [Button] 진하게 " "( 따옴표 ) ' 입력항목 ' 하이퍼링크 > +---- ---- 참고 의미프로그램소스코드의파일명, 디렉터리 Ctrl과 C를동시에누름 GUI의버튼또는메뉴이름강조다른관련안내서또는안내서내의다른장및절언급화면 UI에서입력항목에대한메일계정, 웹사이트, 다른장및절참고메뉴의진행순서하위디렉터리또는파일있음하위디렉터리또는파일없음참조또는주의사항 [ 그림 1.1] [ 표 1.1] AaBbCc123 그림이름 표이름 명령어, 명령어수행후화면에출력된결과물, 예제코드 [ ] 옵션인수값 선택인수값 안내서에대하여 vii
시스템사용환경 요구사항 Platform IBM AIX 5.x HP-UX 11.xx Solaris 7~9 (SunOS 5.7~5.9) Hardware 최소 120MB 하드디스크공간 256MB 이상메모리공간 1GB 이상하드디스크와 512MB 이상메모리공간권장 Database Oracle 9i 또는 10g viii Tmax FDL Reference Guide
관련안내서 안내서 Tmax Administration Guide Tmax Application Development Guide Tmax Reference Guide Tmax를이용하기위한환경설정을하는방법과시스템운영방식을기술한안내서이다. Tmax 애플리케이션프로그램개발에사용하는 API의개념및사용법과예제를기술한안내서이다. Tmax 애플리케이션프로그램개발에사용하는클라이언트와서버의연결, 통신에서사용하는함수에대한사용방법과예제를기술한안내서이다. 안내서에대하여 ix
연락처 Korea TmaxSoft Co., Ltd 263 BundangSquare (AK Plaza) 12th floor, Seohyeon-dong, Bundang-gu, Seongnam-si, Gyeonggi-do, 463-824 South Korea Tel: +82-31-8018-1000 Fax: +82-31-8018-1115 Email: info@tmax.co.kr Web (Korean): http://www.tmax.co.kr 기술지원 : http://technet.tmaxsoft.com USA TmaxSoft, Inc. 560 Sylvan Avenue Englewood Cliffs, NJ 07632 U.S.A Tel: 1-201-567-8266 Fax: 1-201-567-7339 Email: info@tmaxsoft.com Web (English): http://www.tmaxsoft.com Japan TmaxSoft Japan Co., Ltd. 5F Sanko Bldg, 3-12-16 Mita, Minato-Ku, Tokyo, 108-0073 Japan Tel: +81-3-5765-2550 Fax: +81-3-5765-2567 Email: info.jp@tmaxsoft.com Web (Japanese): http://www.tmaxsoft.co.jp x Tmax FDL Reference Guide
China TmaxSoft China Co., Ltd. Beijing Silver Tower, RM 1508, 2# North Rd Dong San Huan, Chaoyang District, Beijing, China, 100027 China Tel: +86-10-6410-6145~8 Fax: +86-10-6410-6144 Email: info.cn@tmaxsoft.com Web (Chinese): http://www.tmaxsoft.com.cn ASEAN Office TmaxSoft Pte. Ltd. 30 Cecil Street, Level 15 Unit 05 Prudential Tower, Singapore 049712 Singapore Tel: +65-6232-2889 Fax: +65-6232-2919 Email: info.asean@tmaxsoft.com Web (English): http://asean.tmaxsoft.com 안내서에대하여 xi
제 1 장소개 1.1. 개요 데이터형과그유형에할당되는메모리의양은각각의플랫폼마다다르다. 이러한메모리할당방법의차이로인해같은데이터형을사용하더라도통신후의데이터값은예상과다를수있다. 일반적으로서로다른플랫폼간에데이터값을동일하게인식하기위해서사용하는방법이데이터를문자열로변환하여통신하는것인데, 이러한방식을이용할경우추가로네트워크의부하가발생할수있다. Tmax는이러한통신상의문제를해결하기위해 FDL 방식을제공한다. FDL은필드버퍼라고하는저장구조를정의하고조작하는일련의 C 함수의집합이다. FDL 방식은식별자와식별자에대응하는필드버퍼에서의데이터값이한쌍으로존재하여서로다른종류의프로세스간에데이터를상호교환할수있도록구현된다. 따라서프로세스간에데이터교환은식별자 (identifier) 로하고, 실제값을처리할때에는그식별자에매핑되어있는필드버퍼의데이터값이호출된다. 용어정의 필드키 (fieldkey) 필드식별자 FDL 레코드나필드버퍼내에서독립적인데이터항목에대한태그이다. 필드버퍼 (fieldbuffer) 데이터와데이터를식별하는필드키를보관하는버퍼이다. 필드형 (fieldtype) 표준 C(ANSI C) 에서제공하는 short, integer, long, float, double, char 형등어느것이든가능하다. 또한 Tmax 에서는 string 과 carray 형을지원한다. 필드순번 필드를조작및처리하는데있어필드키버퍼내에서동일한필드키가여러번반복해서나타날경우 지정하는인덱스이다. 제 1 장소개 1
1.2. C 구조체와필드버퍼 레코드를표현하는방법은다양하다. 그중에서 C 언어에서제공되는데이터구조체를사용하여레코드 를표현하는방법과필드버퍼를사용하여레코드를표현하는방법을한다. C 구조체 다음은 C 언어로작성된프로그램에서학생의 ID, 이름, 주소, 나이및성별등의정보를포함하기위해서 구조체를사용하여필드를구성한예이다. struct student { long stid; char name[10]; char addr[40]; short age; char sex; ; stid는 long형의변수로선언되어있고, name과 addr은 carray형, age는 short 그리고 sex는 char형의변수로선언되어있다. 변수 x를지정하여구조체 student를가리키게한다면다음과같이표현될수있으며이를필드의주소로사용할수있다. x stid, x name, x addr, x age, x sex 구조체를다른프로세스에전달하려면해당구조체의필드중사용하지않는필드를포함하여모든필드의데이터를전달하고고정된길이의레코드로통신하여야한다. 또한구조체필드의이름이바뀌면해당구조체의필드를사용하는모든프로그램을재컴파일해야한다. 필드버퍼 C 구조체와다르게필드버퍼는레코드를필드로분할하고레코드의각필드간에연관성있는접근을제공하는데이터구조이다. 필드명은필드의데이터형과함께데이터가저장된필드키값을나타내는것으로 16자까지사용할수있다. 필드버퍼의주된장점은데이터의독립성이다. 해당필드를사용하는모든프로그램을재컴파일하지않고도필드의데이터형과길이를변경할수있을뿐만아니라각필드의길이를가변적으로사용할수있다. C 구조체에서는사용하지않는필드도함께전체구조체를전송해야하지만, 필드버퍼방식은실제사용하는필드의값만전송할수있다. 필드버퍼의각필드는데이터유형과유일한식별번호의조합으로구성되는데정수형의식별번호를필드키라고하며필드버퍼는필드키와데이터를한쌍으로저장한다. 2 Tmax FDL Reference Guide
1.3. FDL 테이블생성 필드테이블은 Tmax 에서제공하는 fdlc 유틸리티를이용하여일정한형식에맞춘일반텍스트파일을컴 파일하여만든다. 1.3.1. 명령어 다음은필드유형과유일한번호가정의된 <demo.f> 라는사용자정의파일의예로이파일의형식만 Tmax 에서사용할수있다. # name number type flags comments *base 100 INPUT 101 string - - OUTPUT 102 string - - SEQNO 201 string - - CORPNO 202 string - - COMPDATE 203 string - - TOTMON 204 long - - GUARAT 205 float - - GUAMON 206 float - - T_BITMAP 900 carray - - FILENAME 901 string - - NEWFILE 902 string - - *base 1000 data1 301 long - - data2 302 long - - data3 303 long - - sumdata 304 long - - data4 305 long - - 필드테이블의 'name', 'number', 'type' 은반드시정의해야한다. 필드값 name number 최대 48자이하로정의된필드이름으로 fbget_fldkey() 의로사용하여필드식별자를얻어오는기능을한다. type과조합되어필드식별자를만드는데사용되는번호이다. 제 1 장소개 3
필드값 number와 type을조합하여필드식별자를만드는데, type은유일할수없으므로반드시 number는모든필드테이블에서유일한번호이어야한다. 위의 demo.f 예제에서 *base 번호 는 base가쓰인이후의 number에대한 base가되는것으로실제로 INPUT의 number를 201이라고쓴것과같은역할을한다. 이 base 는또다른 base가나오기전까지유효하다. type 해당필드의필드형을설정한다. 사용할수있는필드형은 char, short, int, long, float, double, string, carray 로총 8 가지 이다. fdlc 필드키테이블을컴파일하는명령어이다. 필드키방식은클라이언트 / 서버간데이터통신에서구조체를전송하는방법처럼전체구조체의항목을전달하지않고필요한항목만전달한다. 항목전달을위해서는각각의항목을구별할수있는유일한키가있어야한다. fdlc는텍스트형태로정의된필드키테이블을컴파일하여필드키를생성하는명령어이다. 사용방법 $ fdlc ( -c ) {- a c d u [-f] [-h 헤더파일이름 ] { -i 필드키테이블파일이름 [-jc ji] [-o 결과물이름 ] [-u] [-p 패키지이름 ] [-x] [-V] 항목 [ -a ] [ -c ] [ -d ] [ -u ] [ -f ] 생성된이진형태의파일에, 텍스트로작성된필드키테이블을컴파일하여필요한부분을추가하는옵션이다. [-f] 옵션을사용하여대상파일을지정하며기본파일은 <tmax.fdl> 이다. 중복되는필드의경우에대해서는새로운값으로대체된다. 텍스트로작성된필드키테이블을컴파일하여이진형태의파일을만든다. 이미이진파일이존재하면새내용을대체한다. 이옵션은기본값이다. 생성된이진형태의파일에, 텍스트로작성된필드키테이블을컴파일하여필요한부분을삭제한다. [-f] 옵션을사용하여대상파일을지정하며기본파일은 <tmax.fdl> 이다. 생성된이진형태의파일에, 텍스트로작성된필드키테이블을컴파일하여필요한부분을정정하거나추가하는옵션이다. [-f] 옵션을사용하여대상파일을지정하며기본파일은 <tmax.fdl> 이다. 텍스트로작성된필드키테이블을컴파일하여필요한부분을추가, 수정삭제하는경우대상파일을지정하는옵션이다. 4 Tmax FDL Reference Guide
항목 [ -h 헤더파일이름 ] { -i 필드키테이블파일이름 [ -ji jc ] 헤더파일이름을다른이름으로변경하고자할때사용하는옵션이다. [-h] 옵션없이컴파일하면 fdl 헤더파일이름은 < 필드키테이블이름 _fdl.h> 이다. 클라이언트프로그램과서버프로그램에서사용될필드키테이블을정의한파일을지정한다. 필수옵션이며경로와함께지정할수있다. WebT에서사용되는것으로서생성될필드정의클래스의형태를지정한다. - ji : 인터페이스형태의필드정의클래스파일을생성한다. - jc : 클래스형태의필드키정의 java 파일을생성한다. [ -o 결과물 ] [ -p패키지이름 ] [ -x ] [-V] 컴파일결과물을다른이름으로변경하고자할때사용하는옵션이다. [-o] 옵션없이컴파일하면 fdl 파일의이름은 <tmax.fdl> 이다. WebT에서사용되는옵션으로서생성된필드정의클래스의패키지이름을주어진값으로설정한다. 반드시 [-a] 옵션과함께사용되어야하며이옵션이사용되는경우에는중복되는필드에대해서원본값을유지한다. 실행파일의버전을확인할수있다. 1.3.2. 예제 다음은 { -ji jc 옵션을설정해서생성한 Java 파일의예이다. <demo.f> #demo.f #name number type flags comments INPUT 101 string - - OUTPUT 102 string - - $> fdlc -c -i demo.f -ji -jc webtdemo 다음은생성된 <demo_fdl.java> 의내용이다. package webtdemo; public interface demo_fdl { public int INPUT = (469762149); /* number: 101 type: string */ public int OUTPUT = (469762150); /* number: 102 type: string */ 제 1 장소개 5
다음은현재디렉터리에있는 <demo.f> 필드키테이블파일을 fdlc 유틸리티로컴파일하는명령이다. 컴 파일후 <tmax.fdl> 과 <demo_fdl.h> 파일이생성된다. <demo_fdl.h> 는필드키가정의된헤더파일이다. $fdlc -c -i demo.f <demo.f> 를 fdlc 유틸리티를사용하여컴파일하면 <demo_fdl.h> 와 <tmax.fdl> 이라는파일이기본적으로 생성된다. 여기에서생성되는파일이름을변경하고싶다면다음과같이 -o 옵션을사용하여원하는파일 이름으로이진파일을생성할수있다. $fdlc -c -i demo.f -o filename.fdl 생성되는파일은클라이언트와서버가필드버퍼를사용하여통신하는경우참조 ( 프로그램과함께컴파일됨 ) 되어원하는데이터형의필드를사용할수있다. 필드버퍼를사용할때는반드시환경변수인 FDLFILE 에 <filename.fdl> 의위치를다음과같이정의한다. 여기에서 <filename.fdl> 이란, fdlc 유틸리티로생성된이진파일을의미한다. 기본값인 <tmax.fdl> 이나, -o 옵션을지정하여생성한이진파일을적는다. FDLFILE=/home/tmax/sample/fdl/filename.fdl 필드테이블을사용할때필드키는반드시도메인내에서유일해야한다. 참고 fdlc 유틸리티에대한자세한내용은 "Tmax Reference Guide" 를참고한다. 6 Tmax FDL Reference Guide
제 2 장 FDL 함수 본장에서는 FDL 에서제공하는함수에대한사용법과예제에대해한다. 다음은 FDL 함수의목록이다. 함수명 fballoc fbbufop fbbufop_proj fbcalcsize fbchg_tu fbchg_tut fbdelall fbdelall_tu fbdelete fbextread fbfldcount fbfprint fbfree fbftos fbget fbgetalloc_tu fbgetalloc_tut 필드버퍼의크기를계산하고메모리를할당하는함수이다. 필드버퍼내에서필드데이터의이동, 복사, 비교등을입력인 mode에따라처리하는함수이다. 특정필드버퍼의필드데이터를지정한필드버퍼에복사하는함수이다. 필드버퍼를메모리에할당받을때적정한메모리를할당받기위하여필드버퍼의크기를계산하는함수이다. 필드버퍼에서입력에서지정한필드키의필드순번의데이터를변경하는함수이다. 필드버퍼에서입력에서지정한필드키의필드순번의데이터를사용자가지정한타입에서필드키의타입으로변환하는함수이다. 필드버퍼에서특정필드키에저장되어있는전체데이터를삭제하는함수이다. 필드키배열에지정된모든필드키에저장되어있는모든필드데이터를삭제하는함수이다. 메모리에할당한필드버퍼에서지정한필드키의지정한필드순번에해당하는특정필드의데이터를삭제하는함수이다. 지정하는특정파일로부터필드키와그에해당하는값을읽어서메모리에할당한필드버퍼에저장하는함수이다. 필드버퍼에현재저장되어있는모든필드의수를반환하는함수이다. 필드버퍼에저장되어있는필드데이터를지정한파일스트림에출력하는함수이다. 할당된필드버퍼의메모리를해제하는함수이다. 필드버퍼에저장되어있는데이터를 matching되는구조체버퍼로전송하는함수이다. 필드버퍼에서지정한필드키에해당하는필드데이터를읽어오는함수이다. 지정한필드키의필드순번에해당하는필드데이터를읽어오는함수이다. 필드키의필드순번에해당하는필드데이터를지정한타입으로필요한길이만큼버퍼를새로할당받아저장하여반환하는함수이다. 제 2 장 FDL 함수 7
함수명 fbget_fbsize fbget_fldkey fbget_fldname fbget_fldno fbget_fldtype fbgetlast_tu fbget_strfldtype fbget_tu fbget_tut fbget_unused fbget_used fbgetf fbgetlen fbgetnth fbgetntht fbgetval fbgetvali fbgetval_last_tu fbgetvall_tu 할당된필드버퍼의크기를반환하는함수이다. 필드테이블 (FDLFILE에설정된 FDL 파일 ) 과관련하여지정한필드명과 matching 되는식별자를반환하는함수이다. 필드테이블 (FDLFILE에설정된 FDL 파일 ) 과관련하여지정한필드키와 matching 되는필드이름을반환하는함수이다. 필드테이블을생성하기위해필요한데이터중지정한필드키와 matching되는필드번호를반환하는함수이다. 지정한필드키의필드형을정수로반환하는함수이다. 필드버퍼에서지정한필드키에저장되어있는필드데이터중마지막순번의데이터를반환하는함수이다. 지정한필드키에저장될필드데이터의타입을문자열로반환하는함수이다. 필드버퍼에서지정한필드키의지정한필드순번에해당하는필드의데이터를읽어오는함수이다. 지정한필드키의필드순번에해당하는필드데이터를지정한타입으로변환하여반환하는함수이다. 필드버퍼중아직사용되지않은필드버퍼의크기를계산하여 Byte 단위로반환하는함수이다. 필드버퍼중현재사용중인필드버퍼의크기를계산하여 Byte 단위로반환하는함수이다. 필드버퍼에저장되어있는필드데이터를순차적으로읽어오는함수이다. 필드버퍼에지정한필드키의필드순번에해당하는필드데이터의길이를반환하는함수이다. 필드버퍼에서지정한필드키에저장되어있는필드데이터중지정한데이터가저장되어있는필드의개수을반환하는함수이다. 지정한필드키에저장되어있는필드데이터중지정한데이터가저장되어있는필드순번을반환하는함수이다. 필드버퍼에서지정한필드키에저장되어있는필드데이터중지정한필드순번에해당하는필드데이터를반환하는함수이다. 필드버퍼에서지정한필드키에저장되어있는데이터중지정한필드순번에해당하는필드데이터를정수로변환하여반환하는함수이다. 필드버퍼에서지정한필드키에저장되어있는필드데이터중마지막순번의데이터를반환하는함수이다. 필드버퍼에서지정한필드키의필드순번의데이터를 long형으로변환하여반환하는함수이다. 8 Tmax FDL Reference Guide
함수명 fbgetvals fbgetvals_tu fbgetvalt fbinit fbinsert fbisfbuf fbispres fbkeyoccur fbmake_fldkey fbnext_tu fbprint fbput fbputt fbrealloc fbread fbsnull fbstelinit fbstinit fbstof fbstrerror fbtypecvt 필드버퍼에서지정한필드키에저장되어있는필드데이터중지정한필드순번의필드데이터를그필드형에상관없이모두문자열로변환하여반환하는함수이다. 필드버퍼에서필드키에저장되어있는필드데이터를반환하는함수이다. 필드버퍼에서지정한필드키에저장되어있는필드데이터중지정한필드순번에해당하는필드데이터를지정한타입 (totype) 으로변환하여반환하는함수이다. 메모리에할당된필드버퍼를초기화하는함수이다. 메모리에할당된필드버퍼에지정한필드키의필드순번에해당되는데이터를반환하는함수이다. 지정한필드버퍼가메모리에할당받은유효한버퍼인지확인하는함수이다. 필드버퍼에지정한필드키의필드순번에필드데이터가존재하는지확인하는함수이다. 필드버퍼에서지정한필드키에저장되어있는모든필드의개수를반환하는함수이다. 새로운필드키를동적으로생성하는함수이다. 필드버퍼에서다음필드키와필드데이터를반환하는함수이다. 현재필드버퍼의내용을정해진형식에따라표준출력하는함수이다. 메모리에할당된필드버퍼에새로운필드를추가하는함수이다. 메모리에할당된필드버퍼에새로운필드를추가하는함수이다. fbput 함수와달리사용자가데이터형을변환할수있다. 메모리에할당된필드버퍼의크기가부족할경우메모리의크기를늘려서다시할당하는함수이다. 지정한파일스트림으로부터데이터를읽어서메모리에할당된필드버퍼에필드데이터로로드하는함수이다. 필드버퍼에서지정한필드키의필드순번과 mapping되는구조체의멤버변수가 NULL인지확인하는함수이다. 입력에서지정한구조체의멤버변수를개별적으로 NULL로초기화하는함수이다. 입력에서지정한구조체변수를초기화하는함수이다. C 구조체버퍼 (stname) 에저장되어있는데이터를 matching되는필드버퍼로전송하는함수이다. 필드버퍼와관련된 API 함수를수행할때발생하는에러번호에해당하는내용을문자열로반환하는함수이다. 지정한데이터형의필드데이터를지정한형으로변환하여반환하는함수이다. 제 2 장 FDL 함수 9
함수명 fbupdate fbwrite getfberrno getfberror 필드버퍼에입력에지정한필드키의필드순번위치로지정한데이터를이미저장되어있는필드데이터와변경하는함수이다. 메모리에할당된필드버퍼의내용을 iop에지정한파일스트림에저장하는함수이다. 필드버퍼와관련된 API 함수를수행하는도중에러가발생하였을경우에러번호를반환하는함수이다. 이함수에서반환하는에러번호에대한에러메시지를알고싶을경우이함수를입력로하여 fbstrerror() 를이용하면된다. getfberrno() 는입력가없다. 필드버퍼와관련된 API 함수를수행하는도중에러가발생하였을경우에러번호를반환하는함수이다. 2.1. fballoc 필드버퍼의크기를계산하고메모리를할당하는함수이다. f~(), t~(), t~() 를조합한형태이다. 함수에서사용할필드의개수와데이터의길이를로전달하면필드버퍼의크기를계산하고계산된크기만큼의필드버퍼를메모리에할당한다. ( 할당되는메모리의크기 =count*sizeof(int) + datalen + 필드키헤더크기 ) 로전달된값으로계산한결과가 1024Byte보다작은경우에는기본값으로 1024Byte가할당된다. 이함수를사용하면사용할크기만큼만메모리를할당받으므로메모리의낭비를막을수있다. 이함수로할당받은버퍼를사용한후에는반드시 fbfree() 를사용하여해제해야한다. 프로토타입 #include <fbuf.h> #include <atmi.h> FBUF *fballoc(int count, FLDLEN datalen) count datalen 데이터를저장할필드의개수를지정한다. 필드버퍼에저장될데이터의전체크기를 Byte 단위로지정한다. 반환값 반환값 메모리포인터 NULL 함수호출에성공한경우이다. 함수호출에실패한경우이다. 10 Tmax FDL Reference Guide
반환값 (fberror 에에러번호가설정된다.) 오류 fberrno 에는다음값이설정된다. 에러코드 FBEMALLOC 시스템에러로, 필드버퍼를메모리에할당하는것에실패한경우이다. 예제 #include <fbuf.h> #include <atmi.h>... FBUF *fbuf; if ((fbuf = fballoc(100, 1000)) == NULL) { printf( fballoc failed, errno = %d\n, fberror);... /* result allocated size : 1408 bytes */ 필드버퍼를메모리에할당하는다른방법으로 tpalloc() 을사용한다. 다음과같이 tpalloc() 의세번째에 0 을입력하면기본값인 1024Byte 가할당된다. 에 1024Byte 보다작은수를입력해도기본값인 1024Byte 가할당된다. FBUF *fbuf; if ((fbuf = (FBUF *)tpalloc( FIELD, NULL, 0)) == NULL) { printf( fballoc failed, errno = %d\n, fberror);... /* result allocated size : 1024 bytes */ 관련함수 fbisfbuf(), fbcalcsize(), tpalloc(), fbinit() 2.2. fbbufop 필드버퍼내에서필드데이터의이동, 복사, 비교등을입력인 mode에따라처리하는함수이다. fbbufop() 의중 dest와 src 필드버퍼는같은버퍼를사용할수없고반드시다른메모리에할당된버퍼를사용해야한다. 프로토타입 제 2 장 FDL 함수 11
#include <fbuf.h> #include <atmi.h> int fbbufop(fbuf *dest, FBUF *src, int mode) dest src mode fballoc() 또는 tpalloc() 으로메모리에할당된필드버퍼이다. src에있는내용을 dest에 mode에따라저장한다. fballoc() 또는 tpalloc() 으로메모리에할당된필드버퍼이다. 변경될값을가진버퍼이다. Process mode 중하나를설정한다. 다음은 Process mode 에대한이다. Process mode FBMOVE FBCOPY FBCOMP src 필드버퍼의내용을 dest 필드버퍼로복사한다. 이모드에서는 dest 에 string 또는 carray 버퍼를사용할수있다. 단 string 또는 carray 버퍼를사용하려면 dest 를사용할때필드버퍼 (FBUF *) 로 type casting을한다. src 필드버퍼의내용을 dest 필드버퍼로복사한다. 이모드에서는반드시 dest, src 가모두필드버퍼여야한다. - 0 또는 1 : dest와 src 필드버퍼의내용을비교하여 matching되는경우이다. 0 을반환하는경우는 2개의필드버퍼의 value, 구조, 개수, 순서등이완전히일치한다. 1을반환하는경우는구조, 개수, 순서등이모두일치하지만 value는일치하지않는다. - -1 : dest 와 src 필드버퍼의내용을비교하여 matching 되지않는경우이다. FBCONCAT FBJOIN FBOJOIN FBUPDATE src 필드버퍼의내용을 dest 필드버퍼에덧붙이는경우로 dest 필드버퍼에기존데이터와 src 필드버퍼의내용이저장된다. 필드키와필드순번이 matching되는필드에한해해당데이터를 src 필드버퍼에서 dest 필드버퍼에복사한다. 단 dest 필드버퍼에기존에존재하던데이터는모두사라지므로주의한다. FBJOIN 모드와유사하게동작하지만함수를수행하고난후필드키와필드순번이 matching되지않는필드의데이터는수행하기전의상태로보존된다. FBOJOIN 모드와유사하게동작한다. 필드키와필드순번이 matching되는필드의데이터를 src 필드버퍼에서 dest 필드버퍼에복사하는것은 FBOJOIN 모드와유사하다. 다만 FBUPDATE 모드는필드키와필드순번이 matching되지않는 src 필드버퍼에있는필드의데이터까지도 dest 필드버퍼에복사된다. 12 Tmax FDL Reference Guide
반환값 반환값 1-1 함수호출에성공한경우이다. 함수호출에실패한경우이다. (fberror 에에러번호가설정된다.) 오류 fberrno 에는다음값중하나가설정된다. 에러코드 FBENOSPACE FBEMALLOC FBEINVAL 필드버퍼에데이터를저장하거나복사할공간이부족할경우 fberror는 FBENOSPACE로설정된다. 시스템에러로, 필드버퍼를메모리에할당하는것을실패할경우 fberror는 FBEMALLOC으로설정된다. 입력로지정된값중유효하지않은가있을경우를의미한다. 예제 #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 : "); 제 2 장 FDL 함수 13
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); 14 Tmax FDL Reference Guide
fbprint(destbuf); break; /* destbuf : 1111, 2222 */ /*FBOJOIN mode */ case 6: iret=fbbufop(destbuf, srcbuf, FBOJOIN); fbprint(destbuf); break; /* destbuf : 1111, 7777, 2222, 8888 */ /*FBUPDATE mode */ case 7: iret=fbbufop(destbuf, srcbuf, FBUPDATE); fbprint(destbuf); break; /* destbuf : 1111, 7777, 2222, 8888, 3333 */ fbfree(destbuf); fbfree(srcbuf); 관련함수 fbbufop_proj() 2.3. fbbufop_proj 특정필드버퍼의필드데이터를지정한필드버퍼에복사하는함수이다. src 필드버퍼의지정한필드의필드데이터를 dest 필드버퍼에복사한다. 함수의 dest와 src 필드버퍼는같은버퍼를사용할수없고반드시따로메모리에할당된다른버퍼를사용해야한다. 프로토타입 #include <fbuf.h> #include <atmi.h> int fbbufop_proj(fbuf *dest, FBUF *src, FLDKEY *fldkey) 제 2 장 FDL 함수 15
dest src fballoc() 또는 tpalloc() 으로메모리에할당된필드버퍼이다. src에있는내용을 dest에 mode에따라저장한다. fballoc() 또는 tpalloc() 으로메모리에할당된필드버퍼이다. 변경될값을가진버퍼이다. src 를 NULL 로설정하면 dest 필드버퍼자체에서지정된필드의데이터가복사 된다. fldkey 복사하려는필드를배열형태로지정할수있다. 배열의마지막에는반드시 0 을 지정해야한다. fldkey 포인터를배열로선언한후그배열에복사하려는필드를 2 개이상지정 하면 src 필드버퍼에서 dest 필드버퍼로 fldkey 에지정한필드의데이터만복사 된다. 반환값 반환값 1-1 함수호출에성공한경우이다. 함수호출에실패한경우이다. (fberror 에에러번호가설정된다.) 오류 fberrno 에는다음값중하나가설정된다. 에러코드 FBEMALLOC FBEINVAL 시스템에러로필드버퍼를메모리에할당하지못했을경우 fberror는 FBEMAL LOC으로설정된다. 입력로지정된값중유효하지않은가있음을의미한다. 예를들어 fbuf가 NULL일경우해당에러가발생한다. 예제 #include demo_fdl.h... int iret, i; FBUF *destbuf, *srcbuf; FLDKEY fkey[4]; 16 Tmax FDL Reference Guide
... fbput(destbuf, INPUT, "aaa", 0); fbput(destbuf, OUTPUT, "bbb", 0); fbput(destbuf, SEQNO, "ccc", 0); fbput(srcbuf, TEST1, "AAA", 0); fbput(srcbuf, TEST2, "BBB", 0); fbput(srcbuf, TEST3, "CCC", 0); fkey[0]=fbget_fldkey("input"); fkey[1]=fbget_fldkey("seqno"); fkey[2]=0; /* The last entry in the array must be 0 */ ret=fbbufop_proj(destbuf, NULL, fkey); /* destbuf : aaa, ccc */ fkey[0]=fbget_fldkey("test3"); fkey[1]=fbget_fldkey("test1"); fkey[2]=fbget_fldkey("test2"); fkey[3]=0; /* The last entry in the array must be 0 */ ret=fbbufop_proj(destbuf, srcbuf, fkey); /* destbuf : AAA, BBB, CCC */ /* fkey array is sorted if the entries are not in numeric order */ 관련함수 fbbufop() 2.4. fbcalcsize fballoc() 또는 tpalloc() 으로필드버퍼를메모리에할당받을때필드버퍼의크기를계산하는함수이다. 사용할필드의개수와총데이터의길이 (Byte 단위 ) 를로전달하면필드버퍼의크기를계산한다. 프로토타입 #include <fbuf.h> #include <atmi.h> long fbcalcsize(int count, FLDLEN datalen) 제 2 장 FDL 함수 17
count datalen 데이터를저장할필드의개수를의미한다. 필드버퍼의전체데이터크기를 Byte 단위로지정한다. 반환값 주어진입력 (count, datalen) 에근거하여필드버퍼의크기를 Byte 단위로반환한다. 예제 #include demo_fdl.h FBUF *fbuf; long size; size = fbcalcsize(100, 1000); printf( size : [%ld]\n, size); /* output : size : [1408] */ if ((fbuf = (FBUF *)tpalloc( FIELD, NULL, size)) == NULL) { printf( tpalloc failed, errno = %d\n, tperrno);... /* fbuf is set in 1024 bytes by default if size is less than 1024*/... 관련함수 fballoc(), tpalloc() 2.5. fbchg_tu alloc() 또는 tpalloc() 으로메모리에할당된필드버퍼에서입력에서지정한필드키의필드순번의데이터를변경하는함수이다. 입력에서지정한필드순번 (nth) 에기존의데이터가없을경우에는필드순번 (nth) 에주어진데이터가자동으로필드로추가된다. 그러므로이함수를이용해서필드데이터를변경할때는관계가없지만, 필드순번을추가할경우에는처리속도가저하되므로주의한다. 프로토타입 #include <fbuf.h> #include <atmi.h> 18 Tmax FDL Reference Guide
int fbchg_tu(fbuf *fbuf, FLDKEY fldkey, int nth, char *value, FLDLEN fldlen) fbuf fldkey nth value fballoc() 또는 tpalloc() 으로메모리에할당된필드버퍼이다. 필드버퍼에변경할필드의필드키이다. fldkey에서지정한필드키의데이터중변경할필드순번을의미한다. (char *) 형이므로변경하려는필드키가정수형이나실수형인경우에는반드시 (char *) 형으로 type casting을한다. value 에 NULL 이설정된경우해당필드키를지운다. fldlen 일반적으로는필드의길이를지정하지않아도된다. 필드키의타입이 FB_CARRAY 인경우에는반드시필드데이터의길이를 Byte 단위로지정한다. 반환값 반환값 1-1 함수호출에성공한경우이다. 함수호출에실패한경우이다. (fberror 에에러번호가설정된다.) 오류 fberrno 에는다음값중하나가설정된다. 에러코드 FBENOENT FBENOSPACE FBEINVAL 지정한필드키가 FDLFILE( 환경변수 : 기본값은 <tmax.fdl>) 에정의되지않아서필드버퍼에서사용할수없는경우 fberror는 FBENOENT로설정된다. 필드버퍼에데이터를저장하거나복사할공간이부족할경우 fberror는 FBENOSPACE로설정된다. 입력로지정된값중유효하지않은가있음을의미한다. 예제 #include demo_fdl.h... 제 2 장 FDL 함수 19
long rcvlen, ret; char buffer[100]; FLDLEN fldlen; FBUF *fbuf; if ((fbuf = fballoc(10, 100)) == NULL) { printf( fballoc failed, errno = %d\n, tperrno);... fbput(fbuf, INPUT, aaaa, 0); /* 영번째순번에는 aaaa가있음. */ ret = fbchg_tu(fbuf, INPUT, 1, bbbb, 4); /* 첫번째순번에 bbbb를추가함. */ if (ret < 0) { error processing... ret = fbget_tu(fbuf, INPUT, 1, buffer, &fldlen); /* 첫번째순번에있는데이터를 buffer에넣음. */ if (ret < 0) { error processing... printf( Field Data: [%s]\n, buffer); /* output : Field Data: [bbbb] */ fbprint(fbuf); /* output : aaaa, bbbb */... 관련함수 fbbufop_proj() 2.6. fbchg_tut fballoc() 또는 tpalloc() 으로메모리에할당된필드버퍼에서입력에서지정한필드키의필드순번의데이터를사용자가지정한타입에서필드키의타입으로변환한후변경하는함수이다. 이함수는 fbchg_tu() 와유사하지만데이터형이변경할필드키의필드형과다른경우, 필드데이터를변경하기전에먼저저장하려는데이터형을필드키의타입으로변환한후필드데이터를변경하여저장할수있다는점이다르다. 입력에서지정한필드순번에기존에데이터가없을경우에는필드순번이주어진데이터로자동적으로필드가추가된다. 그러므로이함수를이용해서필드순번을추가할경우에는처리속도가저하되므로주의한다. 프로토타입 20 Tmax FDL Reference Guide
#include <fbuf.h> #include <atmi.h> int fbchg_tut(fbuf *fbuf, FLDKEY fldkey, int nth, char *value, FLDLEN fldlen, int type) fbuf fldkey nth value fldlen type fballoc() 또는 tpalloc() 으로메모리에할당된필드버퍼이다. 필드버퍼에변경할필드의필드키이다. fldkey에서지정한필드키의데이터중변경하려는필드순번을의미한다. 가 char * 형이므로변경하려는필드키가정수형이나실수형인경우에는반드시 char * 형으로 type casting을한다. 일반적으로는필드의길이를지정하지않아도된다. 그러나필드키의타입이 FB_CARRAY인경우에는반드시필드데이터의길이를 Byte 단위로지정한다. 사용자가지정한데이터형을의미한다. type에지정할수있는값은다음과같다. - FB_CARRAY - FB_SHORT - FB_DOUBLE - FB_LONG - FB_STRING - FB_CHAR - FB_FLOAT - FB_INT 반환값 반환값 1-1 함수호출에성공한경우이다. 함수호출에실패한경우이다. (fberror 에에러번호가설정된다.) 제 2 장 FDL 함수 21
오류 fberrno 에는다음값중하나가설정된다. 에러코드 FBENOENT FBENOSPACE FBEINVAL 지정한필드키가 FDLFILE( 환경변수 : 기본값은 <tmax.fdl>) 에정의되지않아서필드버퍼에서사용할수없는경우 fberror는 FBENOENT로설정된다. 필드버퍼에데이터를저장하거나복사할공간이부족할경우 fberror는 FBENOSPACE로설정된다. 입력로지정된값중유효하지않은가있을경우를의미한다. (FB_CARRAY 타입인경우데이터길이를지정하지않으면이코드가설정된 다.) FBETYPE FBEBADFLD Tmax 에서지원하지않는타입이사용되었다. 잘못된필드를사용하였다. 예제 #include demo_fdl.h long ret, lval=100000; FBUF *fbuf; fbputt(fbuf, INPUT, "aaaa", 0, FB_STRING); fbchg_tut(fbuf, INPUT, 0, (char *)&lval, 0, FB_LONG); printf("1st occurrence of INPUT field is changed as follows : \n"); fbprint(fbuf);... /* fkey = 469762149, fname = INPUT, type = string, value = 100000 */ 관련함수 fbput(), fbchg_tu(), fbget_tu(), fbgetval(), fbgetval_last_tu(), fbgetvals_tu(), fbgetvall_tu() 2.7. fbdelall 필드버퍼에서특정필드키에저장되어있는전체데이터를삭제하는함수이다. 프로토타입 #include <fbuf.h> #include <atmi.h> 22 Tmax FDL Reference Guide
int fbdelall(fbuf *fbuf, FLDKEY fldkey) fbuf fldkey fballoc() 또는 tpalloc() 으로메모리에할당된필드버퍼이다. 필드버퍼에서삭제할필드키이다. fldkey 에서지정할필드키는반드시이함수를호출하기이전에지정한필드버 퍼에필드순번의데이터가 1 개이상저장되어있어야한다. 그렇지않으면 1 을 반환하며 fberror 는 FBENOENT 로설정된다. 반환값 반환값 삭제한필드의개수 -1 함수호출에성공한경우이다. 함수수행중필드버퍼에지정한필드키가존재하지않아에러가발생한경우이다. (fberror 에상황에해당하는값이설정된다.) 오류 fberrno 에는다음값중하나가설정된다. 에러코드 FBENOENT FBEINVAL 지정한필드키가 FDLFILE( 환경변수 : 기본값은 <tmax.fdl>) 에정의되지않아서필드버퍼에서사용할수없는경우 fberror는 FBENOENT로설정된다. 입력로지정된값중유효하지않은가있음을의미한다. 예제 #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); 제 2 장 FDL 함수 23
fbput(fbuf, INPUT, bbbb, 0); fbput(fbuf, INPUT, cccc, 0); ret = fbdelall(fbuf, INPUT); printf( Delete Field Number: [%d]\n, ret); /* output: Delete Field Number: [3] */... 관련함수 fbput(), fbget(), fbdelete(), fbdelall_tu() 2.8. fbdelall_tu 필드키배열에지정된모든필드키에저장되어있는모든필드데이터를삭제하는함수이다. 중 fldkey에설정된데이터를삭제한다. 여러개의필드키를동시에삭제할경우에는 fbdelall_tu() 를한번호출하는것이 fbdelall() 을여러번호출하는것보다효율적이다. 프로토타입 #include <fbuf.h> #include <atmi.h> int fbdelall_tu(fbuf *fbuf, FLDKEY *fldkey) fbuf fldkey fballoc() 또는 tpalloc() 으로메모리에할당된필드버퍼이다. 필드버퍼에서삭제할필드키를 2 개이상지정한필드키배열이다. fieldkey 에서지정할필드키포인터는배열로선언하여삭제하려는필드키를명 시한다. 필드키배열에삭제할필드키를지정한후마지막인덱스에는반드시 0 을지정한다. 반환값 반환값 삭제한필드의개수 함수호출에성공한경우이다. 오류 fberrno 에는다음값중하나가설정된다. 24 Tmax FDL Reference Guide
에러코드 FBENOENT FBEINVAL fldkey 배열에서마지막에지정된필드키에해당하는데이터가없는경우 fberror 는 FBENOENT로설정된다. 입력로지정된값중유효하지않은가있음을의미한다. 예제 #include demo_fdl.h FLDKEY fkey[3]; if ((fbuf = fballoc(10, 100)) == NULL) { printf( fballoc failed, errno = %d\n, fberror);... fbput(fbuf, INPUT, aaaa, 0); fbput(fbuf, INPUT, bbbb, 0); fbput(fbuf, OUTPUT, cccc, 0); fkey[0] = INPUT; fkey[1] = OUTPUT; fkey[2] = 0; /* The last entry in the array must be 0 */ ret = fbdelall_tu(fbuf, fkey); printf( The Number of deleted fields: [%d]\n, ret); /* output: Number of deleted fields: [3] */... 관련함수 fbput(), fbget(), fbdelete(), fbdelall() 2.9. fbdelete fballoc() 또는 tpalloc() 으로메모리에할당한필드버퍼에서지정한필드키의지정한필드순번에해당하는특정필드의데이터를삭제하는함수이다. fbchg_tu() 는지정한필드순번에해당하는필드가존재하지않을경우자동으로필드를추가하지만 fb delete() 는지정한필드순번에해당하는필드가필드버퍼에존재하지않을경우에러를발생시키며 fberror 는 FBENOENT로설정된다. 그러므로이함수에서는반드시함수를수행하기전에필드버퍼에존재하는필드를로지정해야한다. 프로토타입 제 2 장 FDL 함수 25
#include <fbuf.h> #include <atmi.h> int fbdelete(fbuf *fbuf, FLDKEY fldkey, int nth) fbuf fldkey nth fballoc() 또는 tpalloc() 으로메모리에할당된필드버퍼이다. 필드버퍼에서삭제하려는필드키를의미한다. 삭제하려는특정필드순번을의미한다. 반환값 반환값 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) { 26 Tmax FDL Reference Guide
printf( fballoc failed, errno = %d\n, fberror);... fbput(fbuf, INPUT, aaaa, 0); /* fbuf의 0번째데이터는 aaaa 이다. */ fbput(fbuf, INPUT, bbbb, 0); /* fbuf의 1번째데이터는 bbbb 이다. */ fbput(fbuf, INPUT, cccc, 0); /* fbuf의 2번째데이터는 cccc 이다. */ fbdelete(fbuf, INPUT, 1); /* fbuf의 1번째데이터인 bbbb 를삭제한다. */ ret=fbdelete(fbuf, INPUT, 3); if(ret<0){ printf("fbdelete error : %s\n", fbstrerror(fberror)); /* fbuf의 3번째순번에는데이터가없기때문에 fbdelete error : FBENOENT (not found) 가출력된다. */ fbget(fbuf, INPUT, buffer, 0); printf( INPUT: [%s]\n, buffer); /* output: INPUT: [aaaa] */ fbget(fbuf, INPUT, buffer, 0); printf( INPUT: [%s]\n, buffer); /* output: INPUT: [cccc] */... 관련함수 fbput(), fbget(), fbdelall(), fbdelall_tu() 2.10. fbextread iop에서지정하는특정파일로부터필드키와그에해당하는값을읽어서 fballoc() 또는 tpalloc() 으로메모리에할당한필드버퍼에저장하는함수이다. 내부적으로 flag도사용하지않은경우 fbput() 을호출하고, flag가 + 인경우 fbchg_tu() 를, -인경우 fbdelete() 를, = 인경우 fbget_tu() 를호출한후 fbchg_tu() 를호출한다. 따라서이러한함수에서나타나는에러와동일한에러가 fbextread() 에서발생할수있다. 프로토타입 #include <stdio.h> #include <usrinc/fbuf.h> int fbextread(fbuf *fbuf, FILE *iop) fbuf fballoc() 또는 tpalloc() 으로메모리에할당된필드버퍼이다. 제 2 장 FDL 함수 27
iop 읽어올필드키와그에해당하는값이저장되어있는파일의포인터이다. flag는 demo.f 파일의 flags에 -, +, = 로설정된내용이다. 필드키와값이저장되어있는파일의형식은다음과같다. 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 flag 에는 4 가지가있는데각 flag 의의미는다음과같다. flag + - = # 없음 필드버퍼에서필드키에해당하는값을 0번째순번에저장한다필드버퍼에서해당되는필드키의 0번째순번에해당하는데이터를삭제한다. 필드버퍼에서 1번째필드이름 (field_name1) 에해당하는데이터중 0번째순번의필드값을 2번째필드이름 (field_name2) 에해당하는데이터중 0번째순번의필드값으로교체한다. 주석 (comment) 으로처리한다. 필드버퍼에새로운필드를추가한다. 반환값 반환값 1-1 함수호출에성공한경우이다. 함수호출에실패한경우이다. (fberror 에에러번호가설정된다.) 오류 fberrno 에는다음값이설정된다. 28 Tmax FDL Reference Guide
에러코드 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); 제 2 장 FDL 함수 29
printf("\n\n<after Fextread>-----------------\n"); fbprint(fbuf); tpfree((char *)fbuf); + flag 를이용하여 STSTLIN 필드키의 0 번째값을 statlin0_ 으로변경한다. 파일 1 +STATLIN statlin0_ 결과 1 user_input, user_output, statlin0_, user_statlin fbuf 버퍼에필드값을추가한다. 파일 2 OUTPUT INPUT INPUT OUTPUT0_ INPUT0_ INPUT1_ 결과 2 user_input, user_output, user_statlin, OUTPUT0_, INPUT0_, INPUT1_ = flag 를이용하여 INPUT 값을 OUTPUT 에저장한다. 파일 3 =OUTPUT INPUT 결과 3 user_input, user_input, user_statlin - flag 를이용하여 INPUT 필드키를삭제한다. 파일 4 INPUT 결과 4 30 Tmax FDL Reference Guide
user_output, user_statlin 관련함수 fbput(), fbchg_tu(), fbdelete(), fbget_tu() 2.11. fbfldcount fballoc() 또는 tpalloc() 으로메모리에할당한필드버퍼에현재저장되어있는모든필드의수를반환하는함수이다. fbfldcount() 는필드버퍼내에필드데이터가몇개저장되어있는지계산한다. 이미구현되어있는여러 API 함수를이용하여필드버퍼에몇개의필드가실질적으로저장되어있는지도확인할수있다. 하나의필드키에순번을달리하여여러데이터가저장되어있더라도 fbfldcount() 는별개의필드로인식한다. 프로토타입 #include <fbuf.h> #include <atmi.h> int fbfldcount(fbuf *fbuf) fbuf fballoc() 또는 tpalloc() 으로메모리에할당된필드버퍼이다. 반환값 반환값 필드의수 함수호출에성공한경우이다. ( 필드버퍼에현재저장되어있는필드의수를반환 ) 0 함수호출에실패한경우, 필드버퍼에저장되어있는필드가없는경우이다. (fberror 에에러번호가설정된다.) 오류 fberrno 에는다음값이설정된다. 제 2 장 FDL 함수 31
에러코드 FBEINVAL 입력로지정된값중유효하지않은가있음을의미한다. 예를 들면 fbuf 가 NULL 로지정된경우해당에러가발생한다. 예제 #include demo_fdl.h int cnt; FBUF *fbuf; if ((fbuf = fballoc(10, 100)) == NULL) { printf( fballoc failed, errno = %d\n, fberror);... fbput(fbuf, INPUT, aaaa, 0); fbput(fbuf, INPUT, bbbb, 0); fbput(fbuf, OUTPUT, cccc, 0); cnt = fbfldcount(fbuf); printf( Field Count: [%d]\n, cnt); /* output: Field Count: [3] */ 관련함수 fbgetnth(), fbkeyoccur() 2.12. fbfprint 필드버퍼에저장되어있는필드데이터를지정한파일스트림에출력하는함수이다. 지정한파일은텍스트파일이고, 출력형식은 fbprint() 의출력형식과같다. 프로토타입 #include <fbuf.h> #include <atmi.h> int fbfprint(fbuf *fbuf, FILE *iop) fbuf fballoc() 또는 tpalloc() 으로메모리에할당된필드버퍼이다. 32 Tmax FDL Reference Guide
iop 출력데이터를저장할파일스트림을의미한다. 반환값 반환값 1-1 함수호출에성공한경우이다. 함수호출에실패한경우이다. (fberror 에에러번호가설정된다.) 오류 fberrno 에는다음값중하나가설정된다. 에러코드 FBEBADFB FBEINVAL 필드버퍼가유효하지않다. 현재의필드버퍼이외의다른정상적으로메모리에할당된버퍼를사용해야한다. 입력로지정된값중유효하지않은가있음을의미한다. 예제 #include demo_fdl.h FILE *iop; FBUF *fbuf; if ((fbuf = fballoc(10, 100)) == NULL) { printf( fballoc failed, errno = %d\n, fberror);... iop = fopen( sample.text, w ); fbput(fbuf, INPUT, 5555, 0); fbput(fbuf, INPUT, 7777, 0); fbfprint(fbuf, iop); fclose(iop); 관련함수 fbprint() 제 2 장 FDL 함수 33
2.13. fbfree 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);... 34 Tmax FDL Reference Guide
fbput(fbuf, INPUT, aaaa, 0); ret = fbfree(fbuf); printf( fbfree, ret = %d\n, ret); /* output : fbfree, ret = 1 */ fbput(fbuf, INPUT, bbbb, 0); fbprint(fbuf); /* an error occurs since memory was not allocated. */ 관련함수 fbcalcsize(), tpalloc(), fballoc(), fbinit() 2.14. fbftos 필드버퍼에저장되어있는데이터를 matching되는구조체버퍼로전송하는함수이다. 프로토타입 #include <fbuf.h> #include <atmi.h> int fbftos(fbuf *fbuf, char *cstruct, char *stname) fbuf cstruct stname fballoc() 또는 tpalloc() 으로메모리에할당된필드버퍼이다. 사용할구조체타입의변수를 (char *) 형으로 type casting하여사용한다. VIEW에서정의한구조체의이름을문자열로지정한다. 반환값 반환값 1-1 필드버퍼에저장되어있는데이터를성공적으로 C 구조체에전송했을경우이다. 필드버퍼에저장되어있는데이터를성공적으로 C 구조체에전송하지못한경우이다. (fberror 에에러번호가설정된다.) 오류 제 2 장 FDL 함수 35
fberrno 에다음값중하나가설정된다. 에러코드 FBENOENT FBENOSPACE FBEINVAL FBEBADFLD FBEBADSTRUCT 지정한필드키가 FDLFILE( 환경변수 : 기본값은 <tmax.fdl>) 에정의되지않아서필드버퍼에서사용할수없는경우 fberror는 FBENOENT로설정된다. 필드버퍼에데이터를저장하거나복사할공간이부족할경우 fberror는 FBENOSPACE로설정된다. 입력로지정된값중유효하지않은가있음을의미한다. 유효하지않은필드키가사용된경우이다. 일반적으로필드키가 fdlc 유틸리티를사용하여컴파일되지않은필드키가사용되었을경우 fberror는 FBEBADFLD로설정된다. 유효하지않은구조체가사용된경우이다. 일반적으로 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); 36 Tmax FDL Reference Guide
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 count size null 구조체안의멤버변수의데이터형을의미한다. 멤버변수의이름을의미한다. 정한멤버변수와 mapping되는필드키를의미한다. ( 이필드키는 ***.f에정의되어있어야한다.) 구조체에서저장할수있는최대의필드순번을의미한다. string형인경우배열의크기를의미한다. 초기화될때의값을나타내는것으로필드버퍼에값이저장되지않은상태에서필드데이터를 C 구조체의버퍼로전송할경우기본적으로 C 구조체에복사되는값이다. 만약에 null 항목에값을지정하지않고필드버퍼에도값이저장되지않은경우각자료형에맞는기본값이 C 구조체에저장된다. string, carray, char 형의기본값은 NULL 이며 int, short, long 형의기본값은 0, float, double 형의기본값 은 0.0 이다. 제 2 장 FDL 함수 37
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> 파일에있으므로이정보를사용해야하는서버프로그램을컴파일할때 <de mo_sdl.c> 파일과함께컴파일이되어야한다. 서버프로그램내에서는필요한정보를컴파일시에모두가지므로 <tmax.sdl> 파일이필요없다. 필드버퍼에서구조체로데이터를전송할때필드키와구조체의멤버변수의데이터와 mapping되지않을경우에는필드키가무시된다. 2.15. fbget 필드버퍼에서지정한필드키에해당하는필드데이터를읽어오는함수이다. 데이터를필드버퍼에서읽어오는함수로동일한필드키로저장된데이터는순차적으로읽어서 loc에저장한다. 즉수동으로순번을증가시키지않고저장된필드순번만큼이함수를호출하면함수내에서자동으로필드순번을증가시켜서다음데이터를읽을준비가되므로해당필드키내에저장되어있는모든필드데이터를읽어올수있다. fbget() 을사용할경우에한번읽어온데이터는다시읽을수없으므로주의한다. 그리고저장된필드순번보다더많이 fbget 함수를호출하면마지막필드순번의필드데이터가계속반환된다. 프로토타입 #include <fbuf.h> #include <atmi.h> int fbget(fbuf *fbuf, FLDKEY fldkey, char *loc, FLDLEN *fldlen) 38 Tmax FDL Reference Guide
fbuf fldkey loc fldlen fballoc() 또는 tpalloc() 으로메모리에할당된필드버퍼이다. 필드버퍼에서읽어오려는필드키를의미한다. 순차적으로읽어온필드데이터를가리키는포인터이다. 필드키가정수형또는실수형인경우에는반드시각타입에맞는변수를사용하되앞에서기술한함수의프로토타입에맞게 type casting을한다. 읽어온데이터의길이를의미한다. 반환값 반환값 1-1 지정한필드키의필드데이터를정상적으로찾은경우이다. 지정한필드키를필드버퍼에서찾지못한경우이다. (fberror 에에러번호가설정된다.) 오류 fberrno 에다음값중하나가설정된다. 에러코드 FBENOENT FBEINVAL FBETYPE 지정한필드키가 FDLFILE( 환경변수 : 기본값은 <tmax.fdl>) 에정의되지않아서필드버퍼에서사용할수없는경우 fberror는 FBENOENT로설정된다. 입력로지정된값중유효하지않은가있음을의미한다. (CARRAY형인경우 fldlen을지정하지않은경우도해당된다.) 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); 제 2 장 FDL 함수 39
fbput(fbuf, INPUT, bbbb, 0); fbput(fbuf, INPUT, cccc, 0); fbget(fbuf, INPUT, buffer, &fldlen); printf( Field Data: [%s]\n, buffer); /* output: Field Data: [aaaa] */ 관련함수 fbput(), fbchg_tu(), fbget_tu(), fbchg_tu(), fbgetval(), fbgetval_last_tu(), fbgetvals_tu(), fbgetvall_tu() 2.16. fbgetalloc_tu 지정한필드키의필드순번에해당하는필드데이터를읽어오는함수이다. fldkey 및 nth 로지정한필드키의필드순번에해당하는필드데이터를읽어서 extralen에지정한길이만큼의새로운버퍼를할당하여해당버퍼에데이터를저장하고포인터를반환한다. 프로토타입 #include <fbuf.h> #include <atmi.h> char *fbgetalloc_tu(fbuf *fbuf, FLDKEY fldkey, int nth, int *extralen) fbuf fldkey nth extralen fballoc() 또는 tpalloc() 으로메모리에할당된필드버퍼이다. 필드버퍼에서읽어올필드키를의미한다. 데이터를읽어올필드키의필드순번을의미한다. 새로할당받아야하는버퍼의크기를의미한다. extralen 을 0 으로지정하면함수수행후새로할당해야하는버퍼의크기가필 드데이터의길이로설정된다. extralen 은할당한버퍼의크기가설정된다. 새로할당받은버퍼는사용한후반드시사용자가메모리를해제한다. 반환값 반환값 버퍼의포인터 함수호출에성공한경우이다. 40 Tmax FDL Reference Guide
반환값 NULL 필드버퍼에서지정한필드키를찾지못하거나함수수행중다른에러가발생하 였을경우이다. (fberror 에에러번호가설정된다.) 오류 fberrno 에다음값중하나가설정된다. 에러코드 FBENOENT FBEMALLOC FBEINVAL FBETYPE 지정한필드키가 FDLFILE( 환경변수 : 기본값은 <tmax.fdl>) 에정의되지않아서필드버퍼에서사용할수없는경우 fberror는 FBENOENT로설정된다. 시스템에러로필드버퍼를메모리에할당하지못했을경우 fberror는 FBEMAL LOC로설정된다. 입력로지정된값중유효하지않은가있음을의미한다. 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. */ 제 2 장 FDL 함수 41
fbfree(fbuf);. 관련함수 fbgetalloc_tut(), fbput(), fbchg_tu(), fbget_tu(), fbchg_tu(), fbgetval(), fbgetval_last_tu(), fbgetvals_tu(), fbgetvall_tu() 2.17. fbgetalloc_tut 필드버퍼에서지정한필드키의필드순번에해당하는필드데이터를지정한타입으로필요한길이만큼버퍼를새로할당받아저장하여반환하는함수이다. 이함수를사용하면 fldkey 및 nth 로지정한필드키의필드순번에해당하는필드데이터를읽어온다. 필드데이터의타입과상관없이지정한타입으로변환하여 extralen에지정한길이만큼의새로운버퍼를할당하여데이터를저장하고포인터를반환한다. fbgetalloc_tut() 는 fbgetalloc_tu() 와매우유사하지만가져오는필드데이터의타입을변환할수있다는점이다르다. 프로토타입 #include <fbuf.h> #include <atmi.h> char *fbgetalloc_tut(fbuf *fbuf, FLDKEY fldkey, int nth, int type, int *extralen) fbuf fldkey nth type fballoc() 또는 tpalloc() 으로메모리에할당된필드버퍼이다. 필드버퍼에서읽어올필드키를의미한다. 데이터를읽어올필드키의필드순번을의미한다. 필드데이터를변환할데이터형을지정한다. type에지정할수있는값은다음과같다. - FB_CARRAY - FB_SHORT - FB_DOUBLE - FB_LONG - FB_STRING 42 Tmax FDL Reference Guide
- FB_CHAR - FB_FLOAT - FB_INT extralen 새로할당받아야하는버퍼의크기를 Byte 단위로나타낸다. extralen 을 0 으로지정하면함수수행후새로할당해야하는버퍼의크기가필 드데이터의길이로설정된다. 할당받은버퍼는사용한후반드시사용자가메모리를해제한다. 반환값 반환값 버퍼의포인터 함수호출에성공한경우이다. ( 필드데이터를저장한새로할당받은버퍼의포인터를반환한다. 반환값은 char * 형으로표현할수없는 int, long, double, long, float 형의경우에는상황에맞게 type casting 을한다.) NULL 필드버퍼에서지정한필드키를찾지못하거나함수수행중다른에러가발생하 였을경우이다. (fberror 에에러번호가설정된다.) 오류 fberrno 에다음값중하나가설정된다. 에러코드 FBENOENT FBEMALLOC FBENOSPACE FBEBADFLD FBETYPE 지정한필드키가 FDLFILE( 환경변수 : 기본값은 <tmax.fdl>) 에정의되지않아서필드버퍼에서사용할수없는경우 fberror는 FBENOENT로설정된다. 시스템에러로, 필드버퍼를메모리에할당하지못했을경우 fberror는 FBEMAL LOC로설정된다. 필드버퍼에데이터를저장하거나복사할공간이부족할경우 fberror는 FBENOSPACE로설정된다. 유효하지않은필드키가사용된경우이다. 일반적으로필드키가 fdlc 유틸리티를사용하여컴파일되지않은필드키가사용되었을경우 fberror는 FBEBADFLD로설정된다. Tmax에서지원하지않는타입이사용되었다. 제 2 장 FDL 함수 43
에러코드 FBEINVAL 입력로지정된값중유효하지않은가있음을의미한다. 예를 들면 fbuf 가 NULL 로지정된경우해당에러가발생한다. 예제 #include demo_fdl.h long ret; int extralen; char *buffer; FBUF *fbuf; if ((fbuf = fballoc(10, 100)) == NULL) { printf( fballoc failed, errno = %d\n, fberror);... fbput(fbuf, INPUT, aaaa, 0); fbput(fbuf, INPUT, bbbb, 0); fbput(fbuf, INPUT, cccc, 0); extralen = 4; buffer = fbgetalloc_tut(fbuf, INPUT, 0, FB_STRING, &extralen); printf( Field Data: [%s]\n, buffer); /* output: Field Data: [aaaa], returned after adding 4 bytes to the length of the field value. */ fbfree(fbuf); 관련함수 fbgetalloc_tu (), fbput(), fbget_tu(), fbchg_tu(), fbgetval(), fbgetval_last_tu(), fbgetvals_tu(), fbgetvall_tu() 2.18. fbget_fbsize fballoc() 또는 tpalloc() 으로할당된필드버퍼의크기를반환하는함수이다. fballoc() 또는 tpalloc() 을통하여메모리에 1024Byte 보다작은필드버퍼를할당하려고할때기본적으로메모리는 1024Byte로할당한다. 이러한경우 Tmax 내부에서쓰이는헤더크기를더하여 fbget_fbsize() 는 1024 + 8 = 1032Byte를반환한다. 그이외의경우에 fbget_fbsize() 의반환값은 fbcalcsize() 로계산한결과에헤더크기 (8Byte) 를더한값과같다. 프로토타입 44 Tmax FDL Reference Guide
#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] */ 관련함수 제 2 장 FDL 함수 45
fbcalcsize(), tpalloc(), fballoc(), fbfree(), fbinit() 2.19. fbget_fldkey fdlc 유틸리티에서컴파일되어생성된필드테이블 (FDLFILE에설정된 FDL 파일 ) 과관련하여지정한필드명과 matching되는식별자를반환하는함수이다. 이식별자를필드키라고부른다. 필드버퍼에저장되는데이터의형식은필드키와필드데이터의조합이기때문에필드버퍼에데이터를저장하기위해서는지정한필드이름에해당하는필드키를알아야한다. 프로토타입 #include <fbuf.h> #include <atmi.h> FLDKEY fbget_fldkey(char *name) name 필드테이블을생성하는데사용되는필드이름이다. 반환값 반환값 0 필드이름과 matching 되는필드키 지정한필드이름이필드테이블에존재하지않는경우이다. 지정한필드이름이필드테이블에존재하는경우이다. 예제 #include demo_fdl.h FLDKEY fkey; FBUF *sndbuf; fkey = fbget_fldkey( INPUT ); printf( Field Key : [%d]\n, fkey); /* output : Field Key : [469762149] */... fbput(sndbuf, fkey, 1111", 0); 46 Tmax FDL Reference Guide
관련함수 fbget_fldname(), fbget_fldno(), fbget_fldtype(), fbget_strfldtype(), fbtypecvt() 2.20. fbget_fldname fbget_fldkey() 와는반대로 fdlc 유틸리티를통하여컴파일되어생성된필드테이블 (FDLFILE에설정된 FDL 파일 ) 과관련하여지정한필드키와 matching되는필드이름을반환하는함수이다. 프로토타입 #include <fbuf.h> #include <atmi.h> char *fbget_fldname(fldkey fldkey) fldkey 필드테이블을생성하기위하여필요한데이터를정의한파일 (***.f) 을 fdlc 유틸리티를통하여컴파일하여생성된헤더파일 (***_fdl.h) 을이용하거나또는 fbget_fldkey() 를이용해서얻은필드키이다. 반환값 반환값 필드키와 matching 되지정한필드키에대한필드이름이필드테이블에존재하는경우이다. 는필드이름 NULL 지정한필드키에대한필드이름이필드테이블에존재하지않을경우이다. 예제 #include demo_fdl.h FLDKEY fkey; char *name; fkey = fbget_fldkey( INPUT ); printf( Field Key : [%d]\n, fkey); /* output : Field Key : [469762149] */ name = fbget_fldname(fkey); printf( Field Name : [%s]\n, name); 제 2 장 FDL 함수 47
/* output : Field Name : [INPUT] */ 관련함수 fbget_fldkey(), fbget_fldno(), fbget_fldtype(), fbget_strfldtype(), fbtypecvt() 2.21. fbget_fldno 필드테이블을생성하기위해필요한데이터중지정한필드키와 matching되는필드번호를반환하는함수이다. 필드테이블을생성하기위해서는필드형, 필드이름, 필드번호등이필요하며이러한조합으로유일한 (unique) 필드키를만들수있다. 이러한필드키를모아서관리하는것이필드테이블이다. 프로토타입 #include <fbuf.h> #include <atmi.h> int fbget_fldno(fldkey fldkey) fldkey 필드테이블을생성하기위하여필요한데이터를정의해놓은파일 (***.f) 을 fdlc 유틸리티를통하여컴파일하여생성된헤더파일 (***_fdl.h) 을이용하거나또는 fbget_fldkey() 를이용해서얻은필드키이다. 반환값 반환값 1-1 함수호출에성공한경우이다. 필드버퍼에서지정한필드키를찾지못하거나함수수행중다른에러가발생하였을경우이다. (fberror 에에러번호가설정된다.) 오류 fberrno 에다음값중하나가설정된다. 48 Tmax FDL Reference Guide
에러코드 FBENOENT FBEINVAL FBETYPE FBEBADFLD 지정한필드키가 FDLFILE( 환경변수 : 기본값은 <tmax.fdl>) 에정의되지않아서필드버퍼에서사용할수없는경우 fberror는 FBENOENT로설정된다. 입력로지정된값중유효하지않은가있음을의미한다. Tmax에서지원하지않는타입이사용되었다. 잘못된필드를사용하였다. 예제 #include demo_fdl.h long ret; FLDKEY len; int nth; char buffer[100]; FBUF *fbuf; if ((fbuf = fballoc(10, 100)) == NULL) { printf( fballoc failed, errno = %d\n, fberror);... fbput(fbuf, INPUT, aaaa, 0); fbput(fbuf, INPUT, bbbb, 0); fbput(fbuf, INPUT, cccc, 0); fbgetlast_tu(fbuf, INPUT, &nth, buffer, &len); printf( Field Data: [%s], occurrence = %d, len = %d\n, buffer, nth, len); /* output: Field Data: [cccc], occurrence = 2, len = 4 */ 관련함수 fbput(), fbchg_tu(), fbget_tu(), fbgetval(), fbgetval_last_tu(), fbgetvals_tu(), fbgetvall_tu(), fbgetalloc_tu() 2.22. fbget_fldtype 지정한필드키의필드형을정수로반환하는함수이다. 프로토타입 #include <fbuf.h> #include <atmi.h> 제 2 장 FDL 함수 49
int fbget_fldtype(fldkey fldkey) fldkey 필드테이블을생성하기위하여필요한데이터를정의해놓은파일 (***.f) 을 fdlc 유틸리티를통하여컴파일하여생성된헤더파일 (***_fdl.h) 을이용하거나또는 fbget_fldkey() 를이용해서얻은필드키이다. 반환값 반환값은다음과같이 1~8 까지의 int 값이다. 함수에서반환되는필드형과그에 matching 되는반환값은다음과같다. 반환값 1 2 3 4 5 6 7 8 필드형 character short integer integer long integer float double string 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() 50 Tmax FDL Reference Guide
2.23. fbgetlast_tu 필드버퍼에서지정한필드키에저장되어있는필드데이터중마지막순번의데이터를반환하는함수이다. 반환되는데이터가필드데이터중몇번째순번인지와필드데이터의길이를데이터와함께반환한다. 프로토타입 #include <fbuf.h> #include <atmi.h> int fbgetlast_tu(fbuf *fbuf, FLDKEY fldkey, int *nth, char *loc, int *len) fbuf fldkey nth loc len balloc() 또는 tpalloc() 으로메모리에할당된필드버퍼이다. 필드버퍼에서읽어올필드키를의미한다. 지정한필드키에저장되어있는필드데이터중마지막순번이저장되는포인터로데이터를읽어올필드키의필드순번을저장한다. 가져온필드데이터를저장하는포인터이다. 가져온필드데이터의길이를저장하는포인터이다. 반환값 반환값 1-1 함수호출에성공한경우이다. 필드버퍼에서지정한필드키를찾지못하거나함수수행중다른에러가발생하였을경우이다. (fberror 에에러번호가설정된다.) 오류 fberrno 에다음값중하나가설정된다. 에러코드 FBENOENT FBEINVAL FBETYPE 지정한필드키가 FDLFILE( 환경변수 : 기본값은 <tmax.fdl>) 에정의되지않아서필드버퍼에서사용할수없는경우 fberror는 FBENOENT로설정된다. 입력로지정된값중유효하지않은가있음을의미한다. Tmax에서지원하지않는타입이사용되었다. 제 2 장 FDL 함수 51
에러코드 FBEBADFLD 잘못된필드를사용하였다. 예제 #include demo_fdl.h long ret; FLDKEY len; int nth; char buffer[100]; FBUF *fbuf; if ((fbuf = fballoc(10, 100)) == NULL) { printf( fballoc failed, errno = %d\n, fberror);... fbput(fbuf, INPUT, aaaa, 0); fbput(fbuf, INPUT, bbbb, 0); fbput(fbuf, INPUT, cccc, 0); fbgetlast_tu(fbuf, INPUT, &nth, buffer, &len); printf( Field Data: [%s], occurrence = %d, len = %d\n, buffer, nth, len); /* output: Field Data: [cccc], occurrence = 2, len = 4 */ 관련함수 fbput(), fbchg_tu(), fbget_tu(), fbgetval(), fbgetval_last_tu(), fbgetvals_tu(), fbgetvall_tu(), fbgetalloc_tu() 2.24. fbget_strfldtype 지정한필드키에저장될필드데이터의타입을문자열로반환하는함수이다. fbget_fldtype() 은지정한필드키의필드형을미리지정한정수로반환하지만이함수는필드형을문자열그대로반환한다. 프로토타입 #include <fbuf.h> #include <atmi.h> char *fbget_strfldtype(fldkey fldkey) 52 Tmax FDL Reference Guide
fldkey 필드테이블을생성하기위하여필요한데이터를정의해놓은파일 (***.f) 을 fdlc 유틸리티를통하여컴파일하여생성된헤더파일 (***_fdl.h) 을이용하거나또는 fbget_fldkey() 를이용해서얻은필드키이다. 반환값 반환값빈문자열 (" ") 문자열 ( 지정한필드키 에대한필드형 ) 로지정한필드키에해당하는필드형이없거나필드키가잘못지정된경우이다. 로지정한필드키에해당하는필드형이없거나필드키가존재하는경우이다. 예제 #include demo_fdl.h FLDKEY fkey; char *stype;.. fkey = fbget_fldkey( INPUT ); printf( Field Key : [%d]\n, fkey); /* output : Field Key : [469762149] */ stype = fbget_strfldtype(fkey); printf( Field Type : [%s]\n, stype); /* output : Field type : [string] */ 관련함수 fbget_fldname(), fbget_fldno(), fbget_fldtype(), fbtypecvt() 2.25. fbget_tu 필드버퍼에서지정한필드키의지정한필드순번에해당하는필드의데이터를읽어오는함수이다. fldkey 에서지정한필드키의 value에서지정한필드순번에해당하는필드의데이터를읽어온다. fbget_tu() 와유사한 fbget() 은읽어올필드키만지정하면그필드키에저장되어있는필드데이터를처음부터차례로순번을증가시켜가면서읽어온다. 이에비해 fbget_tu() 는지정한필드키에저장되어있는데이터중필드순번까지도지정할수있다. 또한 fbget() 의경우한번읽어온데이터에더이상접근할수없지만, fbget_tu() 는필드순번까지지정할수있으므로하나의필드데이터를여러번읽어올수있다. 프로토타입 제 2 장 FDL 함수 53
#include <fbuf.h> #include <atmi.h> int fbget_tu(fbuf *fbuf, FLDKEY fldkey, int nth, char *value, FLDLEN *len) fbuf fldkey nth value len fballoc() 또는 tpalloc() 으로메모리에할당된필드버퍼이다. 필드버퍼에서읽어올필드키를의미한다. 읽어올필드순번을나타낸다. 읽어온필드데이터를가리키는포인터이다. 필드키가정수형또는실수형인경우에는반드시각타입에맞는변수를사용하되앞에서기술한함수의프로토타입에맞게 type casting을한다. 읽어온데이터의길이를나타낸다. 반환값 반환값 1-1 지정한필드키가필드버퍼에존재하는경우이다. 지정한필드키가필드버퍼에존재하지않는경우이다. (fberror 에에러번호가설정된다.) 오류 fberrno 에다음값중하나가설정된다. 에러코드 FBENOENT FBEINVAL FBETYPE FBEBADFLD 지정한필드키가 FDLFILE( 환경변수 : 기본값은 <tmax.fdl>) 에정의되지않아서필드버퍼에서사용할수없는경우 fberror는 FBENOENT로설정된다. 입력로지정된값중유효하지않은가있음을의미한다. Tmax에서지원하지않는타입이사용되었다. 잘못된필드를사용하였다. 예제 #include demo_fdl.h char buffer[100]; 54 Tmax FDL Reference Guide
long rcvlen; FLDLEN fldlen; FBUF *fbuf; if ((fbuf = fballoc(10, 100)) == NULL) { printf( fballoc failed, errno = %d\n, fberror);... fbput(fbuf, INPUT, aaaa, 0); fbput(fbuf, INPUT, bbbb, 0); fbput(fbuf, OUTPUT, cccc, 0); fbget_tu(fbuf, INPUT, 1, buffer, &fldlen); printf( Data: [%s]\n, buffer) /* output: Data: [bbbb] */... 관련함수 fbput(), fbget(), fbget_tut(), fbgetval(), fbgetval_tu(), fbgetvals_tu(), fbgetvall_tu(), fbgetval_last_tu() 2.26. fbget_tut 지정한필드키의필드순번에해당하는필드데이터를지정한타입으로변환하여반환하는함수이다. fldkey 에서지정한필드키의 nth에서지정한필드순번에해당하는필드의데이터를읽어온다. fbget_tu() 와거의같은역할을하지만 fbget_tu() 는지정한필드키의필드순번에해당하는필드데이터를그대로읽어오고, fbget_tut() 는필드데이터를지정한타입으로변환하여읽어올수있다는점이다르다. 프로토타입 #include <fbuf.h> #include <atmi.h> int fbget_tut(fbuf *fbuf, FLDKEY fldkey, int nth, char *value, FLDLEN *len, int type) fbuf fldkey nth fballoc() 또는 tpalloc() 으로메모리에할당된필드버퍼이다. 필드버퍼에서읽어올필드키를의미한다. 읽어올필드순번을의미한다. 제 2 장 FDL 함수 55
value len type 읽어온필드데이터를가리키는포인터이다. 만약필드키가정수형또는실수형인경우에는반드시각타입에맞는변수를사용하되앞에서기술한함수의프로토타입에맞게 type casting을한다. 읽어온데이터의길이를의미한다. 읽어온데이터형을변환할경우데이터형을지정한다. type에지정할수있는값은다음과같다 - FB_CARRAY - FB_SHORT - FB_DOUBLE - FB_LONG - FB_STRING - FB_CHAR - FB_FLOAT - FB_INT 반환값 반환값 1-1 지정한필드키가필드버퍼에존재하는경우이다. 지정한필드키가필드버퍼에존재하지않는경우이다. (fberror 에에러번호가설정된다.) 오류 fberrno 에다음값중하나가설정된다. 에러코드 FBENOENT FBETYPE FBEBADFLD FBEINVAL 지정한필드키가 FDLFILE( 환경변수 : 기본값은 <tmax.fdl>) 에정의되지않아서필드버퍼에서사용할수없는경우 fberror는 FBENOENT로설정된다. Tmax에서지원하지않는타입이사용되었다. 잘못된필드를사용하였다. 입력로지정된값중유효하지않은가있음을의미한다. 예를들면 fbuf가 NULL로지정된경우해당에러가발생한다. 56 Tmax FDL Reference Guide
예제 #include demo_fdl.h FBUF *fbuf; int ret, val=65; if ((fbuf = fballoc(10, 100)) == NULL) { printf( fballoc failed, errno = %d\n, fberror);... fbputt(fbuf, INPUT, (char *)&val, 0, FB_INT); fbputt(fbuf, INTDATA, "1111", 0, FB_STRING); fbprint(fbuf); fbget_tut(fbuf, INTDATA, 0, (char *)&ret, &fldlen, FB_INT); printf("field Data: [%d]\n", ret); /* output: Field Data: [1111] */... 관련함수 fbput(), fbget(), fbget_tu(), fbgetval(), fbgetval_tu(), fbgetvals_tu(), fbgetvall_tu(), fbgetval_last_tu() 2.27. fbget_unused fballoc() 또는 tpalloc() 으로메모리에할당된필드버퍼중아직사용되지않은필드버퍼의크기를계산하여 Byte 단위로반환하는함수이다. 프로토타입 #include <fbuf.h> #include <atmi.h> long fbget_unused(fbuf *fbuf) fbuf fballoc() 또는 tpalloc() 으로메모리에할당된필드버퍼이다. 반환값 메모리에할당된필드버퍼중아직사용되지않은메모리의크기를 Byte 단위로반환한다. 오류 제 2 장 FDL 함수 57