Microsoft Word - Tmax Application Development Guide.doc

Size: px
Start display at page:

Download "Microsoft Word - Tmax Application Development Guide.doc"

Transcription

1 Tmax Application Development Guide Copyright 2000 TmaxSoft Co., Ltd. All Rights Reserved

2 Copyright Notice Copyright 2000 TmaxSoft Co., Ltd. All Rights Reserved. TmaxSoft Co., Ltd. 대한민국서울시강남구대치동 글라스타워 18 층우 ) Restricted Rights Legend This software and documents are made available only under the terms of the TmaxSoft License Agreement and may be used or copied only in accordance with the terms of this agreement. No part of this document may be reproduced, transmitted, or translated in any form or by any means, electronic, mechanical, manual, or optical, without the prior written permission of TmaxSoft Co., Ltd. 소프트웨어및문서는오직 TmaxSoft Co., Ltd. 와의사용권계약하에서만이용이가능하며, 사용권계약에따라서사용하거나복사할수있습니다. 또한이매뉴얼에서언급하지않은정보에대해서는보증및책임을지지않습니다. 이매뉴얼에대한권리는저작권에보호되므로발행자의허가없이전체또는일부를어떤형식이나, 사진녹화, 기록, 정보저장및검색시스템과같은그래픽이나전자적, 기계적수단으로복제하거나사용할수없습니다. Trademarks Tmax, WebtoB, WebT, and JEUS are registered trademarks of TmaxSoft Co., Ltd. All other product names may be trademarks of the respective companies with which they are associated. Tmax, WebtoB, WebT, JEUS 는 TmaxSoft Co., Ltd. 의등록상표입니다. 기타모든제품들과회사이름은각각해당소유주의상표로서참조용으로만사용됩니다. Document Edition Date Version TMAG Jan 1, 2006 Tmax 4.0 Tmax 제품은아래표와같습니다. 본서는 Tmax Standard 와옵션중에굵게기울임꼴로인쇄되어있는내용을포함하고있습니다. Tmax Standard Tmax Options TP Function + 2 Phase Commit Web Admin Console, X.25 Gateway, TCP/IP Gateway, Host- Link, Power Builder Interface Module, SERIAL Gateway, 1

3 TCP/IP Service Gateway 2

4 이책에관하여... 는 Tmax Application 을쉽게개발하기위하여 Tmax 의기본적인함수를설명하고그에따른예제프로그램을포함한다. 이책의독자는 Application 프로그램을개발하기위해 Tmax, Unix C Programming 에대한기본적인지식과 text editor(vi 등 ) 를사용할수있는능력이있어야한다. 누구를위한책인가? 이책은 Tmax Application 프로그램을개발하기전에개발자들에게일반적인정보를주기위한것이다. 이는 Tmax 로개발을함에있어모든상황에대한고려사항을자세히다루고있지는않다. 또한이책은각프로젝트의특징들을담고있으므로 Tmax Soft Software Engineer 들에게추천된다. 어떻게사용하는가? 이책은 Tmax 를사용하는개발자들을위해기본적인 Tmax 개발방법을예제로서설명한다. 그리고 Tmax 의가장기본적인프로그래밍을서술하며보다상세한프로그래밍을위해다른책들을참조할것을권장한다. FIELD buffer, Tmax 환경설정과다른 Tmax 와관련한주제들은 Tmax Soft 에서제공하는다른메뉴얼들을참조하기바란다. 1. 소개 Tmax 프로그램들과 API 들그리고 Buffer 타입들에대한간략한설명을기술한다. 2. Tmax Application Programs 분산된클라이언트와서버프로그래밍시의 Tmax 에의해지원되는기능들에대한예제들을기술한다. 3. 부록 - Tmax 환경파일을설명한다. 더자세한설명을원한다면 Tmax Administration Guide 를참조하도록한다. 기본적인 Tmax 프로그램의예제프로그램을포함한다. 관련서 Tmax Getting Started Guide Tmax Reference Manual Tmax FDL Reference Manual Tmax Administration Guide 3

5 Tmax Installation Guide 규약 규 약 설 명 { [ ] ( ) Numeric String Literal 필수항목옵션항목지정된여러개의값중배타적인선택구분자디폴트값숫자 abc 형태의문자열 abc 형태의문자열 4

6 차례 1 Tmax 응용프로그램소개 Tmax 응용프로그램이란 Tmax 응용프로그램구성 Tmax 응용프로그램특징 Tmax 응용프로그램장점 Tmax 응용프로그램흐름 Tmax 응용클라이언트프로그램이란무엇인가? Tmax 응용서버프로그램이란? Tmax API 함수 TX 함수 비표준 API 함수 XATMI (X/Open Application - Transaction Monitor Interface) API 함수 필드키 Buffer 관련함수 Tmax Buffer 유형 Tmax 통신유형 동기형통신 비동기형통신 대화형통신 Tmax 클라이언트프로그램 Tmax 클라이언트함수개요 Tmax 클라이언트함수 Tmax 연결및해제 Buffer 관리

7 5.2.3 동기통신 비동기통신 비요청메시지처리 타임아웃변경 Tmax 클라이언트프로그램컴파일 클라이언트프로그램구성 클라이언트프로그램컴파일 클라이언트프로세스기동및종료 Tmax 서버프로그램작성 Tmax 서버함수개요 Tmax 서버함수 서비스루틴인자 서비스완료 서버초기화와종료루틴 XA 모드와 NonXA 모드 비요청메시지관련인터페이스 서버프로그램 서버프로그램구성 서버프로그램컴파일 서버프로세스생성및종료 대화형통신 대화형통신함수개요 대화형통신함수 int tpconnect(char *svc, char *sbuf, long slen, long flags) int tpsend(int cd, char *sbuf, long slen, long flags, long *revent) int tprecv(int cd, char **rbuf, long *rlen, long flags, long *revent) 대화형모드의연결끊기 int tpdiscon(int cd) 대화형통신과관계있는이벤트 트랜잭션관리 전역트랜잭션처리 (Global Transaction Processing) 트랜잭션흐름

8 8.3 트랜잭션관련함수 int tx_begin() int tx_commit() int tx_rollback() int tx_set_transaction_timeout(transaction_timeout timeout) int tx_set_transaction_control( TRANSACTION_CONTROL control) int tx_set_commit_return(commit_return when_return) int tx_info(txinfo *info) 트랜잭션관련에러 트랜잭션에러 XA 에러 RQ int tpenq(char *qname, char *svc, char *data, long len, long flags); int tpdeq(char *qname, char *svc, char **data, long *len, long flags); int tpqstat(char *qname, long flags); int tpextsvcname(char *data, char *svc); 프로세스처리 TCS(Tmax Control Server) UCS(User Control Server) RDP(Realtime Data Processor) Tmax 보안 단계보안 : 시스템접속제어 단계보안 : 사용자인증 단계보안 : 서비스접근제어 Tmax 함수에러메시지 tperrno : Tmax 에러상황이발생할경우에설정이되는전역변수 ( 이때 ATMI 호출은 1을반환한다.) char *tpstrerror(int errno); 에러메시지를반환함

9 13 부록 Tmax 환경파일 DOMAIN 절 *NODE 절 *SVRGROUP 절 Tmax 응용프로그래밍 기초프로그램 실전프로그램 고급프로그램

10 1 Tmax 응용프로그램소개 1.1 Tmax 응용프로그램이란 Tmax 응용프로그램이란개방형환경에서 Tmax( 티맥스 ) 를미들웨어로하여개발한클라이언트 / 서버프로그램을말한다. 고성능 PC 의등장과프로그램기법의발달은호스트중심의중앙처리방식에서클라이언트와서버가작업처리를분담하는형태, 즉클라이언트 / 서버환경으로의변화를가져왔다. 이와같은클라이언트 / 서버컴퓨팅은작업을분담함으로써고성능 PC 의활용과서버의소형화, 각종하드웨어선택폭의확대등과같이자원의효율적활용을가능하게하였다. 하지만클라이언트 / 서버환경은아래와같은문제점도가지고있다. 개발자가각하드웨어, 운영체제, 네트웍프로토콜에대한깊은이해가있어야만프로그램이가능하다. 사용자수와데이터양의증가에따라처리속도가현저하게저하된다. 과다한네트웍트래픽발생으로속도가저하된다. 분산환경에따른관리 ( 프로세스관리, 통신, 보안, 장애대책등 ) 가어렵다. Tmax 응용프로그램은클라이언트 / 서버프로그램의장점을유지하면서, 위와같은단점을획기적으로보완한다. 9

11 그림 1-1. Tmax application program Tmax 를미들웨어로하여응용프로그래밍을작성한다는의미는 Tmax 에서제공하는함수들을이용하여프로그램을작성하여, 통신프로그램및프로세스관리, 트랜잭션관리등관리상의어려운부분을 Tmax 가해결하는것이다. Tmax 에서제공하는함수는 Buffer 및통신, 기록트랜잭션관련함수들이며, 서버라이브러리 (libsvr.a) 와클라이언트라이브러리 (libcli.a) 로나누어제공된다. 이함수들은분산처리국제표준 X/Open DPT 모델을준수한다 Tmax 응용프로그램구성 Tmax 응용프로그램은크게 Tmax 클라이언트프로그램과 Tmax 서버프로그램으로나누어진다. 그리고여기에 Tmax 를사용하기위한환경설정작업이추가된다 클라이언트프로그램 클라이언트프로그램은사용자의요청에따라서비스를요청하고, 그요청에대한응답을서버에서받아사용자가원하는형식으로결과를전달하는역할을하는프로그램이다. Tmax 응용클라이언트프로그램과 UNIX 환경파일 (ex:.profile) 이필요하다. Unix 환경파일 (ex:.profile) 에는클라이언트가 Tmax 에연결할때필요한사전정보 (Tmax 어드레스, 포트번호등 ) 를설정한다. 10

12 서버프로그램 서버프로그램은시스템자원에대한접근관리와클라이언트의요청을받아서처리하고응답을클라이언트에게전달하는역할을하는프로그램이다. 서버프로그램은 Tmax 에서제공하는 main() 과개발자가개발한서비스루틴으로구성되어있다. Tmax 응용서버에서반드시필요한파일들은 Tmax 환경파일과서버프로그램이다. Tmax 환경파일은 Tmax 가사용하는자원들에대한전체시스템구성을설정하는파일이며, Tmax 관리자가작성한다. 이파일은 Tmax 시스템과서버프로그램기동시참조되며, 서비스테이블작성시도참조된다. 자세한내용은서버프로그램컴파일페이지와 Tmax Reference Guide 를참조하기바란다 Tmax 응용프로그램특징 Tmax 응용프로그램은다른 UNIX 프로그램과비교하여다음과같은특징을갖는다 : 프로그램작성시 Tmax 함수들을이용하며이함수들은분산처리국제표준 (X/Open DTP model) 을준수한다. 응용서버프로그램을만들때서비스루틴만개발한다. 클라이언트는기본적인 C 언어형식에맞게프로그램 ( 내부에 main() 을포함 ) 을개발해야하며, 서버프로그램은클라이언트의서비스요청을처리하는순수한업무서비스루틴 ( 내부에 main() 이없는 ) 만을개발한다. 서비스요청에는 3 가지통신유형이제공된다 : 동기통신, 비동기통신, 그리고대화형통신이있다. 동기통신은서비스요청 (tpcall) 후응답이올때까지기다린다. 비동기통신은서비스를요청 (tpacall) 하고응답을받고자 (tpgetrply) 할때까지다른일을할수있다. 대화형통신은초기연결설정 (tpconnect) 후메시지송신 (tpsend) 과수신 (tprecv) 을반복적으로수행할수있다. 이와같은유형의통신을제공함으로써개발자는통신네트워크에대한깊은이해없이도쉽게프로그램이가능하게된다. 11

13 서비스요청시 7 가지 Buffer 를사용할수있다. 보통개발자는타기종간데이터통신을할때데이터무결성을보장하는데어려움을겪는다. 각머신, 각운영체제, 그리고네트워크프로토콜에대한깊은이해가있어야만개발이가능하다. 하지만 Tmax 에서는 7 가지유형의 Buffer 를지원함으로써개발자에게선택의폭을넓혔을뿐아니라, 머신, 운영체제, 네트워크에대한깊은이해가없이도개발이가능하다 Tmax 응용프로그램장점 Tmax 를이용한프로그래밍은아래와같은장점이있다 : 하드웨어, 통신네트워크에대한깊은이해가없어도쉽게프로그래밍을가능하게한다. 클라이언트는위치를알지못해도, 이름만으로서비스를요청할수있다. 통신에서사용하는 Buffer 의유형이다양하다. 이기종하드웨어, 이기종운영체제에따라데이터를메모리에할당하는방식과데이터타입별로정의된길이가서로다를수있다. 따라서특정데이터값을송신했을때수신측에서는다른값으로인식될수있으므로일반적으로모든하드웨어나운영체제에서동일하게인식될수있는문자형으로변환하여데이터를송 / 수신한다. 하지만 Tmax 통신에서는문자형이외에구조체유형등의 Buffer 를제공함으로써시스템성능향상은물론네트웍부하를감소시킨다. 다양한통신유형을제공한다. 동기 (tpcall()), 비동기 (tpacall()), 대화형통신 (tpconnect()), 자발적인통신 (tpbroadcast()) 등을제공하여다양한환경에맞는통신을지원한다. 트랜잭션처리의무결성을제공한다. 프로그램에서는트랜잭션의범위만을설정하면 Tmax 는 2PC (two-phase commit) 방식으로데이터의무결성을제공한다. 12

14 1.2 Tmax 응용프로그램흐름 Tmax 응용클라이언트프로그램이란무엇인가? 클라이언트프로그램 사용자의요구를받아서서버에전달하고, 서버에서처리된결과를받아서사용자에게보여주는역할을하는프로그램이다 Tmax 응용클라이언트개발환경 Tmax 클라이언트의개발환경은 Unix, WindowNT, Windows95/98/2000, Windows 3.1, MS-DOS 등이가능하다. 개발 Tool 로써 Unix 의 C, Visual C++, Boland C++, Visual Basic, 델파이, 파워빌더등이지원가능하다 Tmax 응용클라이언트흐름 main() { tpstart Buffer 할당. tpstart Buffer 초기화. Tmax 에접속. 송신 / 수신메시지 Buffer 할당. while{ 송신메시지 Buffer 에유저의요구입력. 송신메시지 Buffer 를서버에보냄 ( 서비스요청 ). 서버로부터응답을송신메시지 Buffer 로받음. 송신메시지 Buffer 의내용을사용자에게보여줌. 송신 / 수신메시지 Buffer 제거 Tmax 연결해제 클라이언트는제일먼저 Tmax 에연결한다. tpstart() 는환경변수 (Tmax 연결서버주소와포트번호 ) 를읽어서연결을 13

15 설정하며, 연결시클라이언트의연결정보를서버에게주고싶다면 TPSTART_T Buffer 를미리할당하여사용한다. Tmax 는다양한통신 Buffer 유형을지원한다. 통신에서사용할 Buffer 를할당하고, 사용자의요구를 Buffer 에입력한다. 통신 Buffer 는반드시 Tmax 제공함수 (tpalloc()) 로생성되어야한다. 서비스를요청하고응답을받는다. 서비스요청과응답은동기, 비동기, 대화형통신이제공된다. 서버로부터받은응답내용을사용자에게전달한다. Tmax 와의연결을해제한다 Tmax 응용클라이언트특징 Tmax 응용프로그램은 2-Tier 클라이언트 / 서버프로그램과비교하여몇가지다른점을가진다. Tmax 에서는통신네트워크, Buffer 관리를위한함수들을제공하여응용프로그램개발을용이하게한다. 이함수들은라이브러리형태로제공되고응용프로그램과같이컴파일된다. 개발자는어느머신의어느서버에서무슨서비스를제공하는지관여하지않아도프로그램을개발할수있다 Tmax 응용서버프로그램이란? Tmax 응용서버프로그램 사용자의요청을받아서처리하고그응답을클라이언트에게반환한다 Tmax 응용서버프로그램개발환경 Tmax 응용서버프로그램의 O/S 환경은하드웨어와는무관한모든 UNIX 기종을지원한다. 유닉스표준편집기 vi 로개발이가능하다. 14

16 Tmax 응용서버흐름 서버프로그램은 Tmax 에서제공하는 main() 과개발자가개발하는서비스루틴으로크게나누어볼수있다. main() 은명령어라인에입력된인수처리, 연결된데이터베이스연결및해제역할과, 서비스루틴에서사용할 Buffer 를할당한다. 그리고클라이언트요청을처리하는서비스루틴을효출하는역할을한다. 서비스루틴은클라이언트의요청을처리한다. 클라이언트의요청은먼저 main() 에서서비스요청과관련된정보를가지고 15

17 있는 TPSVCINFO 구조체로부터받는다. 클라이언트가요구한 Buffer 의내용은 TPSVCINFO->DATA 에있다. 서비스루틴에서는 TPSVCINFO->DATA 에서데이터를받아서요청기능을처리한후, 결과를클라이언트에게전달하거나, 또다른처리를위하여다른서버에서비스처리를요구한다 Tmax 응용서버프로그램특징 Tmax 응용서버프로그램은 Tmax 에서제공하는 main() 과개발자가작성한업무처리서비스루틴으로구성된다. 서버프로그램은응용클라이언트프로그램처럼 Tmax 함수를이용하여작성된다. 이함수들은라이브러리 (libsvr.a) 로제공되며응용서버프로그램과같이컴파일된다. 프로그래머는서비스루틴만을개발하면된다. 이것은개발을용이하게하며개발기간을단축시켜준다. 서버는하나이상의서비스로이루어진다. 게다가서버자신이클라이언트가되어다른서버에서비스를요청할수있다. Tmax 함수가통신및데이터변환을제공하므로, 개발자는유닉스내부시스템에대한깊은이해없이 Tmax 함수만으로프로그래밍을할수있다. XA 모드의경우데이터베이스연결과해제가 Tmax 서브루틴에서제공되므로, 개발자는 DB open 과 close 에신경쓰지않아도된다. 참고 : 여기서서비스는 tpcall 등의함수에첫번쨰인자로쓰이며클라이언트의요청사항을처리하는최소단위이다. 이런서비스는하나의서비스에서클라이언트의요청을모두처리할수도있고다른서비스를다시호출할수도 (tpcall, tpacall, etc) 있으며다른서비스에게서비스처리를전달 (tpforward) 할수도있다. (C 에서프로그램내의함수와유사함.) 서버는이런서비스를하나이상 (UCS 의경우하나도안가지고있을수도있다 ) 가지고있다. (C 에서하나의프로그램과유사함.) 16

18 2 Tmax API 함수 Tmax API 는응용프로그래밍을위하여 Tmax 에서제공한다. Tmax API 는 X/Open 의 XATMI 와 TX 표준을따르는함수로이루어져있다. 이함수들은데이터베이스관리, Buffer 관리, 트랜스잭션범위설정, 클라이언트와서버간의통신등을제공한다. 이들함수는이기종간통신과데이터변환, 그리고분산트랜스잭션처리를가능하게한다. Tmax API 함수들은서버라이브러리와클라이언트라이브러리로구성된 Tmax 라이브러리로제공된다. UNIX 환경에서는서버쪽은 libsvr.a, 클라이언트쪽은 libcli.a 로제공되며, 응용프로그램과같이컴파일하여야한다. Tmax API 는 atmi.h, tmaxapi.h, 그리고 tx.h 를헤더파일로사용한다. atmi.h 는 Buffer 관리및통신과관련된 API 들이정의되어있고, tx.h 는트랜잭션과데이터베이스와관련된 API 들이정의되어있으며, tmaxapi.h 는비표준 API 의프로토타입이정의되어있다. 서버프로그램작성시필요한함수들, 즉 XATMI 와 TX 표준함수들을개략적으로소개하겠다. 2.1 TX 함수 TX 는응용프로그램과 Tmax 간의인터페이스로서트랜잭션범위를설정하고트랜잭션을수행한다. 이것은 X/Open DTP 표준을준수한다. 함수함수이름기능 17

19 tx_begin() 트랜잭션을시작한다. tx_commit() 트랜잭션을저장한다. tx_rollback() 트랜잭션을원상태로회복시킨다. tx_open() resource manager 를연다. ( 내부적으로작동됨 ) 트랜잭션 관리함수 tx_close() tx_set_transaction_t imeout() resource manager 를닫는다. ( 내부적으로작동됨 ). 트랜잭션 처리시 사용될 시간을 설정한다. tx_info() 전역 (global) 트랜잭션에대한정보를리턴한다. tx_set_commit_retu rn() 전역 (global) 트랜잭션의 승인시점을 지정한다. tx_set_transaction_ control() 한트랜잭션완료시자동으로새로운트랜잭션을시작한다. 표 1-1. TX Functions 18

20 2.2 비표준 API 함수 함수 함수이름기능 tpbroadcast () tpsendtocli() 서버나클라이언트에서시스템에기록된다수의클라이언트혹은특정클라이언트에게일방적으로비요청데이터를송신한다. 서버가현재연결된특정클라이언트에게일방적으로비요청데이터를송신한다. 비요청 데이터 tpnotify() 서버가클라이언트각자에게일방적으로비요청데이터를송신한다. tpsetunsol() 비요청데이터를처리하는함수를지정한다. tpgetunsol() 비요청데이터를수신한다. tpsetunsol_fl ag() 알림메시지를수락하는플래그를설정한다. tpchkunsol() 비요청메시지의도착을확인한다. 에러관련함수 tpstrerror() userlog() 에러번호에대한스트링메시지를확인한다. 지정된메시지를 ulog 파일에기록한다. ulog 파일은 Tmax 시스템환경파일에지정된 ULOGDIR 에생성된다. 19

21 함수 함수이름기능 ulogsync() UserLog() gettperrno() 메모리 Buffer 에있는 ulog 내용을디스크에저장한다. userlog() + ulogsync() Tmax 시스템호출에서발생한에러넘버 (errno) 를반환한다. gettpurcode() 개발자가설정한 urcode 를반환한다. tperrordetail( ) 시스템호출에서발생한에러에관한세부적인정보를얻는다. 소켓정보관련함수 tpgetpeer_ip addr() tpgetpeerna me() tpgetsockna me() 클라이언트의 IP 주소를제공한다. 클라이언트의 name 을확인한다. 클라이언트의소켓이름제공한다. 블록타임아웃설정함수 tpset_timeou t() 블록타임아웃을설정한다. 장애대책함수 tptobackup() 백업머신으로연결을맺는다. 20

22 함수 함수이름기능 연결함수 tpstart() Tmax 시스템과의연결시작한다. tpend() Tmax 시스템과의연결종료한다. tpenq() RQ 에데이터를저장한다. tpdeq() RQ 로부터데이터를추출한다. RQ tpqstat() RQ 에저장된데이터통계정보를획득한다. tpextsvcnam e() RQ 에저장된데이터의서비스이름을얻는다. Set Get and Environm ent tmaxreadenv () 환경변수를파일로부터읽는다. tpputenv() 환경변수값을설정한다. tpgetenv() 환경변수에대한설정값을반환한다. 기 타 tpscmt() 트랜잭션 commit 모드를변경및설정한다. tpgetlev() 트랜잭션모드여부를확인한다. tpchkauth() 인증에대한설정여부를확인한다. tpgprio() 설정된우선순위를확인한다. tpsprio() 우선순위를설정한다. 21

23 함수 함수이름기능 tpsleep() 지정된시간안에메시지가도착할때까지기다린다. tp_sleep() 데이터의도착을초단위로기다린다. tp_usleep() 데이터의도착을백만분의 1 기다린다. 초단위로 tpschedule() tpuschedule( ) UCS 유형의프로세스에서 TCS 채널을검사한다. UCS 유형의프로세스에서 TCS 채널을검사한다. 표 1-2. Non-Standard API Functions 2.3 XATMI (X/Open Application - Transaction Monitor Interface) API 함수 XATMI 는응용프로그램과 Tmax 간의인터페이스로서 Buffer 의할당및해제, 서버와클라이언트사이의통신등을제공한다. 이것은 X/Open DTP 의표준을준수한다. 함수함수이름기능 Buffer 관리 tpalloc() 데이터를송수신할 Buffer 를할당한다. 22

24 함수 tprealloc() Buffer 의크기를변경한다. tpfree() 할당된 Buffer 를해제시킨다. tptypes() Buffer 의유형및크기에대한정보를제공한다. 서비스요구 및 tpcall() tpacall() 서비스를 요청하고 응답이 올 때까지 기다린다. 서비스를요청한후다른일을처리한다. tpgetrply() 호출로처리결과를수신한다. 응답관련함수 tpcancel() 어떤서비스요청에대한응답을취소한다. tpgetrply() tpacall() 의호출에대한응답을받는다. tpconnect() 대화형모드로서비스와연결을설정한다. 대화형함수 tpdiscon() 대화형모드서비스와연결을비정상적으로종료한다. tprecv() 대화형모드에서메시지를수신한다. tpsend() 대화형모드에서메시지를송신한다. 서비스 종료관련함수 tpreturn() 서비스요청에대한응답을클라이언트에게보내고서비스루틴을종료한다. 표 1-3. XATMI API Functions 23

25 2.4 필드키 Buffer 관련함수 함 수 함수이름 기 능 fbget_fldk ey() 필드이름에대한필드키 (fieldkey) 값을반환한다. 필드키 사상함수 fbget_fldn ame() fbget_fldn o() fbget_fldt ype() 필드키에대한이름을반환한다. 필드키로부터해당필드키번호를가져온다. 필드키로부터 필드형 (type) 을 가져온다.( 정수값 리턴 ) fbget_strfl dtype() 필드키로부터 형 (type) 에 대한 포인트 값을 가져온다. Buffer fbisfbuf() 할당된 Buffer 가필드 Buffer 인지확인한다. 할당함수 fbinit() fbcalcsize( ) 필드 Buffer 로할당된메모리공간을초기화시킨다. 필드 Buffer 의크기를계산한다. fballoc() 필드 Buffer 를동적으로할당한다. fbfree() 필드 Buffer 를해제한다. 24

26 함 수 함수이름 기 능 fbget_fbsi ze() 바이트단위로필드 Buffer 크기를반환한다. fbget_unu sed() 사용되지않는필드 Buffer 공간을체크한다. fbget_used () 사용중인필드 Buffer 공간을바이트 (byte) 수단위로반환한다. fbrealloc() Buffer 의크기를다시줄이거나늘릴때사용한다. 필드접근및수정함수 fbput() fbinsert() 필드 Buffer 에필드키값을추가하거나덧붙일때사용된다. 필드 Buffer 에있는필드키의필드값을지정된필드키와포지션에저장한다. fbchg_tu() 내용을전송하기전에지정된필드 Buffer 내용을이동한다. 에 fbdelete() Buffer 의필드내용을삭제한다. fbdelall() 필드에들어있는모든값들을지운다. fbdelall_tu () 필드키어레이 (fieldkey[]) 에기재되어있는필드의모든내용을지운다. fbget() Buffer 에들어있는필드내용을얻는다. fbgetf() 필드 Buffer 에있는지정된필드키의필드값을얻는다. 25

27 함 수 함수이름 기 능 fbget_tu() fbnext_tu( ) 지정된 필드키의 값을 지정된 필드 순번에서 얻는다. 필드 Buffer 에서지정된필드키의필드값을연속적으로얻는다. fbgetalloc _tu() 리턴된데이터를저장하기위해다른 Buffer 내부적으로할당하고 Buffer 에게단지포인터만반환한다. 를 fbgetval_l ast_tu() fbgetlast_t u() 필드 Buffer 에서지정한필드키에있는필드데이터중마지막데이터값을얻는다. 필드 Buffer 에서지정한필드키의마지막순번의데이터를리턴한다. fbgetnth() 지정된필드값을찾는다. fbfldcount () 지정된 Buffer 안에포함된필드개수를반환한다. fbkeyoccu r() 필드키로지정된필드의개수를반환한다. fbispres() fbgetval() FBUF 의지정된필드안에요청된내용이있는지검사한다. 요청된내용의크기를반환하고, 위치는포인터로리턴한다. 26

28 함 수 함수이름 기 능 fbgetvall_t u() 필드의실값을 long 값으로반환한다. fbupdate() 필드 Buffer 에있는필드키의필드값을지정된순번에갱신한다. fbgetlen() 필드 Buffer 의선택된필드키에맞는필드데이타의첫번째어커런스의길이를반환해준다. 변환함수 fbtypecvt( ) 데이터형을변환시켜준다. fbputt() 새로운데이터값을데이터형과같이필드 Buffer 에덧붙여준다. fbget_tut() 필드데이터를지정한필드순번에넣는다. 그리고필드키의타입을지정한다. fbgetalloc _tut() 리턴된데이터를정의된데이터타입으로변환하여저장하기위해다른 Buffer 를내부적으로할당한다. fbgetvalt() 변환된값에포인터를리턴한다. fbgetvali() 어느필드데이터이든지정수형으로리턴한다. fbgetvals() 어느필드데이터이든지문자형으로리턴한다. fbgetvals_ tu() 지정한필드키의필드순번에해당하는필드데이터를문자형으로리턴한다. 27

29 함 수 함수이름 기 능 fbgetntht() 변형된값을리턴한다. fbchg_tut( ) 필드키의값을필드 Buffer 에있는다른정의된시작순번에있는것과바꾼다. Buffer 조작함수 fbbufop() fbbufop_p roj() 두필드 Buffer 의내용을비교, 복사, 이동, 변경한다. 필드키에해당되는 Buffer 를변경한다. fbread() 파일로부터필드 Buffer 를읽는다. 이함수는표준 I/O 라이브러리에사용된다. I / O fbwrite() 파일에적는다. 이함수는표준 I/O 라이브러리에사용된다. fbprint() 표준 I/O 에 Buffer 내용을출력한다. fbfprint() 필드 Buffer 에있는활용가능한데이터를파일스트림에출력 에 러 fbstrerror( ) getfberrn o() 필드 Buffer 조작시에러내용을문자열로얻는다. 에러가나타나면에러넘버로리턴한다. 기 타 fbmake_fl dkey() 새로운필드키를동적으로생성하지만 FDLFILE 에는써넣지않는다. 28

30 함 수 함수이름 기 능 fbftos() fbstof() fbsnull() fbstelinit() fbstinit() 필드 Buffer 에저장된데이터를 C 구조체 (stname) 에전송한다. C 구조체에저장된데이터를구조체파일로쌓여져있는필드 Buffer 로전송한다. 필드 Buffer 에위치한 C 구조체의선택된필드키의구조체의멤버변수가 NULL 인지확인 필드 Buffer 에위치한 C 구조체의각각의멤버변수를 NULL 로초기화 필드 Buffer 에위치한 C 구조체를 NULL 로 초기화한다. 표 1-4. FIELD Buffer Functions 29

31 3 Tmax Buffer 유형 서로다른하드웨어, 서로다른운영체제간의통신은데이터값이변할수있다. 이것은하드웨어, 운영체제마다데이터유형의길이 ( 바이트수 ) 가다르고, 메모리할당방식이다르기때문이다. 이와같이통신상의문제점을해결하기위해서, 대부분이기종간통신에서는데이터를문자형으로바꾼다. 문자형으로변환하면네트웍부하가증가되고많은시간이소요된다. 예를들어 100,000 이라는 int 형의데이터를전송할때 32 비트운영체제에서 4 바이트이지만, 문자형으로변환하면 6 바이트가필요하기때문이다. 하지만 Tmax 에서는네트웍부하의감소와개발자에게개발의용이성을위하여다양한형태의 Buffer 를지원한다 : STRING; CARRAY; X_OCTET; STRUCT; X_COMMON; X_C_TYPE; FIELD. STRING Buffer 는널값으로끝나는문자형의데이터통신시사용된다. CARRAY 와 X_OCTET Buffer 는길이가지정된문자형일때사용한다. 데이터를보낼때에는반드시길이를명시해주어야한다. STRUCT 와 X_C_TYPE Buffer 타입은 C 언어의구조체타입의데이터통신에사용한다. Buffer 를할당할때반드시하위유형, 즉구조체이름을제시하여야한다. X_COMMON Buffer 는멤버타입이 char, int, long 으로한정된 C 구조체이다. FIELD 버퍼는필드키와데이터의구조로구성되어있다. Buffer 데이터를전송할때쓰인다. 는 Tmax 는 Buffer 의무결성을보장하기위해표준통신형을사용한다. 통신시표준통신형은데이터타입과메모리할당방식에기준을정하는것이다. 송신하기전에 Buffer 의데이터를표준통신형으로변환하고수신하기전에역변환한다. 데이터의변환 / 역변환을통해, Tmax 는이기종간통신시문자형뿐만아니라구조체형의 Buffer 도사용 30

32 가능하게된다. 표준통신형으로의변환을위해 Tmax 에서는 sdlc 프로그램이사용된다. sdlc 프로그램을이용하면클라이언트쪽에는표준통신형데이터로의변환을위한정보테이블이, 서버쪽에서는표준통신형으로의변환 / 역변환프로그램이생성된다. 서버쪽의변환 / 역변환프로그램은응용서버프로그램과함께컴파일되어야한다. 클라이언트쪽의정보테이블은사용된하드웨어와운영시스템을적응시키기기위해데이터를변환한다. 결론적으로구조체 Buffer 를사용할때반드시반드시 sdlc 명령을통하여클라이언트에는데이터정보테이블을, 서버에는변환 / 역변환프로그램을생성하여야한다. STRING, CARRAY, X_OCTET 버퍼는이기종간에도 string 형통신이가능하므로표준버퍼형으로의변환이필요없다.. STRUCT, X_C_TYPE, X_COMMON 는구조체 Buffer 이므로표준통신형으로변환되어야하고컴파일시추가되어야한다. 아래는구조체 Buffer(STRUCT, X_C_TYPE, X_COMMON) 를사용하는응용프로그램에서컴파일흐름이다. 여기서구조체 buffer 의이름은 demo.s 이다. 31

33 그림 1-2. 구조체 buffer 를이용한 Application 프로그램의컴파일 FIELD Buffer 는자주사용하는버퍼형태로 Macro 를사용하여조작하므로배우는데나사용하는데있어구조체보다쉽다. 아래는 FIELD Buffer(FIELD) 를사용하는응용프로그램에서컴파일흐름이다. 여기서 FIELD buffer 의이름은 demo.f 이다. 32

34 그림 1-3. FIELD buffer 를이용한 Application 프로그램의컴파일 자세한사항은 Tmax FDL Reference Manual 을참조하도록한다. 따라서 Tmax 응용프로그램개발자는 Tmax 에서제공하는다양한 Buffer 를사용함으로써아래와같은효과를얻을수있다 : 응용프로그램은다양한 Buffer 로업무프로그램을보다유연하게개발할수있도록한다. 데이터변환에필요한프로그램을필요로하지않는다. 네트워크부하를감소시킨다. 초기에설정한데이터유형을송신 / 수신할수있게함으로써문자형데이터로변환하는데따르는네트워크부하를감소시킨다. 33

35 4 Tmax 통신유형 Tmax 시스템에서응용서버와클라이언트사이의통신은동기통신, 비동기통신, 대화형통신의 3 가지유형이있다. 동기통신은클라이언트가 tpcall() 을호출하여서버에요청을보내고서버에서응답이올때까지블럭킹되어기다린다. 비동기통신은클라이언트가 tpacall() 을호출하여서버에요청을보낸후서버에서응답이올때까지기다리지않고, 다른일을처리할수있다. 응답을받고자할경우 tpgetrply() 를호출하여서버로부터응답을받는다. 대화형통신은 tpconnect() 서비스를연결하고 tpsend() 로메시지를보낸다. 그리고메시지를받을때는 tprecv() 로받는다. 동기 / 비동기통신은아래와같은특징을가진다 : 보통의경우동기형통신을가장많이사용한다. tpcall() and tpacall() 로서비스요청을한다. 데이터를보내기전에반드시 tpalloc() 으로송 / 수신 Buffer 할당해야한다 를 클라이언트는한번에하나의요청을보내고응답을받는다. 서버는요청을처리할때한건씩처리종료후다른요청을받는다. 서버의업무처리서비스루틴은 tpreturn() or tpforward() 에의해서끝난다. 대화형통신은아래와같은특징을가진다 : tpconnect() 로서비스요청을초기화한다. 34

36 데이터를보내기전에반드시 tpalloc() 으로송 / 수신 Buffer 할당해야한다. 를 서버는동기 / 비동기통신과는달리반드시대화형서비스함수만을사용하여프로그램을개발해야한다. 데이터를주고받기위해 tpsend() 와 tprecv() 를이용한다. 대화형통신에서 tpforward() 를사용할수없다. 대화형모드에서보통연결유지시간이길어잘사용하지않는다. 35

37 4.1 동기형통신 동기형통신은클라이언트가서비스를요청하고, 그응답이오거나 Timeout 이될때까지기다린다. 서비스를요청한후. 클라이언트는블록킹상태로응답을기다린다. 아래의그림은동기형통신을사용하는 Client/ Server 프로그램의동작원리를보여주고있다 : 그림 1-4. 동기형통신모델 36

38 4.2 비동기형통신 비동기형통신은클라이언트가서비스를요청하고응답을기다리지않고다른일을계속할수있다. 응답을받고자할때해당요청에대한응답을받는다. 서비스를요청하는 tpacall() 은호출시즉시반환되어다른서비스요청을처리할수있다. 하지만응답을받기위해호출하는 tpgetrply() 는응답이도착하거나타임아웃될때까지블럭킹되어기다린다. 아래의그림은비동기형통신을사용하는 Client/Server 프로그램의동작원리를보여주고있다 : 그림 1-5. 비동기형통신모델 37

39 4.3 대화형통신 tpconnect() 로연결을한후, tpsend() 와 tprecv() 를호출하여데이터를주고받는다. 데이터를보내려면 tpconnect() 와 tpsend() 에서플래그값의설정으로만움직이는연결컨트롤을가져야만가능하다. 아래는 client/server 프로그램중대화형통신모드의동작원리를보여주고있다 : 그림 1-6. 대화형통신모델 38

40 5 Tmax 클라이언트프로그램 5.1 Tmax 클라이언트함수개요 아래는 Tmax 함수중클라이언트프로그램작성시사용할수있는함수들이다 : 함수이름기능 연결함수 tpstart() tpend() 클라이언트 어플리케이션과 Tmax 를 연결한다. Tmax 와연결된클라이언트어플리케이션을해제한다. tpalloc() 데이터를송수신할 Buffer 를할당한다. Buffer 관리함수 tprealloc () Buffer 의크기를변경한다. tpfree() 할당된 Buffer 를해제시킨다. tptypes() Buffer 에있는정보를반환한다. 서비스요구 및 응답관련 tpcall() tpacall() 서비스를 요청하고 응답이 올 때까지 기다린다. 서비스를요청한후다른일을처리할수있으며 tpgetrply() 호출로요청결과를수신한다. 39

41 함수 tpcancel( ) 어떤서비스요청에대한응답을취소한다. tpgetrply () tpacall() 의호출에대한응답을받는다. tpconnec t() 대화형모드로서비스와연결을설정한다. 대화형함수 tpdiscon( ) 대화형모드서비스와연결을비정상적으로종료한다. tprecv() 대화형모드에서메시지를수신한다. tpsend() 대화형모드에서메시지를송신한다. 표 2-1. 클라이언트함수 5.2 Tmax 클라이언트함수 Tmax 연결및해제 int tpstart(tpstart_t *tpinfo) Tmax 시스템에접속하다. - TPSTART_T 구조체의항목 char cltname[maxtident + 2]; /* MAXTIDENT = 16 */ => 비요청메시지수신시사용되는사용자구별이름 char dompwd[max_passwd_length+2]; /* MAX_PASSWD_LENGTH = 16 */ => 시스템접속제어보안을위한암호 40

42 int tpend() char usrname[maxtident + 2]; => 사용자인증보안을위한사용자계정 char usrpwd[max_passwd_length + 2]; => usrname 에해당하는암호 int flags; => 비요청메시지유형과시스템접근방법결정 Tmax 시스템과의연결을끊음. 클라이언트프로그램에서가장먼저할일은 Tmax 시스템에연결하는것이다. 즉클라이언트는어떤서비스를요청하기전에먼저 Tmax 시스템에연결되어야만한다. 만약 tpstart() 가호출되기전에서비스를요청하였다면, 내부에서자동적으로 tpstart() 를 NULL 인자로부른다. tpstart() 는 Tmax 응용프로그램과연결할때 TPSTART_T Buffer 를가지고 Tmax 시스템에연결할수있다. 이것은클라이언트정보, 비요청메시지처리여부, 그리고보안관련정보를담고있다. 보안은시스템접속보안과사용자인증보안관련정보가포함된다. cltname 은최대길이 18 자이며, NULL 로끝나는문자열이다. cltname 은응용프로그램에서정의한이름이고, tpbroadcast() 에서일방적인데이터를보낼클라이언트를지정하기위해사용된다. dompwd 는시스템접속보안에대한 Tmax 시스템의단일암호이다. 만약시스템접속제어보안이설정된다면, 이항목에 Tmax 환경파일중 *DOMAIN 절의 OWNER 항목에지정된계정에해당하는암호를등록하면된다. 암호를옳게등록하여야만시스템접속에성공한다. 특별히등록하지않으면 NULL 로전달된다. usrname, usrpwd 는사용자인증보안을위해사용되는항목이다. 만약사용자인증보안이설정된다면, Tmax 시스템에인증가능한계정과그에해당하는암호를각각등록하면된다. 이를등록하지않거나인증된사용자가아니면 Tmax 시스템접속에실패한다. 특별히등록하지않으면, NULL 로전달된다. flags 는자발적인메시지처리와시스템접근방법을결정하기위해사용한다. 41

43 TPUNSOL_HND : 비요청메시지를받지만클라이언트가그것을받아들일지를결정할수있다. TPUNSOL_IGN : 비요청메시지무시 TPUNSOL_POLL: 비요청메시지허락 위와같이 TPSTART_T Buffer 를사용하겠다면 tpstart() 를호출하게전에 tpalloc() 으로 Buffer 를할당해야한다. Buffer 타입은 tpstart() 만을위한 TPSTART 로지정하여야한다. TPSTART_T Buffer 구조체는 atmi.h 헤더파일에선언되어있다. 에러가나타날때 tpstart() 와 tpend() 는 1 값을리턴하고, 외부전역변수인 tperrno 에에러번호가설정된다. 에러의각사항은 Tmax Error Message Reference 를참조하기바란다. <Ex 1> # include <usrinc/atmi.h> # include <usrinc/tmaxapi.h> main ( ) { if (tpstart((tpstart_t*) NULL ) == -1 ) { error processing routine buffer 할당. 사용자입력을받아서비스함수를호출서버로부터응답을받음... buffer 해제. if (tpend() == -1 ) { error processing routine <Ex 2> 42

44 # include <usrinc/atmi.h> # include <usrinc/tmaxapi.h> main() { TPSTART_T *tpinfo; /* TPSTART Buffer 할당 */ if((tpinfo = (TPSTART_T *)tpalloc( TPSTART, NULL, sizeof(tpstart_t)))== NULL){ error processing routine /* TPSTART_T 구조체항목 */ strcpy(tpinfo->dompwd, tmax1234 ); strcpy(tpinfo->usrname, tmax ); strcpy(tpinfo->usrpwd, tmax1234 ); /* Tmax 시스템에접속 */ if(tpstart(tpinfo) == -1){ error processing routine..... tpend( ) ; 43

45 5.2.2 Buffer 관리 서로다른하드웨어나운영체계에있어서메모리할당방식과데이터유형의크기차이로송신한데이터와다른데이터값을가질수있다. 따라서일반적인클라이언트 / 서버환경에서이기종간의통신은주로문자형으로변환하여통신하게된다. 이것은네트웍부하를증가시키는원인이되기도한다. Tmax 에서는통신에서사용할수있는 7 개의 Buffer 를지원한다 :STRING, CARRAY, X_OCTET, STRUCT, X_COMMON, X_C_TYPE, FIELD. STRING Buffer 타입은널로끝나는문자열의데이터일때사용된다. CARRAY 와 X_OCTET Buffer 타입은길이가지정된문자형의데이터일때사용된다. Buffer 를할당하거나보낼때반드시길이를명시하여야한다. STRUCT 와 X_C_TYPE Buffer 타입은 C 언어의구조체타입의데이터일때사용한다. Buffer 를할당할때반드시하위유형, 즉구조체이름을지정하여야한다. X_COMMON 은구성요소가 char, int, long 만가능한 C 언어구조체이다 char *tpalloc(char *type, char *subtype, long size) : Buffer 할당 type : Buffer 유형 subtype : Buffer 의하위유형 size : Buffer 크기 tpalloc() 은서비스요청이나응답시필요한 Buffer 사용하는함수이다. 를할당하기위해 type 은앞에서언급한 7가지타입이지원된다. subtype 은 C 언어에서선언된구조체의이름이다. 그리고 Buffer 유형이 X_C_TYPE STRUCT, X_COMMON 일경우에만사용하며, 그외의경우에는 NULL 을갖는다. 44

46 size 는 CARRAY 와 X_OCTET 에서는반드시지정하여야하며이를제외하고는생략가능하다. 즉 0 으로지정하면각 Buffer 의기본크기가사용된다. STRING, STRUCT, X_C_TYPE, X_COMMON 의기본크기는 1024byte 이다. CARRAY 의기본크기는 0 이지만 Buffer 를할당할때에는반드시 0 보다커야한다. tpalloc() 이성공하면 char 타입의포인터를반환한다. 따라서 STRING 와 CARRAY 가아닌 C 언어구조체인경우에는반드시적합한형변환을하여야한다. tpalloc() 시에러가발생하면 NULL 포인터를반환한다. 에러는지정되지않은 Buffer 타입을사용하거나 STRUCT 타입에서 subtype 을지정하지않는경우에주로발생한다. <Ex 1> struct account *accp;... accp = (struct account *) tpalloc( X_C_TYPE, account, sizeof(struct account)); /* X_C_TYPE 타입은 subtype 을지정하여야함. */ <Ex 2> char *data; long datalen;... datalen = 512; data = tpalloc( CARRAY, NULL, datalen); /* CARRAY 인경우는 datalen 이 0 보다커야함. */ <Ex 3> char *data;... data = tpalloc( STRING, NULL, 0); /* size 가 zero 이면 STRING 타입은디폴트로 1024 byte 가할당됨. */ 45

47 <Ex 4>... /* C 언어구조체인경우에는반드시적합한형변환. */ if ((strdata = (struct strdata *)tpalloc( STRUCT, strdata, sizeof(struct strdata))) == NULL){ fprintf(stderr, tpalloc failed\n ); exit(0) ; strdata->id = cltid; strdata->passwd = cltpasswd; strcpy(strdata->msg, cltmsg);... <Ex5>... FBUF *sndbuf, *rcvbuf; char sndata[30], rcvdata[30];... if ((sndbuf = (FBUF *)tpalloc("field", NULL, 0)) == NULL) { error processing routine if ((rcvbuf = (FBUF *)tpalloc("field", NULL, 0)) == NULL) { error processing routine... fbput(sndbuf, INPUT, sndata, 0); 서비스호출 fbget(rcvbuf, OUTPUT, rcvdata, 0);... 46

48 char *tprealloc(char *bufptr, long size) Buffer 크기재조정한후새롭게할당된 Buffer 의포인터를반환함. bufptr : 재조정이될 Buffer 에대한포인터 size : 새로운 Buffer 의크기 tprealloc() 은 tpalloc() 으로할당된 Buffer 의크기를조정하고자하는경우에사용한다. 할당되지않은 Buffer 를조정하고자하는경우에는 tperrno 에 TPEINVAL 로설정되고크기조정에실패한다. tprealloc() 으로반환되는포인터는원래 Buffer 와같은형의 Buffer 를가리키지만주소는변경될수있다. 따라서 Buffer 크기를조정하였다면반드시 tprealloc() 에서반환된 Buffer 의포인터를사용하여야한다. tprealloc() 이실패하면 NULL 포인터를반환하고 tperrno 을설정한다. tperrno 의각사항은 Tmax Error Message Reference 를참조하기바란다. <Ex 1> char *data;... data = tpalloc( STRING, NULL, 512);... if ((data = tprealloc(data, 1024)) == NULL){ /* tpalloc() 으로할당된 Buffer 이어야한다. */ error processing routine <Ex 2> char *octet_ptr; char *ptr1, *ptr2;... octet_ptr = tpalloc( X_OCTET, NULL, 25);... if ((octet_ptr = tprealloc(octet_ptr, 40)) == NULL){ error processing routine 47

49 void tpfree(char *bufptr) 할당된 Buffer 를해제시킴 ( 반환값이 void 임을유의 ) bufptr : 해제시킬 Buffer 에대한포인터 tpfree() 은 tpalloc() 이나 tprealloc() 으로할당되었거나재조정된 Buffer 를해제한다. 만일 tpalloc() 이나 tprealloc() 으로할당된 Buffer 가아닌 Buffer 를 tpfree() 로해제하려고하면그 Buffer 는해제되지않으며 error 도반환하지않음에유의한다. < Ex > char *octet_ptr; char *ptr1, *ptr2; octet_ptr= tpalloc( X_OCTET, NULL, 25);... octet_ptr= tprealloc(octet_ptr, 40); tpfree(octet_ptr) ; long tptypes(char *ptr, char *type, char *subtype) 이미할당된 Buffer 의유형과하위타입을알아냄. ptr : 할당된 Buffer 에대한포인터 type : 할당된 Buffer 유형에대한포인터 subtype : 할당된 Buffer 의하위유형에대한포인터 tptypes 는 tpalloc() 이나 tprealloc() 으로할당된 Buffer 의유형을판단한다. 첫번째인자는 Buffer 에대한포인터를가지고나머지두개의인자에는그 Buffer 의유형과하위유형을반환한다. Buffer 의유형을얻는데실패하면 1 을반환하고 tperrno 에에러를설정한다. <Ex > char type[9], subtype[17]; long len; 48

50 char *octet_ptr... octet_ptr = tpalloc( X_OCTET, NULL, 25);... len = tptypes(octet_ptr, &type, &subtype); 49

51 5.2.3 동기통신 int tpcall(char *svc, char *sbuf, long slen, char **rbuf, long *rlen, long flags) 동기적인송신과수신처리. ( 클라이언트는결과가 RETURN 될때까지대기함.) svc : 호출되는서비스이름 sbuf : 보내는 Buffer 의포인터 slen : 보내는 Buffer 의데이터길이 (CARRAY, X_OCTET, MULTI STRUCT 일때반드시설정 ) rbuf : 응답 Buffer 의포인터주소 rlen : 응답 Buffer 의데이터길이 flags : 호출시사용되는옵션 TPNOTRAN : 트랜잭션모드에서의호출이아님 TPNOCHANGE : 받는버퍼의타입이자동으로변경되지않음 TPNOBLOCK : 서비스나서버의실패에대한응답을받지않음 TPNOTIME : Blocking time-out 을무시함 TPSIGRSTRT : 시그널캐취를허가함 TPNOFLAGS : 아무옵션도설정하지않음 tpcall( ) 은클라이언트가서비스를요청하고응답이올때까지기다리는동기통신이다. 50

52 그림 2-1. 동기형통신 tpcall() 은첫번째인자에서지정한 svc 로서비스요청을보낸다. 이서비스는 Tmax 응용서버프로그램에서제공되고있는것이어야한다. sbuf 는요청하는데이터의주소를가리키는포인터로써, tpalloc() 으로생성된것이어야한다. Buffer 타입은응용처리서비스루틴에서의타입과일치시켜야한다. 일치하지않으면시스템은 tperrno 에 TPEITYPE 을설정하고 tpcall() 은실패한다. 보낼데이터가없는경우 sbuf 을 NULL 로설정하면 slen 의값은무시되고, Buffer 를할당할필요도없다. slen 은보낼 Buffer(sbuf) 의크기를가리킨다. STRUCT, X_COMMON, X_C_TYPE, STRING, FIELD 는 tpalloc() 에서할당된크기대로통신에서사용하기때문에 slen 을 0 으로설정할수있다. CARRAY, X_OCTET 또는 MULTI-STRUCT 유형은반드시 slen 길이를지정해야한다. rbuf, rlen 은응답 Buffer 에대한주소와 Buffer 길이이다. 응답 Buffer(rbuf) 도보낼 Buffer 처럼 tpalloc() 으로미리만들어져야한다. 만일 tpcall() 이성공적으로수행되었더라도응답데이터가없다면 *rlen 는 zero 로설정된다. 에러가발생하면 *rbuf 이나 rlen 이 NULL 로설정된다. 보내는 Buffer 와받는 Buffer 를같이사용할수있다. 이때받는 Buffer(rbuf) 는보내는버퍼의주소로설정하여야한다. 즉 (char **)&sbuf 와같이지정해야한다. 만일서버로부터받는데이터가처음할당된 Buffer 크기보다크다면, 받는 Buffer 는자동적으로커지며 Buffer 의주소도달라질수있다. 또한보낼 Buffer 와받을 Buffer 를같이사용할때는주소가동시에달라진다. flags 는어떤방식으로통신할것인지를지정한다. 51

53 TPNOTRAN tpcall() 이트랜잭션범위 (tx_begin() 부터 tx_commit() 이나 tx_rollback() 사이 ) 에포함되더라도 TPNOTRAN 의 tpcall() 로요청된서비스는트랜잭션의범위에서제외된다 TPNOCHANGE tpcall() 에서받을응답 Buffer 가 tpalloc() 으로할당된타입과다를수있다. flags 을 TPNOCHANG 로설정하면처음할당된 Buffer 와응답 Buffer 의유형이일치되어야만한다 TPNOBLOCK 이플래그는블럭킹상태가존재할때어떤행동을취할지를나타낸다. 통신에서전형적인블럭킹은요청을보내고응답을기다리거나, 또는요청을받는서버큐나보내는내부큐가가득차서큐에쓰기위해기다릴때일어난다. 보통블럭킹이되면환경파일에정의된타임아웃시간만큼기다리게되며, 이시간이지나면 tperrno 에 TPETIME 로설정하고함수는실패된다플래그로 TPNOBLOCK 을설정한다는것은내부큐에대한블록킹상태가되면즉각실패가되고요청데이터를보내지않는다. tpcall() 에서는데이터를보낼때와응답을기다릴때블럭킹이일어날수있다 TPNOBLOCK 은데이터를보내기위해내부큐에 write 할때에만해당된다. 이때내부큐 (CLH 큐 ) 가가득찼으면블로킹되지않고즉시반환된다 TPNOTIME 플래그를 TPNOTIME 으로설정할때시스템은블러킹타임아웃을무시한다. 즉타임아웃시간을무시하고응답이올때까지기다리겠다는것이다. 만약트랜잭션이존재한다면트랜잭션타임아웃시간이적용되고이플래그는무시된다 TPSIGRSTRT 이플래그는시그널인터럽트수용하고자할때사용한다. 내부에서시그널인터럽트가발생하여시스템함수호출이 52

54 방해될때, 시스템함수호출이재실행된다. 만약이플래그가설정되지않은경우시스템인터럽트가발생하였다면, 그함수는실패되고 tperrno 에 TPGOTSIG 로설정된다 <Ex 1> struct transf *transfp; long nrecv;... if ((transfp = (struct transf *) tpalloc( STRUCT, transf, sizeof(struct transf))) == NULL){ error processing routine transfp->b_id = q_branchid; transfp->balance = 0.0; strcpy(transfp->errmsg, ); if (tpcall(svc_name, (char *)transfp, 0, (char **)&transf, &nrecv, TPNOFLAGS)== -1){ /* 보낼 Buffer 와받을 Buffer 를같이사용 */ error processing routine else printf( Branch %ld balance is %.2f\n, transfp- >b_id,transfp->balance) ; <Ex 2> struct send_dat *strdata; char *data; long len; if ((strdata = (struct send_dat *)tpalloc( STRUCT, send_dat, 0))== NULL){ error processing routine if ((data = tpalloc( STRING, NULL, 512)) == NULL){ 53

55 error processing routine strdata->id=cltid; strdata->passwd=cltpasswd; strcpy(strdata->msg, cltdata); if (tpcall( sel_ora, (char *)strdata, 0, &data, &len, TPNOTIME) == -1) { error processing routine 54

56 5.2.4 비동기통신 int tpacall(char *svc, char *sbuf, long slen, long flags) Client 에서서비스를호출하고즉시다른일을할수있도록한다. svc : 호출하는서비스의이름 sbuf : 보내질 Buffer slen : 요구된 Buffer 의데이터길이 (CARRAY, X_OCTET, MULTI- STRUCT 인경우유의 ) flags : 호출모드결정. TPNOTRAN : 트랜잭션모드에서의호출이아님 TPNOREPLY : 응답을받지않음 TPBLOCK : 서비스나서버의이상유무응답을받음 TPNOBLOCK: 서비스나서버의실패에대한응답을받지않음 TPNOTIME : Blocking time-out 을무시함 TPSIGRSTRT : 시그널캐취를허가함 TPNOFLAGS : 아무옵션도설정하지않음 tpacall() 은서비스요청을위해 svc 에서지시된서비스루틴으로메시지를보내고제어를즉시반환한다. 그요청에대한응답을받기위해서는 tpgetrply() 를이용한다. sbuf, slen, flags 는 tpcall() 과같은방식으로사용한다. tpacall() 이성공적으로완료되었으면연결을구별할수있는정수 (call descriptor (cd), 이하구별자로명칭 ) 를반환하며, 구별자는 tpgetrply() 에서사용된다. 실패하게되면 -1 을반환한다. tpacall() 에는다음플래그들이있다 : TPNOREPLY 55

57 이플래그는요청을보내고응답을받지않겠다는것이다. 이플래그가설정되고 tpacall() 이성공적으로완료되었다면구별자로 zero 가반환된다. 이구별자 (cd) 는 tpgetrply() 에서사용할수없다. tpacall() 이트랜잭션상태일때는응답을반드시받아야함으로이 flags 을사용할수없다. 만약사용하려면 flags 를 TPNOTRAN 과함께사용하여트랜잭션참여의일부분에서벗어나야한다. TPBLOCK 이플래그는요청을보내고서비스나서버의이상유무에대한응답을받겠다는것이다. 이플래그가설정되고 tpacall() 이성공적으로완료되었다면 tperrno 는 TP_OK 로설정된다. tpacall() 이실패시 Tmax 에러값이반환된다. 반환된구별자 (cd) 로는요청한데이터를응답받기위한 tpgetrply() 에서사용된다. <Ex 1> if ((cd = tpacall(sname, data, len, TPNOREPLY)) == -1 ) { error processing routine <Ex 2> if ((cd = tpacall(sname, data, len, TPBLOCK)) == -1 ) { error processing routine int tpgetrply(int *cd, char **rbuf, long *rlen, long flags) 응답 Buffer 의데이터를받음. cd : tpacall() 호출에서반환된정수 ( 구별자 ) rbuf : 응답 Buffer 의포인터에대한주소 rlen : 응답 Buffer 의크기에대한포인터 56

58 flags TPNOTIME : Blocking time-out 을무시함 TPSIGRSTRT : 시그널캐취를허가함 TPNOCHANGE : 받는버퍼의타입이자동으로변경되지않음 TPNOBLOCK : 서비스나서버의실패에대한응답을받지않음 TPGETANY : 구별자를무시하고가능한모든응답을받아들임 tpgetrply() 는 tpacall() 에의해서보낸요청에대한응답을받는데사용한다. tpgetrply 는기본적으로블럭킹통신이다. 즉일단호출하면응답을받거나블럭킹타임아웃이발생할때까지기다린다. 타임아웃이발생하면호출은실패하고 tperrno 에 TPETIME 이설정된다. cd 는 tpacall() 이반환한구별자로써, 요청된것에대응하는응답을구별할수있도록한다. rbuf 와 rlen 은 tpcall() 인자와사용이동일하다. 물론 rbuf 는 tpalloc() 으로미리할당되어야한다. rlen 이 0이면응답받은 Buffer 에데이터가없는것이다. 함수호출이실패하면 *rbuf 와 rlen 은 NULL 로된다. flags 대부분은 tpcall() 에서설명이되었다. 만약 flags 의값을 tpgetany 로설정하면 cd 는무시되고먼저가능한응답을반환한다. 응답이없으면기본적으로응답이도착할때까지기다린다. 그림 2-2. 비동기형통신 <Ex> 57

59 ... if ((cd1 = tpacall( service1, buf1, 0, TPNOFLAGS)) == -1) error processing routine if ((cd2 = tpacall( service2, buf2, 0, TPNOFLAGS)) == -1)... error processing routine if (tpgetrply(&cd1, &buf1, &buf1len, TPNOFLAGS) == -1) error processing routine if (tpgetrply(&cd2, &buf2, &buf2len, TPNOFLAGS) == -1) int tpcancel(int cd) error processing routine 미응답된구별자를취소함. cd : tpacall() 호출에서반환된구별자 tpcancel() 은 tpacall() 로반환된구별자를취소한다. 전역트랜잭션에참여중인구별자를취소하려고하면에러가발생한다. 호출이성공하면 cd 는더이상사용할수없다. 실패하면 -1 이반환된다. <Ex 1>... if ((cd = tpacall( service1, buf1, 0, TPNOFLAGS)) == -1) error processing routine... if (tpcancel(cd) == -1) error processing routine... 58

60 5.2.5 비요청메시지처리 비요청메시지처리함수는메시지를무조건보내거나, 일방적으로보내는메시지를처리하기위한함수이다. 서버에서보내는일방적인메시지 ( tpbroadcast () ) 를언제나, 모든클라이언트가받을수있는것은아니다. 비요청메시지를받기위해서는먼저클라이언트가 Tmax 에접속되어있어야하고, Tmax 접속시비요청메시지를받겠다는정보를주어야한다. tpstart() 시사용하는 TPSTART_T 구조체의 flags 값을 TPUNSOL_POLL 이나 TPUNSOL_HND 로설정해야만서버에서보내는일방적인데이터를 Tmax 가중계하여준다 void *tpsetunsol(void(* disp)(char *data, long len, long flags))() 비요청메시지처리를위한함수를설정함. tpsetunsol() 로전달하는 Buffer 를받아서인자로지정된함수에서처리하도록하기위해사용한다. tpbroadcast() 을이용하여일방적인메시지를받기위해선 tpstart() 인자인 TPSTART_T 의구조체의 flags 을 TPUNSOL_HND 로설정하여야한다. <Ex1> main(int argc, char *argv[]) {... TPSTART_T *tpinfo;... tpinfo = (TPSTART_T *)tpalloc("tpstart", NULL, sizeof(tpstart_t)); if (tpinfo == NULL) { error processing routine... tpsetunsol(get_unsol); 59

61 ... void * get_unsol(char *data, long len, long flag) { printf("unsolicited data = %s\n", data); int tpgetunsol(int type, char **data, long *len, long flags) type : UNSOL_TPPOST, UNSOL_TPBROADCAST, UNSOL_TPSENDTOCLI data : 받을 Buffer len : 받을 Buffer 크기 flags TPBLOCK,TPNOCHANGE,TPBLOCK,TPNOTIME,TPSIGRSTRT tpgetunsol() 는 tpbroadcast() 로전달하려고하는 Buffer 를받고자할때사용한다. tpgetunsol() 를 이용하여 일방적인 메시지를 받기 위해선 Tmax 에 처음으로접속할때, tpstart() 인자인 TPSTART_T 구조체의 flags 값으로는 TPUNSOL_POLL 또는 TPUNSOL_HND 로설정하여야한다. 이 flags 값으로는 TPUNSOL_POLL, TPUNSOL_HND, TPUNSOL_IGN 이사용된다. TPUNSOL_IGN 은서버의일방적인메시지를무시하겠다는뜻이며, TPUNSOL_POLL 과 TPUNSOL_HND 는 서버의 일방적인 메시지를 받겠다는것이다. type 에 UNSOL_TPSENDTOCLI 로지정하면서버에서 tpsendtocli API 로보낸데이터를직접수신할수있다. data 는 tpbroadcast() 에서보내는 Buffer 이다. len 은받을 Buffer 인 data 의크기이다. flags 로는 TPBLOCK 과 TPNOBLOCK 이있다. 기본값은 TPBLOCK 이고, 이것은 tpgetunsol() 를호출하면받는큐룰체크하여서버에서메시지가 60

62 올때까지블록킹되어기다린다. TPNOBLOCK 는큐를체크하여메시지가없으면즉각반환된다. <Ex>... if ((rc_buf = (char*)tpalloc( STRING, NULL, 512)) == NULL){ exit(0); if ((val = tpgetunsol(unsol_tpsendtocli, rc_buf, &len, TPBLOCK)) < 0){ error processing routine 타임아웃변경 int tpset_timeout(int sec) Client 에서서버쪽에설정된블로킹타임아웃시간을변경하도록한다. sec : 변경할타임아웃시간. ( 초단위 ) 클라이언트는서비스를요청한후그에대한응답을일정한시간동안기다리게된다. 그시간안에응답이도착하면이를정상적으로수신하며, 만약이시간이지날때까지응답이도착하지않으면클라이언트는응답을기다리는일을중단하고에러를리턴한다. 후에응답이도착하면이를무시한다. 이시간이블로킹타임아웃시간이다. 이는 Tmax 환경파일중 *DOMAIN 절의 BLOCKTIME 항목에정의된다 (Tmax Administration Guide 참조 ). 정의된 BLOCKTIME 시간이 Tmax 시스템에접속된모든클라이언트에세적용된다. 이때, 클라이언트에서이시간을변경하고자할경우사용되는함수가바로 tpset_timeout() 이다. 서비스요청전에이 tpset_timeout() 함수를호출하면이후그클라이언트의서비스요청에대하여는 tpset_timeout() 으로변경한시간값이적용된다. 이는다시 tpset_timeout() 을호출하거나클라이언트가종료할때까지유효하다. sec 는초단위이다. <Ex> 61

63 main(int argc, char *argv[ ]) {.... if(tpstart(null) == -1) { printf( Tpstart failed\n ); exit(1); printf( tpstart-ok \n ); if((sndbuf = (struct kstrdata *) tpalloc( STRUCT, kstrdata, 0))== NULL) { error processing routine /* 10 초로블로킹타임아웃시간을변경 */ tpset_timeout(10); if (tpcall( BLOCK, (char *)sndbuf, 0, (char **)&rcvbuf, &rcvlen, TPNOFLAGS)== -1){ error processing routine sleep(3); /* 30 초로블로킹타임아웃시간을변경 */ tpset_timeout(30); if (tpcall( BLOCK2, (char *)sndbuf, 0, (char **)&rcvbuf, &rcvlen, TPNOFLAGS)== -1){ error processing routine.... tpend(); 5.3 Tmax 클라이언트프로그램컴파일 클라이언트프로그램의코딩이끝났다면이제컴파일하여실행파일을만들차례다. 클라이언트프로그램을컴파일하기위해서는개발자가작성한클라이언트프로그램, Tmax 클라이언트라이브러리, 구조체 62

64 Buffer 를사용한다면구조체파일이, 그리고필드키 Buffer 는필드테이블이정의된파일이준비되어야한다 클라이언트프로그램구성 클라이언트프로그램 : 개발자가작성한클라이언트프로그램이다 Tmax 클라이언트라이브러리 ( libcli.a / libcli.so) Tmax 가제공하는라이브러리로클라이언트프로그램개발시사용하는함수들의 object 코드이다 구조체파일 (.s) 클라이언트프로그램에서구조체 (STRUCT, X_C_TYPE, X_COMMON) 를사용하였다면 파일명.s 로끝나는구조체파일이필요하다. 이구조체파일을 sdlc 명령어를이용하여미리컴파일한다. 컴파일하면구조체의각데이터가표준통신형으로변환되는데필요한정보를담은이진 (binary) 형태의파일이생성된다. 이는클라이언트프로그램실행시에표준통신형으로데이터가송 / 수신되는데사용한다 필드키파일 (.f) 필드키구조를사용하였다면.f 로끝나는필드정의파일이필요하다. 이파일을 fdlc 명령어를이용하여컴파일하면, 이때필드키 Buffer 파일은 Key Mapping 을이용하여 필드키 Buffer 이름 _fdl.h 을만들어프로그램실행시사용하게된다. 기존의구조체파일과는달리사용자가원하는필드의값만을조작하고전달할수있어자원의낭비를줄일수있다. 하지만 key Mapping 하는과정에서의오버헤드도있다는점을간과해서는안될것이다 클라이언트프로그램컴파일 클라이언트프로그램을컴파일하여오브젝트파일을생성한다 (ex: aptest.c -> aptest.o). 이때, Tmax 에서제공하는 atmi.h( 또는 tmaxapi.h) 파일이 63

65 참조되어야하며, 만약구조체통신을한다면관련된구조체파일 (ex: demo.s) 도함께참조되어야한다. 오브젝트형태의클라이언트프로그램과클라이언트프로그램에서사용하는라이브러리, 그리고 Tmax 에서제공하는클라이언트라이브러리 (libcli.a 또는 liblia.so) 를함께링크하여실행파일을생성하도록한다. 그림 2-3. 구조체 buffer 를사용한클라이언트프로그램컴파일 64

66 그림 2-4. FIELD buffer 를사용한클라이언트프로그램컴파일 다음은 Tmax 클라이언트프로그램을위한샘플 makefile 이다. TARGET = <clientname> APOBJS = $(TARGET).o TMAXLIBD = $(TMAXDIR)/lib #TMAXLIBS 는 OS 별로다르다. #Solaris : TMAXLIBS = -lsocket -lnsl lcli #Compac, HP, IBM, Linux : TMAXLIBS= -lcli TMAXLIBS = -lcli #CFLAGS 는 OS 별로다르다. #Solaris 32bit, Compaq, Linux: CFLAGS = -O I$(TMAXDIR) #Solaris 64bit: CFLAGS = -xarch=v9 -O I$(TMAXDIR) #HP 32bit: CFLAGS = -Ae -O I$(TMAXDIR) #HP 64bit: CFLAGS = -Ae +DA2.0W +DD64 +DS2.0 -O I$(TMAXDIR) 65

67 #IBM 32bit: CFLAGS = -q32 brtl -O I$(TMAXDIR #IBM 64bit: CFLAGS = -q64 brtl -O I$(TMAXDIR CFLAGS = -O I$(TMAXDIR) #.SUFFIXES :.c.c.o: $(CC) $(CFLAGS) -c $< # # client compile # $(TARGET): $(APOBJS) $(TMAXLIBS) $(CC) $(CFLAGS) -L$(TMAXLIBD) -o $(TARGET) $(APOBJS) # clean: -rm -f *.o core $(TARGET) Tmax 에서제공되는예제프로그램에는 compile 이라는 shell script 를사용하여 make 를실행하고있다. 이 compile 이라는 shell script 를사용하기위해서는 command 에아래와같이입력을한다. compile c cli (=> 확장자를뺀클라이언트프로그램이름 ) 이렇게하면 compile 에서 make file 의 EXE 에확장자를뺀클라이언트이름을넣게되어동일한동작을하게된다. 66

68 5.3.3 클라이언트프로세스기동및종료 클라이언트를위한 Tmax 환경변수 TMAX_HOST_ADDR 및 TMAX_HOST_PORT 클라이언트프로그램은 Tmax 에연결할때환경변수에서필요한정보를얻기때문에미리 UNIX 쉘환경파일 (c shell:.cshrc, korn shell:.profile, bash shell :.bash_profile, etc.) 에 TMAX_HOST_ADDR, TMAX_HOST_PORT 가설정되어있는지확인한다. TMAX_HOST_ADDR=Tmax system node IP TMAX_HOST_PORT=8888 TMAX_HOST_ADDR 는 Tmax 가있는서버의 IP 를나타낸다. 이설정은매우중요한역할을한다. 클라이언트가요청한서비스가처음연결이설정된서버에있지않다면내부적으로다시연결을설정하여서버스를받게된다. 그리고클라이언트가트랜잭션처리를요구했다면처음연결이설정된 Tmax 가트랜잭션의조정자가되어 2PC(Phase Commit) 를주관하게되기때문이다. 따라서가장많이사용되는서비스가위치한서버의주소를설정함으로써네트워크부하경감은물론응답시간의단축도기대할수있다. Tmax 환경파일에 TPORTNO 가설정되어있지않으면디폴트로 8888 이사용된다. TMAX_BACKUP_ADDR 및 TMAX_BACKUP_PORT 장애에대비하여 TMAX_BACKUP_ADDR 과 TMAX_BACKUP_PORT 를 설정할수있다. 이를설정해놓으면클라이언트에서서비스요청시, 먼저 TMAX_HOST_ADDR 가지정하는서버로연결을시도하고, 만약그 서버가장애라면 TMAX_BACKUP_ADDR 가지정하는서버로다시 연결을시도한다. 이경우 TMAX_BACKUP_ADDR 이지정되어있지 않다면클라이언트의요청은재접속시도없이바로실패로끝난다. TMAX_BACKUP_PORT 는 TMAX_BACKUP_ADDR 가지정하는 Tmax 서버의포트번호이다. TMAX_CONNECT_TIMEOUT 67

69 네트워크장애에대비하여 TMAX_CONNECT_TIMEOUT 를지정할수있다. 이환경변수는클라이언트가정한시간동안대기한다. 만약 TMAX_CONNECT_TIMEOUT 에지정된시간내에설정되지않으면 tpstart() 는실패로끝난다. 네트워크장애시에는 tperrono 를 TPETIME 로설정한다. 만약 TMAX_BACKUP_ADDR/TMAX_BACKUP_PORT 가설정되면 tpstart() 는다른 TMAX_CONNECT_TIMEOUT 시간을백업호스트를하기위해시도한다. SDLFILE 이는구조체통신을하는클라이언트프로그램인경우, 반드시설정되어야하는환경변수이다. 이변수에는클라이언트프로그램에서사용하는구조체파일이 sdlc 로컴파일된 sdl 파일이정의되어야한다. 구조체파일은다음과같은형식으로컴파일한다 : $ sdlc -c -i 구조체파일이름 [ -o sdl 파일이름 ] [ -h 헤더파일이름 ] 구조체파일이름으로는파일하나또는여러개가정의될수있으며, 확장자에상관없다. * 가모든파일에대응하는와일드카드로사용될수있다. 구조체파일에는 struct 이름 {... ; 형식으로구조체가하나이상정의되어야한다. -o 옵션은생성될 sdl 파일이름을지정하는데사용되며, 이것이바로 SDLFILE 변수에정의되는이름이다. -o 옵션이생략된다면, 디폴트로생성되는 sdl 파일은다음과같다.: 구조체파일이하나인경우 : 확장자를제외한구조체파일이름.sdl Ex ) sdlc -c -i demo.s -> demo.sdl 구조체파일이여러개나열된경우 : 맨앞의구조체파일이름.sdl Ex ) sdlc -c -i stra.s bana.s orage.s -> stra.sdl Ex ) sdlc -c -i *.s -> a.sdl ( 현재디렉토리에존재하는.s 파일이 a.s, b.s, c.s 일때.) 68

70 -h 옵션은구조체정보를단순히헤더파일형식으로생성한다. -h 옵션이생략되면, 이름 _sdl.h 가생성된다. 이와같이 sdlc 로컴파일된 sdl 파일이 SDLFILE 변수에정의되어야한다. 구조체통신실행시, 구조체정보가 SDLFILE 에있으면 Tmax 서버와의통신을할수있다. FDLFILE 이는 FIELD buffer 통신을하는클라이언트프로그램인경우, 반드시설정되어야하는환경변수이다. 이변수에는클라이언트프로그램에서사용하는 FIELD buffer 파일이 fdlc 로컴파일된 fdl 파일이정의되어야한다. FIELD 파일은다음과같은형식으로컴파일한다 : $ fdlc -c -i FIELD 파일이름 [ -o fdl 파일이름 ] [ -h 헤더파일이름 ] -o 옵션은생성될 fdl 파일이름을지정하는데사용되며, 이것이바로 FDLFILE 변수에정의되는이름이다. -o 옵션이생략된다면, 디폴트로생성되는 fdl 파일은 tmax.fdl 이된다. -h 옵션은구조체정보를단순히헤더파일형식으로생성한다. -h 옵션이생략되면, 이름 _fdl.h 가생성된다. 이와같이 fdlc 로컴파일된 fdl 파일이 FDLFILE 변수에정의되어야한다. FIELD buffer 통신실행시, FIELD 정보가 FDLFILE 에있으면 Tmax 서버와의통신을할수있다. 유닉스환경파일에 Tmax 환경변수가설정되어있다면, 클라이언트프로세스를생성시키는데필요한준비는끝났다. 클라이언트프로세스는다른실행파일과같은방법으로실행하고종료시키면된다. 69

71 6 Tmax 서버프로그램작성 6.1 Tmax 서버함수개요 여기서는 ATMI 에서서버프로그램작성시필요한함수에대해알아본다. 서버또한클라이언트역할도할수있기때문에클라이언트에서사용하는함수도사용이가능하다. 함수이름기능 서비스요청 관련함수 tpreturn() tpforward() 서비스요청에대한응답을클라이언트에게보내고서비스루틴을종료한다. 또다른서비스를처리하기위해다른서버로서비스를의뢰한다. 비요청관련 함수 tpbroadcast( ) tpsendtocli () 클라이언트의요청이없더라도서버에접속된모든클라이언트에게자동으로메시지를송신한다. 클라이언트의요청이없더라도서버에서클라이언트가사전등록한요구메시지를자동으로송신한다. 서버초기화와종료관련함수 tpsvrinit() 서버를초기화한다. tpsvrdone() 서버의초기화를해제한다. 표 2-2. 서버함수 70

72 6.2 Tmax 서버함수 서비스루틴인자 서버프로그램은 Tmax 에서제공하는 main() 과서비스루틴으로이루어진다. main() 은데이터베이스연결및해제, 명령어라인옵션처리등의역할을하는루틴으로이루어져있으며, 서비스루틴은실제로클라이언트의요청을받아업무를처리하는루틴으로이루어져있다. 서버 main() 은클라이언트요청을받아서해당서비스루틴을 TPSVCINFO 구조체로호출하여요청을처리하게한다. TPSVCINFO 구조체는서비스를요청한클라이언트에대한정보와처리할데이터정보를가지고있다. TPSVCINFO 구조체는 atmi.h 헤더파일에선언되어있으며, 구성요소는아래와같다.: #define XATMI_SERVICE_NAME_LENGTH 16 struct tpsvcinfo { ; char name[xatmi_service_name_length]; /* 요청된서비스이름 */ char *data; /* 요청데이터 */ long len; /* 요청데이터길이 */ long flags; /* 서비스속성 */ Int cd; /* 연결구별자 */ typedef struct tpsvcinfo TPSVCINFO name 은클라이언트에서요청한서비스루틴의이름이다. data 는클라이언트가요청데이터를받기위해서사용되는 Buffer 로써, 서버 main() 안에서 tpalloc() 으로미리할당되어진다. 71

73 len 은요청한데이터의길이를나타낸다. flags 는서비스에게트랜잭션상태에있는지, 또는호출자가반드시응답을요구하는지등을알려준다. 예를들어 flags 가 TPTRAN 이라면서비스가트랜잭션모드안에있다는것을, TPNOTRAN 이라면현재의트랜잭션에참여할수있다는것을알게한다. cd 는연결구별자이다. 이것은어떤클라이언트에게응답을보내야할지를알게한다. 서버는클라이언트가요청한서비스를처리하기위해미리 Buffer 를 main() 에서할당하기때문에 tpreturn(), tpforward() 로통신할때 TPSVCINFO 의 data 를쓸것을권장한다. TPSVCINFO 의 data 에대해접근할때, 서버프로그램과클라이언트프로그램의 Buffer 유형이같아야한다. <Ex> 클라이언트부분 ) #include <usrinc/atmi.h>... main() { struct strdata *cltdata; if ((cltdata = (strcut strdata *)tpalloc( STRUCT, strdata, sizeof(struct strdata)) ) == NULL){ error processing routine... if ((tpcall ( SEL_SVC, cltdata, 0, (char **)&cltdata, &len, TPNOFLAGS))== -1){ error processing routine... 72

74 서버부분 ) 개발자가작성한서비스루틴으로써 main() 은 Tmax 에서제공 #include <usrinc/atmi.h>... SEL_SVC(TPSVCINFO *msg) /* 클라이언트와클라이언트의요청내용이들어있는구조체 */ { struct strdata *svcdata; /* Buffer 유형과일치하도록데이터형을변환 */ svcdata = (struct strdata *)msg->data;... svcdata->ip = sip; strcpy(msg ->data, svcdata); tpreturn(tpsuccess, 0, msg->data, sizeof(struct strdata), TPNOFLAGS); ; 서비스완료 서비스루틴의완료를표시하는함수로 tpreturn() 과 tpforward() 가있다. tpreturn() 은클라이언트에게응답을보내는것이며, tpforward() 는필요에의하여또다른서버로서비스요청을전가하고서비스를끝낸다 void tpreturn(int rval, int rcode, char *data, long len, long flags) 서비스요구에대한응답을클라이언트로보냄. rval : 서비스완료값을반환함 TPSUCESS : 서비스가정상처리됨 TPFAIL : 서비스가비정상처리됨. (tperrno 가설정됨.) TPEXIT: TPFAIL 과같은의미이며, 서버는종료 (exit) 함 rcode : 응용프로그램에서지정한반환값으로설정이됨 73

75 data : 응답 Buffer 에대한포인터 len : 응답 Buffer 의길이 (CARRAY, X_OCTET 또는 MULTI- STRUCT 인경우 ) flags : TPNOFLAGS tpreturn() 은서비스처리결과를클라이언트에게보내고서비스루틴을마친다. tpreturn() 은서비스루틴을마치면서컨트롤을서버메인으로반환한다. 만일이때서비스루틴에서비동기로다른서버의서비스를요청한것이있다면, 컨트롤이메인으로반환되기전에모두응답을받거나 tpcancel() 로그것들을무효화시켜야한다. 그렇지않으면응답들이왔을때, Tmax 메인에서응답내용을무시하고서비스를요청한곳에에러를반환한다. rval 인자는 TPSUCCESS, TPFAIL, TPEXIT 로설정될수있다. 이값들은서비스가응용레벨 (application level) 에서성공적으로완료되었는지여부를표시한다. TPSUCCESS 은처리가성공적임을표시하며, 응답메시지를요청자에게전달한다. TPFAIL 은처리가실패했음을표시하며, 요청자에세에러가전달된다. rval 를 TPFAIL 로지정하면서비스를요청한쪽의 tpcall() 이나 tpgetrply() 은실패하고 tperrno 에 TPESVCFAIL 이설정된다. TPEXIT 는기능적으론 TPFAIL 이수행되고, 응답이클라이언트에보내진후서버는 exit 한다. 기본값은 TPFAIL 이다. rcode 인자는요청자에게어플리케이션레벨에서정의된반환코드 (application-defined return code) 를알리기위해사용된다. 클라이언트에서는 rcode 로반환된값이전역변수 tpurcode 에설정된다. rcode 는서비스처리가성공하든실패하든보낼수있다. data 는클라이언트로반환될결과데이터에대한포인터이며이메시지 Buffer 는미리 tpalloc() 으로할당되어야한다. 서비스를시작할때 TPSVCINFO 형의 Buffer 는 main() 루틴에서미리할당되므로 tpalloc() 으로할당할필요가없다. main() 루틴에서할당된 Buffer 는서비스루틴에서해제시킬수없고단지 tprealloc() 으로 Buffer 크기만조정할수있다. Tmax 는메인에서할당된 Buffer 가서비스에서크기변화에상관없이동일한 Buffer 로처리한다. 서비스루틴안에서 tpalloc() 으로할당하여사용하는 Buffer 는 tpreturn() 시자동으로해제된다. 만일응답메시지에데이터영역이없다면 data 에 NULL 을설정할수있다. 74

76 len 은응답 Buffer 의데이터길이이다. data 영역이 NULL 이면 tpreturn() 은 len 인자를무시하고 zero 로설정하여보낸다. tpacall() 에서 TPNOREPLY 로설정될때서버는 tpreturn() 에서 buffer 와길이를무시하고컨트롤을메인으로반환하며서버는다음서비스를처리할수있게된다. flags 인자는아직사용하지않고있다. TPNOFLAGS 로설정하면된다. <Ex 1> /* 클라이언트에게 sdata 의내용을 len 만큼보냄. */ tpreturn(tpsuccess, 0, sdata, len, TPNOFLAGS); <Ex 2> /* 클라이언트에게 TPESVCFAIL 값을보내고내용을보내지않는다. */ tpreturn(tpfail, 0, transb->data, 0, TPNOFLAGS); void tpforward( char *svc, char *data, long len, long flags) 서비스요청을다른서버로보냄. svc : Buffer 를받을서비스이름 data : 보내질 Buffer 에대한포인터 len : 보내질 Buffer 의길이 (CARRAY 등에서사용 ) flags : 현재사용되지않음 tpforward() 는필요에의해다른서비스를요청할때사용한다. 이함수는 tpcall(), tpacall() 등의서비스를요청하는함수와는성격이다르다. tpforward() 를부른서비스측은결과값을받지않으며응답은서비스요청을받은서비스에서클라이언트로직접전달된다. 즉 tpreturn() 했을때응답은 tpforward() 호출한서비스루틴으로보내지지않고, 처음요청을보낸클라이언트에게로바로간다. tpforward() 는 tpreturn() 과거의같다. 호출되었을때메인에컨트롤이반환되고메인은다른일을처리할수있게된다. 주의할점은서버가클라이언트로서동작할때응답을 tpforward() 로요청하는서버에되돌릴수없다. 즉재귀하는요청은제공하지않는다. 75

77 하지만응답을기대하지않을때, TPNORPLY 로설정한요청은정상처리된다. 그림 2-5. tpforward <Ex> /*DEPOSIT 이라는다른서비스로서비스를요청함 */ tpforward( DEPOSIT, transb->data, 0, 0); 서버초기화와종료루틴 Tmax 에서기본적으로제공되는서브루틴으로 tpsvrint() 와 tpsvrdone() 이있다. 이것들은주로응용프로그램과연결할데이터베이스의 open 과 close 를담당하고, 명령어라인옵션처리등의기능을제공한다. 이서브루틴을개발자가작성하지않으면 Tmax 에서기본적으로제공된다 int tpsvrinit(int argc, char **argv) : 서버의 Start-Up 루틴 tpsvrinit() 는서버를실행할때초기화를위한루틴이며, 만일사용자가작성하지않으면기본으로제공되는초기화루틴이포함된다. 역할은데이터베이스를열고, 명령어라인옵션 (command line option) 을받아서 76

78 초기화하는작업을한다. 이것은서버프로그램에연결할 NonXA 모드데이터베이스를만들기위해사용한다. <Ex> #include <stdio.h> #include <usrinc/atmi.h> EXEC SQL INCLUDE sqlca.h; tpsvrinit(int argc, char **argv) { EXEC SQL begin declare section; char user_name[30]; char user_passwd[30]; EXEC SQL end declare section; int c; /* 명령어라인옵션을받아서처리한다.*/ while ((c = getopt(argc,argv, "U:P:"))!= EOF) { switch((char)c) { case 'U': strcpy(user_name, optarg); break; case 'P': strcpy(user_passwd, optarg); break; /* 데이터베이스연결 */ EXEC SQL CONNECT :user_name IDENTIFIED BY :user_passwd; if (sqlca.sqlcode!= 0) { error processing routine return(0); 77

79 void tpsvrdone() : 서버종료루틴 서버가메모리에서내려올경우 (tmdown 명령실행시 ) 에수행되는루틴으로만일작성하지않으면 Tmax 에서기본적으로제공되는종료루틴이실행된다. 역할은필요에의해할당된모든자원을닫고반환한다. 주로데이터베이스를닫는루틴으로사용된다. <Ex> void tpsvrdone() { EXEC SQL COMMIT WORK RELEASE; 78

80 6.2.4 XA 모드와 NonXA 모드 서버프로그램은트랜잭션과데이터베이스연결형을가짐으로써 XA 모드, Non XA 모드로구별된다. Tmax 시스템이기동되어있다면데이터베이스재기동시에도 Tmax 시스템을재기동할필요없이내부적으로재연결이맺어지기때문에서비스가정상적으로이루어진다. XA 모드는분산트랜잭션처리를함에있어 X/Open DTP 모델을표준으로삼는다. 예를들어분산환경하에서트랜잭션을그룹지어다양한서비스들을요청한다. Tmax 에서제공하는 TMS 서버는트랜잭션처리를관리한다. 개발자는트랜잭션범위와제어를설정할수있다.(tx_begin, tx_commit, tx_rollback 등을사용한다.) NonXA 모드는네이티브 SQL 과정확하게 RDBMS 에연결된트랜잭션제어를가진서버프로그램방식이다. NonXA 모드는네이티브 SQL 로 RDBMS 와직접적으로연결하여트랜잭션제어를서버프로그램이가지고있는방식이다. NonXA 모드는 Tmax 에서제공하는트랜잭션을사용할수없다. 또한 local 트랜잭션만이가능하게된다. XA 모드는다중 RDBMS 와함께분산개발환경에서사용한다. 또한항상일관된데이터가있는시스템에사용된다. XA 서비스내에서서버트랜잭션을수행할때, 서버프로세스가비정상종료되는경우에해당트랜잭션은롤백된다. XA 모드서버프로그램은 XA 모드서버그룹에속해있다. Tmax 의 TMS 프로세스는데이터베이스연결과트랜잭션을관리한다. 다음은 Tmax 환경파일에있는 XA 모드서버그룹환경설정의예이다. *SVRGROUP svg1 NODENAME = tmax, DBNAME = ORACLE, OPENINFO = ORACLE_XA+Acc=P/scott/tiger+SesTm=600, TMSNAME = svg1_tms *SERVER svr1 SVGNAME = svg1 79

81 Non XA 모드서버프로그램은배치타입이나간단한서버프로세스의쿼리에적합하다. Non XA 모드에서도트랜잭션범위와제어를설정할수있다. 하지만 Non XA 모드의유저어플리케이션과 RDBMS (direct connection) 사이에서만가능하다. Tmax 와는전혀관련이없다. Non XA 모드에는 XA 모드와 2 가지다른점이있다. 첫째로유저어플리케이션의 SQL 을사용함으로써 RDMBS 와연결하거나연결을끊는다. 둘째로서버프로그램은트랜잭션을요청할수있지만클라이언트프로그램은할수없다. Non XA 서버프로그램은 DB 와연결하거나해제할때 tpsvrinit() 와 tpsvrdone() 루틴을사용하는것을추천한다. 다음은 Tmax 환경파일의 Non XA 모드서버그룹환경설정예이다. *SVRGROUP svg1 NODENAME = tmax *SERVER svr1 SVGNAME = svg1 서버프로그램의 XA 모드설정여부는어플리케이션디자인단계에서결정되어야한다. 위에서언급한것과같이 XA 모드는분산환경에서하나이상의데이터베이스를처리하는데필요하다. 그러나 Non XA 모드는간단한셀렉트쿼리나수행시간이긴배치서버프로그램을하는데적당하다 비요청메시지관련인터페이스 Tmax 에서서버는클라이언트가요청하지않은메시지를클라이언트에게일방적으로보낼수있다. 이것은 Tmax 에접속되어있는클라이언트에게알리고싶은메시지를전달하고자할때사용한다. 비요청메시지를받을수있는클라이언트는 Tmax 에접속되어있어야하고, Tmax 접속시비요청메시지를받겠다고플래그값을설정해야한다. 80

82 Int tpbroadcast( char *lmid, char *usrname, char *cltname, char *data, long *len, long flags) 비요청메시지를보냄. lmid : 메시지를받을대상이되는노드이름 usrname : 메시지를받을대상이되는사용자이름 cltname : 메시지를받을클라이언트그룹 data : 메시지 Buffer len : 메시지 Buffer 의길이 flags : 메세지송신시사용되는옵션 TPNOBLOCK : 서비스나서버의실패에대한응답을받지않음 TPNOTIME : Blocking time-out 을무시함 TPSIGRSTART : 시그널캐취를허가함 이함수는클라이언트와서버가다른클라이언트에게로비요청메시지를보내고자할때사용한다. 이때비요청메시지를받을클라이언트는 Tmax 에접속되어있어야하며, tpstart() 에서비요청메시지를받겠다는플래그로접속되어있어야만한다. 받을대상이되는클라이언트는 cltname 에설정된다. cltname 정보는 tpstart() 호출시 TPSTART_T 구조체의 cltname 에설정된값이다. <Ex>... ret = tpbroadcast(null, "user", cli1, (char *)msg->data, 0, 0); if (ret < 0) { error processing routine... 81

83 int tpsendtocli(int clid, char *data, long len, long flags) clid : Tmax 에서얻은클라이언트의유일한값 data : 보낼 Buffer 에대한크기 len : Buffer 크기 flags : 메세지송신시사용되는옵션 TPFLOWCONTROL : 클라이언트의상태를점검하고다른메시지를요청할수있는지확인함 TPUDP : 호출자가데이터를송신할때, 송신할내부버퍼에전달될메세지가가득차서보내지못할경우데이터를버려도됨. TPUDP TPFLOWCONTROL : TPFLOWCONTROL flag 와비슷하지만이 flag 는큐가가득찼을경우 1 이아닌일반적인결과물을 return 함 TPNOBLOCK : 서비스나서버의실패에대한응답을받지않음 tpsendtocli() 는단지서버에서만사용할수있고, 클라이언트에서는사용할수없다. tpsendtocli() 은어떤요청에대한응답을전송하는 tpreturn() 과는달리서버가클라이언트에게일방적으로메시지를전송하는데사용한다. clid 는 tpgetcliid() 라는 API 를써서얻어낼수있고, 일방적인메시지를전달할대상을구별하는값이다. data 는보낼 Buffer 의포인터이고 len 은 Buffer 의길이이다. <Ex>... int clid, ret;... clid = tpgetclid(); if (clid < 0) { 82

84 error processing routine... ret = tpsendtocli(clid, unsolmsg, strlen(unsolmsg), 0); if (ret < 0) { error processing routine 83

85 6.3 서버프로그램 개발자가서버프로그램을모두작성하였다면이제컴파일을할차례이다. 서버프로그램컴파일은유닉스프로그램과동일하지만미리준비되어야하는것들이있다. 서버프로그램을컴파일하는데필요한파일들은개발자가작성한서버프로그램, Tmax 서버라이브러리, 서비스테이블이다. 그리고구조체를사용한경우는구조체파일 ( 구조체파일명 _sdl.c, 구조체파일명.h) 이있어야하고 FIELD buffer 를사용한경우 FIELD 파일 (FIELD 파일명.h) 가있어야한다 서버프로그램구성 서버프로그램 개발자가작성한서비스루틴이다. 클라이언트의요청을처리한다 구조체파일 구조체파일을사용한다면 sdlc 명령어로컴파일된표준통신타입 ( 구조체파일명 _sdl.c) 과구조체헤더파일 ( 구조체파일명 _sdl.h) 를응용서버와함께컴파일한다. 구조체를사용하지않을경우에는 $TMAXDIR/lib/sdl.o 를넣어서컴파일한다 FIELD 파일 FIELD 파일을사용한다면 fdlc 명령어로컴파일된 FIELD 헤더파일 (FIELD 파일명 _fdl.h) 를서버프로그램과함께컴파일한다 Tmax 서버라이브러리 Tmax 에서제공하는서버라이브러리로, 서버 main() 과 tpsvrinit(), tpsvrdone() 그리고각종 Tmax 함수들이있다, 84

86 서비스테이블 서비스테이블은서버마다제공되는서비스이름들이나열되어있는파일로써 Tmax 환경파일을참조하여만든다. 서비스테이블은서비스수행시실제적으로서버내에서해당서비스루틴의위치를찾기위해사용된다. 서비스테이블은시스템관리자가제공한다. 이에대한자세한내용은 Tmax Administration Guide 를참조하라. 서비스테이블작성방법을간단하게알아보면다음과같다 : 이는이진화된 Tmax 환경파일 (ex: tmconfig) 을참조하여 gst(generate service table) 명령어를사용한다. gst [-f binary configuration file] gst 를수행하면 Tmax 디렉토리하위의 svct 디렉토리에 Tmax 환경파일의 *SERVER 절에등록된서버별로 서버이름 _ svctab.c 라는서비스테이블이생성된다. 이는 *SERVICE 절을참조하여서버별로제공하는서비스들이등록되어있다. 이진화된 Tmax 환경파일 (tmconfig) 은시스템관리자가작성한시스템전체구성에대한텍스트파일 (sample.m) 을 cfl 명령어로컴파일후생성된다.(Tmax Reference Guide 참조 ) $cfl [-i Tmax 환경파일 ] 서버프로그램컴파일 1. 응용서버프로그램을컴파일하여오브젝트파일 (.o 형식 ) 을생성한다. 서버프로그램은 Tmax 에서제공하는라이브러리헤더파일들을포함하며, 만약구조체를사용한서비스를한다면구조체파일 (ex:demo.s) 도함께포함해야한다. Ex ) cc -c -I/home/tmax/usrinc aptest.c -> aptest.o 2. 구조체통신인경우구조체파일을컴파일한다. 이는 sdlc 로컴파일하여암호화 / 복호화프로그램을생성하는단계와생성한프로그램을다시오브젝트파일로변환하는 2 단계로이루어진다. Ex ) Step 1 : sdlc -i demo.s -> demo_sdl.c Step 2 : cc -c -I/home/tmax/usrinc demo_sdl.c -> demo_sdl.o 85

87 구조체파일을사용하지않는다면 $TMAXDIR/lib/sdl.o 를사용한다. 3. 시스템관리자가제공해준서비스테이블을컴파일하여오브젝트파일형태를생성한다. Ex ) cc -c aptest_svctab.c -> aptest_svctab.o 4. 1,2,3 에서만들어진오브젝트파일들과 Tmax 시스템에서제공하는서버라이브러리를함께링크하여서버실행프로그램을생성한다. Ex ) cc -o aptest aptest.o demo_sdl.o aptest_svctab.o libsvr.a libnodb.a -> aptest 다음은서버프로그램컴파일과정이다 : 그림 2-6. 서버프로그램컴파일 (sdl) 86

88 그림 2-7. 서버프로그램컴파일 (fdl) 서버프로그램 makefile 다음은 Tmax 서버프로그램을위한샘플 makefile 이다. # for user program TARGET = <servername> APOBJS = $(TARGET).o SDLFILE = demo.s SDLOBJ = ${SDLFILE:.s=_sdl.o SDLC = ${SDLFILE:.s=_sdl.c #TMAXLIBS 는 OS 별로다르다. #Solaris : TMAXLIBS = -lsocket -lnsl lsvr -nodb #Compac, HP, IBM, Linux : TMAXLIBS= -lsvr -nodb 87

89 TMAXLIBS = -lsvr nodb #CFLAGS 는 OS 별로다르다. #Solaris 32bit, Compaq, Linux: CFLAGS = -O I$(TMAXDIR) #Solaris 64bit: CFLAGS = -xarch=v9 -O I$(TMAXDIR) #HP 32bit: CFLAGS = -Ae -O I$(TMAXDIR) #HP 64bit: CFLAGS = -Ae +DA2.0W +DD64 +DS2.0 -O I$(TMAXDIR) #IBM 32bit: CFLAGS = -q32 brtl -O I$(TMAXDIR #IBM 64bit: CFLAGS = -q64 brtl -O I$(TMAXDIR CFLAGS = -O I$(TMAXDIR) OBJS = $(SDLOBJ) $(APOBJS) $(SVCTOBJ) SVCTDIR = $(TMAXDIR)/svct SVCTOBJ = $(TARGET)_svctab.o #.SUFFIXES :.c.c.o: $(CC) $(CFLAGS) -c $< # # server compile # $(TARGET): $(OBJS) $(CC) $(CFLAGS) -L$(LIBDIR) -o $(TARGET) $(OBJS) $(LIBS) mv $(TARGET) $(APPDIR)/. rm -f $(OBJS) $(APOBJS): $(TARGET).c $(CC) $(CFLAGS) -c $(TARGET).c $(SVCTOBJ): touch $(SVCTDIR)/$(TARGET)_svctab.c $(CC) $(CFLAGS) -c $(SVCTDIR)/$(TARGET)_svctab.c 88

90 $(SDLOBJ): $(TMAXDIR)/bin/sdlc -i../sdl/$(sdlfile) $(CC) $(CFLAGS) -c../sdl/$(sdlc) # clean: -rm -f *.o core $(TARGET) 89

91 6.3.3 서버프로세스생성및종료 서버프로세스생성은시스템관리자가해야할역할로써 Tmax Reference Guide 를참조하기바란다. Tmax 어플리케이션서버는단독으로유닉스실행파일처럼실행되지않는다. 이것은서버프로세스가생성되면서 Tmax 관련환경을참조하기때문이다. 따라서 tmboot 명령어로서버프로세스를생성하고, tmboot 명령어로종료시킨다. Tmax 어플리케이션서버프로세스를생성시키기전에, 시스템관리자가작성한 Tmax 환경파일 (ex: sample.m) 이컴파일 (cfl 명령어이용 ) 되어있어야한다. 컴파일된이진환경파일 (ex: tmconfig) 을참조하여서버프로세스를생성하게된다. $tmboot [-f 이진화된구성파일 ] Tmax 시스템프로세스와이진화된 Tmax 구성파일에등록된모든서버프로세스를생성한다. $tmboot [-s 서버프로그램이름 ] 특정서버프로세스만을생성시킨다. Tmax 시스템및서버프로세스종료는 tmdown 명령어를이용한다. $tmdown [-f 이진화된구성파일 ] Tmax 시스템프로세스와이진화된 Tmax 구성파일에등록된모든서버프로세스를종료시킨다. $tmdown [-s 서버프로그램 ] 특정서버프로세스만을종료시킨다. 90

92 7 대화형통신 7.1 대화형통신함수개요 대화형통신은클라이언트와서버사이의반이중통신이다. 클라이언트가데이터를보내면, 서버에서는데이터를받고, 다시서버에서데이터를보내고이를클라이언트가받는송 / 수신기능을바꾸어가면서통신하는방법이다. 대화형통신의시작은요청자가 tpconnect() 를호출함으로써시작된다. 이함수는선택적으로서비스에데이터를보내고, 어느프로그램이연결컨트롤을가질지를지정한다. 즉 tpconnect() 는연결설정이된후에어느쪽이데이터를보낼수있고, 어느쪽이데이터를받아야하는지를설정해야만한다. tpconnect() 가성공적으로수행되면연결구별자 (connection descriptor) 를반환하는데, 이것으로메시지를보내고 (tpsend()) 받는 (tprecv()) 것을다른연결들과구별한다. 대화형통신은문맥 (context) 을저장해야할경우에사용하면좋다. 하지만연결설정 (tpconnect()) 에서연결해제 (tpdiscon() 또는 tpreturn()) 까지다른통신과비교하여상대적으로장시간연결이유지되어야한다. 장시간연결유지는네트웍의부하를증가시키므로가능하면동기 / 비동기통신을이용할것을권한다. 로써연결이정상적으로끝난다. 만약강제적으로끝내려면 tpdiscon() 를사용한다. 이함수를호출하면통과중에있는데이터는잃을수도있으며, 진행중인트랜잭션은취소된다. 컨트롤을상대방에넘길때는 tpconnect() 또는 tpsend() 에서 flags 를 TPRECVONLY 로설정하여호출한다. 그러면상대방에서 TPEV_SENDONLY 라는이벤트가발생하여컨트롤이넘어왔음을알게된다. 이후부터 tpsend() 호출해서데이터를보낼수있게된다. 물론상대방은데이터를받을수만있다. 91

93 대화형모드에서사용하는 Buffer 도동기 / 비동기통신처럼 buffer 를써야하며, 미리 tpalloc() 으로할당하여야한다. Tmax 통신에서사용하는모든 Buffer 는 tpalloc() 으로할당되어야한다. 7.2 대화형통신함수 int tpconnect(char *svc, char *sbuf, long slen, long flags) 대화형모드로연결함. svc : 연결할대화형서비스의이름 sbuf : 보내질 Buffer 에대한포인터 (NULL 인경우가많다.) slen : 보내질 Buffer 의길이 flags : 연결시선택옵션 TPNOTRAN : 트랜잭션모드에서의호출이아님 TPNOTIME : Blocking time-out 을무시함 TPSIGSTRT : 시그널캐취를허가함 TPNOBLOCK : 서비스나서버의실패에대한응답을받지않음 TPSENDONLY : 클라이언트에서데이터를보내기만함 TPRECVONLY : 클라이언트에서데이터를받기만함 tpconnect() 는연결을설정하고통신을시작하는함수이다. 여기서요청자는서비스를요청하기위해 Buffer 를서비스루틴에보낼수도있다. tpconnect() 는일반적으로연결설정만하고서비스는요청하지않는다. 서비스를요청한다면 Buffer 를보내기전에미리 tpalloc() 으로할당하여야한다. svc 는 Tmax 대화형응용서비스이름이다. svc 설정시대화형응용서비스이름이아니거나없으면실패로 1 를반환하고 tperrno 에 TPENOENT 가지정된다. 대화형모드서버는 Tmax 환경파일에등록되어 92

94 있으므로미리확인을하는것도좋은방법이다.(Tmax Administration Guide 참조 ) sbuf 는 tpalloc() 으로할당되어진 Buffer 이다. slen 은 Buffer 의길이이다. sbuf 가길이지정을요구하지않는 Buffer 유형 ( 예를들어 STRUCT 타입 Buffer) 이라면 slen 은무시될수있다. 즉 0 으로지정가능하다. 또한 slen 은서비스루틴에보낼데이터가없다면 NULL 로설정할수있고이때 slen 은무시된다. Buffer 와 Buffer 의크기에관련된더자세한내용은동기 / 비동기통신을참조하라. Buffer 의유형과하위유형은서비스루틴에서사용하는것과일치해야한다. 대화형서비스는 tpconnect() 에서보낸 data 와 len 를 TPSVCINFO 구조체를통해서받기때문에 tprecv() 를호출하지않는다. flags 는 tpcall() 과같이 TPNOTRAN, TPNOBLOCK, TPNOTIME, TPSIGSTRT 를포함한다. 게다가 TPSENDONLY, TPRECVONLY 가추가되어있다. TPSENDONLY tpconnect() 에서이플래그를설정하면, tpconnect() 를호출한프로그램에서연결컨트롤을계속가지며연결을요청받은상대방프로그램은받기만할수있다. 요청받는프로그램에서는 TPSVCINFO 구조체에 flags 의값이 TPRECVONLY 로설정되어컨트롤이넘어오지않았음을알게된다. TPRECVONLY 이플래그는연결컨트롤을상대방 ( 요청받는서비스 ) 에게넘긴다. 이제상대방은 tpsend() 로메시지를보낼수있다. 요청받는서비스가컨트롤이넘어왔음을알게되는것은 93

95 main() 에서서비스루틴을호출할때넘어오는구조체 TPSVCINFO 에 TPSENDONLY 로지정되어오기때문이다 플래그로 TPSENDONLY 와 TPRECVONLY 둘중하나는반드시지정되어야한다. CONV=Y 는서버프로그램의 Tmax 환경파일에설명되어야한다. 그렇지않으면 Segmentation Fault 가일어날수도있다. <Ex 1>... if ((cd = tpconnect( ACCOUNT, NULL, 0, TPSENDONLY)) == -1) { error processing routine; <Ex 2>... if ((cd = tpconnect( ACCOUNT, sndbuf, 0, TPRECVONLY)) == -1) { error processing routine; int tpsend(int cd, char *sbuf, long slen, long flags, long *revent) 메시지보냄. cd : tpconnect() 함수를통해얻은연결핸들 sbuf : 보내질데이터 Buffer slen : 보낼데이터 Buffer 의길이 flags : 송신시선택될옵션 TPNOTIME : Blocking time-out 을무시함 TPSIGSTRT : 시그널캐취를허가함 94

96 TPNOBLOCK : 서비스나서버의실패에대한응답을받지않음 TPRECVONLY : 데이터를보낸후에데이터를받는모드로변경 revent : 이벤트가발생한경우, 이벤트유형이설정됨 TPEV_DISCONIMM : 대화시작자가 tpdiscon() 을사용하여연결을강제로종료하였다는것을의미함 TREV_SVCERR : TPEV_SVCFAIL 상황이외의경우에, 대화종속자가통신제어권없이 tpreturn() 을수행하였음을알림 TREV_SVCFAIL : 서비스가실패하였음을알림 tpsend() 는연결컨트롤을가진곳에서메시지를보낼때사용한다. 상대방은 tprecv() 으로메시지를받을수만있다. tpconnect() 의플래그값을 TPSENDONLY 또는 TPRECVONLY 로지정함으로써연결컨트롤의향방을가릴수있었다. tpsend() 에서는 TPRECVONLY 만을가지고컨트롤의향방을가린다. cd 는 tpconnect() 에서반환된연결구별자이다. sbuf 와 slen 는미리 tpalloc() 으로할당된값이다. revent 는이벤트가발생할경우이벤트유형이설정된다. flags 는 TPNOBLOCK, TPNOTIME, TPSIGRSTRT, TPRECVONLY 를포함한다. TPRECVONLY 이플래그는요청프로그램에서더이상 tpsend() 를호출하지않고, 상대방에게연결컨트롤을넘기겠다는것이다. 이때요청받는프로그램에서는 revent 로지시된주소에서 TPEV_SENDONLY 이벤트를받는다 <Ex>... 95

97 /* 연결컨트롤을상대방에게로넘김. */ if (tpsend(cd, line, 0, TPRECVONLY, &revent) == -1) { error processing routine int tprecv(int cd, char **rbuf, long *rlen, long flags, long *revent) 메시지를받음. cd : 연결핸들 rbuf : 수신한 Buffer 에대한포인터 rlen : 데이터의길이에대한포인터 flags : 송신시선택될옵션 TPNOTIME : Blocking time-out 을무시함 TPSIGSTRT : 시그널캐취를허가함 TPNOCHANGE : 받는버퍼의타입이자동으로변경되지않음 TPNOBLOCK : 서비스나서버의실패에대한응답을받지않음 revent : 이벤트가발생한경우, 이벤트유형이설정됨 TPEV_DISCONIMM : 대화시작자가 tpdiscon() 을사용하여연결을강제로종료하였다는것을의미함 TREV_SVCERR : TPEV_SVCFAIL 상황이외의경우에, 대화종속자가통신제어권없이 tpreturn() 을수행하였음을알림 TREV_SVCFAIL : 서비스가실패하였음을알림 TPEV_SENDONLY : 연결된상대방프로그램쪽에서통신제어권을넘겼음을알림 TPEV_SVCSUCC : 대화시작자에게수신되는이이벤트는상대편인대화종속자서비스가성공적으로종료하였음을알림. 96

98 tprecv ( ) 는연결이설정된후연결컨트롤을가지지않은쪽에서데이터를받고자할때사용한다. cd 는 tpconnect() 에서반환된연결구별자이다. rbuf 는 tpalloc() 으로미리할당되어야하고 rlen 은 data Buffer 의길이이다. rlen 이처음할당된것보다응답시길이가크다면자동적으로커진다. revent 는어떤이벤트가존재하고에러를만나지않는다면이벤트유형이설정된다. 받을수있는이벤트유형은다음에나오는대화형모드에서의이벤트를참조하기바란다. flags 는 TPNOCHANGE, TPNOTIME, TPSIGRSTRT, TPNOBLOCK 를포함한다. TPNOBLOCK 이플래그는데이터의도착을기다리지않겠다는것이다. tprecv() 호출시데이터가도착해있으면데이터를가지고반환되고, 데이터가없다면실패와함께 tperrno 에 TPEBLOCK 를설정한다. 이플래그가설정되지않았다면, tprecv() 는데이터가도착하거나타임아웃될때까지기다린다 <Ex>... if (tprecv(msg->cd, &rcvbuf, &rlen, TPNOFLAGS, &revent)==-1) { /* 제어권이넘어온경우는정상 */ if (revent!= TPEV_SENDONLY) { tpreturn(tpfail, 0, rcvbuf, 0, 0); 97

99 7.3 대화형모드의연결끊기 일반적으로대화형통신에서연결을끊기위해서는연결컨트롤을서버가가질때 tpreturn() 을부르는것이다. 서버가 tpreturn () 을호출하면, 상대방 ( 클라이언트 ) 이 tprecv() 를호출할때 TPEV_SVCSUCC 또는 TPEV_SVCFAIL 이벤트가발생하여연결이끊김을알게된다. tpdiscon() 는통신을즉시끊고자하는경우에사용한다. 다음은간단한대화형통신의연결컨트롤을넘기는것과연결을끊는것에대한도표이다 : 그림 2-8. 대화형통신 int tpdiscon(int cd) 연결을끊음. cd : 연결핸들 tpdiscon() 은극히예외적인경우에사용하는대화형통신의연결끊기이다. tpdiscon() 은상대방에서 TPEV_DISCONIMM 이벤트를발생시키고 cd 를더이상유효하지않게한다. 만약트랜잭션이진행중이었다면그것은취소되고, 데이터는상실될수있다. 그러므로대화형모드에서연결을끊는적당한방법으로서버쪽에서 tpreturn() 를호출하는것을권장한다. 98

100 <Ex> if ((cd = tpconnect( ACCOUNT, NULL, 0, TPSENDONLY)) == -1) { error... if (error){ tpdiscon(cd); /* 예외적인경우발생 */ 99

101 7.4 대화형통신과관계있는이벤트 대화형통신에서는 5 가지의이벤트가존재한다. 아래의표는 5 개의이벤트가발생되는함수와의미를나타내고있다. Event 받는함수 의 미 TPEV_SENDONLY (0x0020) tprecv() 연결컨트롤이존재하는장소를알려줌. TPEV_DISCONIMN (0x0001) tesend() tprecv() tpreturn() 연결이비규칙적으로끊어졌을때받음. tpdiscon() 이호출되거나하위서비스들이여전히열린채남아있는데 tpreturn() 를호출할때발생한다. TPEV_SVCERR (0x0002) tpsend() tprecv() 연결의컨트롤을가지지않았는데 tpreturn() 를호출할때발생. tpreturn() 의인자는정당하지만어떤에러가생겼을때발생. TPEV_SVCFAIL (0x0004) tpsend() tprecv() 연결의컨트롤을가지지않은상태에서 tpreturn() 를호출하거나 tpreturn() 에서 TPFAIL, TPEXIT 로셋팅하여호출할때발생. TPEV_SVCSUCC (0x0008) tprecv() 성공적으로서비스를마침. TPSUCCES 로셋팅되어 tpreturn() 이호출됨. 표 2-3. 대화형통신시의이벤트 100

102 8 트랜잭션관리 이장에서는트랜잭션의개념과정의및처리방법를설명하려고한다. 트랜잭션처리와관련된표준으로 X/Open DTP 모델의 TX 규격을 따른다. 트랜잭션은자원을하나의일관된상태에서다른일관된상태로변화시키는일의단위로 ACID(Atomicity, Consistence, Isolation, Durability) 속성을지키며작업을처리한다는것이다. Atomicity 는일이완전히수행되거나전혀수행되지않는 (all or nothing) 지의두가지경우만존재해야하는것을말한다. Consistency 트랜잭션의성공적인수행결과를하나의일관된상태에서다른일관된상태의공유자원에갱신하는것을말한다. Isolation 은공유자원을바꿀때트랜잭션의결과가 commit 이될때까지트랜잭션외부로나타나지않는다는것을말한다. Durability 는하위시스템이나 media 오류를거친트랜잭션 commitment 의결과를바꾼다는것을말한다. 둘이상의동종및이종의데이터베이스가관련된전역트랜잭션에서는트랜잭션의속성을보장하기위해 2PC(Two-Phase Commit) 를사용한다. 2PC 란둘이상의데이터베이스가연동할때 ACID 속성을완전히보장하기위해 2 단계처리 (Prepare 단계, Commit 단계 ) 를하는것을말한다. 먼저 Prepare 단계는트랜잭션에관련된모든데이터베이스에트랜잭션을처리할준비가되었는지확인한다. 그래서모든데이터베이스로부터준비되었다는신호를받으면, Commit 단계에서모든데이터베이스로부터정상신호를받았으면 Commit 를, 하나라도비정상신호를받았다면 Rollback 를처리하여전역트랜잭션를완료한다. 트랜잭션범위는 tx_begin() 을호출해서 tx_commit() 또는 tx_rollback() 이호출이되는곳까지이다. 101

103 tx_begin() 은트랜잭션을시작하게하며, 이함수를부른프로세스는트랜잭션시작자가된다. 트랜잭션시작자는 tx_commit() 또는 tx_rollback() 를호출함으로써트랜잭션을완결하여야할의무를지닌다. tx_begin() 으로시작하여 tx_commit() 또는 tx_rollback() 으로완결되는하나의트랜잭션에포함되는프로세스들을트랜잭션참여자 (participant) 라부르며, 트랜잭션참여자들은 tpreturn() 으로반환하는값에의해서트랜잭션의결과에영향을줄수있다. 트랜잭션상태에서 tx_begin() 으로또다시트랜잭션을시작하려고할경우이는실패되며, tperrno 에 TPEPROTO 가설정된다. 하지만원래트랜잭션은계속수행되어야한다. 트랜잭션상태에있는클라이언트에서 tpcall() 이나 tpacall() 호출시 flags 인자를 TPNOTRAN 으로설정하여서버가트랜잭션참여에서제외되게할수있다. 다시말해, TPNOTRAN 플래그로요청받는서버는현재진행중인트랜잭션의결과에영향을줄수없다는것이다. 트랜잭션을선언하는방법은개발자가명시적으로트랜잭션관련함수 (ex: tx_begin and tx_commit 등 ) 를직접작성하는 explicit 트랜잭션방법과서버에서 Tmax 환경파일의 SVRGROUP 절에서데이터베이스관련항목을설정하여서비스를내재적으로트랜잭션으로처리하는 implicit 트랜잭션방법이있다. 8.1 전역트랜잭션처리 (Global Transaction Processing) 전역트랜잭션이란하나이상의자원관리자 ( 데이터베이스 ) 와하나이상의물리적인사이트가하나의논리적인단위로참여하는트랜잭션이다. Tmax 시스템에서는모든트랜잭션을일단전역트랜잭션으로간주하며, 데이터의무결성을위해 2PC( Two-Phase Commit) 를사용한다. 102

104 8.2 트랜잭션흐름 여기서는클라이언트에서명시적으로 (explicitly) 전역트랜잭션을시작하고완료하는흐름을보여주고있다. tpcall() 호출시 TPNOTRAN 으로 flag 를설정하지않으면요청받는서버의서비스루틴은트랜잭션의일부가된다. 그림 2-9. 전역트랜잭션흐름도 8.3 트랜잭션관련함수 int tx_begin() 전역트랜잭션을시작함. tx_begin() 은전역트랜잭션을시작하기위해사용하고, 트랜잭션에참여하는데이터베이스는미리열려있어야한다. 전역트랜잭션수행에들어간프로세스는 tx_commit() 이나 tx_rollback() 으로트랜잭션수행을완료해야한다. 103

Tmax COBOL Guide : TMCG : Tmax 3.8 : July 31, 2003 : Sep 20, 2003

Tmax COBOL Guide : TMCG : Tmax 3.8 : July 31, 2003 : Sep 20, 2003 Tmax COBOL Guide : TMCG-0731-03-380 : Tmax 3.8 : July 31, 2003 : Sep 20, 2003 Tmax COBOL Guide Tmax 3.8 Tmax COBOL Guide Tmax COBOL Guide Tmax COBOL Guide 1. 1.1... 7 1.2 Sample file... 8 1.2.1 Sample

More information

Tmax Getting Started Guide Tmax 3.8 Tmax Getting Started Guide

Tmax Getting Started Guide Tmax 3.8 Tmax Getting Started Guide Tmax Getting Started Guide : TMGS-0731-05-380 : Tmax 3.8 : July 31, 2003 : Sep 20, 2003 Tmax Getting Started Guide Tmax 3.8 Tmax Getting Started Guide Copyright (c) 2001 Tmax Soft Co., Ltd. All Rights

More information

Microsoft PowerPoint - chap02-C프로그램시작하기.pptx

Microsoft PowerPoint - chap02-C프로그램시작하기.pptx #include int main(void) { int num; printf( Please enter an integer "); scanf("%d", &num); if ( num < 0 ) printf("is negative.\n"); printf("num = %d\n", num); return 0; } 1 학습목표 을 작성하면서 C 프로그램의

More information

The Pocket Guide to TCP/IP Sockets: C Version

The Pocket Guide to  TCP/IP Sockets: C Version 얇지만얇지않은 TCP/IP 소켓프로그래밍 C 2 판 4 장 UDP 소켓 제 4 장 UDP 소켓 4.1 UDP 클라이언트 4.2 UDP 서버 4.3 UDP 소켓을이용한데이터송싞및수싞 4.4 UDP 소켓의연결 UDP 소켓의특징 UDP 소켓의특성 싞뢰할수없는데이터젂송방식 목적지에정확하게젂송된다는보장이없음. 별도의처리필요 비연결지향적, 순서바뀌는것이가능 흐름제어 (flow

More information

Microsoft PowerPoint - chap06-2pointer.ppt

Microsoft PowerPoint - chap06-2pointer.ppt 2010-1 학기프로그래밍입문 (1) chapter 06-2 참고자료 포인터 박종혁 Tel: 970-6702 Email: jhpark1@snut.ac.kr 한빛미디어 출처 : 뇌를자극하는 C프로그래밍, 한빛미디어 -1- 포인터의정의와사용 변수를선언하는것은메모리에기억공간을할당하는것이며할당된이후에는변수명으로그기억공간을사용한다. 할당된기억공간을사용하는방법에는변수명외에메모리의실제주소값을사용하는것이다.

More information

슬라이드 1

슬라이드 1 -Part3- 제 4 장동적메모리할당과가변인 자 학습목차 4.1 동적메모리할당 4.1 동적메모리할당 4.1 동적메모리할당 배울내용 1 프로세스의메모리공간 2 동적메모리할당의필요성 4.1 동적메모리할당 (1/6) 프로세스의메모리구조 코드영역 : 프로그램실행코드, 함수들이저장되는영역 스택영역 : 매개변수, 지역변수, 중괄호 ( 블록 ) 내부에정의된변수들이저장되는영역

More information

Tmax FDL Reference Manual : TMFR : Tmax 3.8 : Sep 20, 2003 : Sep 20, 2003

Tmax FDL Reference Manual : TMFR : Tmax 3.8 : Sep 20, 2003 : Sep 20, 2003 Tmax FDL Reference Manual : TMFR-0702-08-380 : Tmax 3.8 : Sep 20, 2003 : Sep 20, 2003 Tmax FDL Reference Manual Tmax 3.8 1 2 Copyright (c) 2001 Tmax Soft Co., Ltd. All Rights Reserved.,,, Tmax soft.,,,.....

More information

금오공대 컴퓨터공학전공 강의자료

금오공대 컴퓨터공학전공 강의자료 C 프로그래밍프로젝트 Chap 14. 포인터와함수에대한이해 2013.10.09. 오병우 컴퓨터공학과 14-1 함수의인자로배열전달 기본적인인자의전달방식 값의복사에의한전달 val 10 a 10 11 Department of Computer Engineering 2 14-1 함수의인자로배열전달 배열의함수인자전달방식 배열이름 ( 배열주소, 포인터 ) 에의한전달 #include

More information

11장 포인터

11장 포인터 Dynamic Memory and Linked List 1 동적할당메모리의개념 프로그램이메모리를할당받는방법 정적 (static) 동적 (dynamic) 정적메모리할당 프로그램이시작되기전에미리정해진크기의메모리를할당받는것 메모리의크기는프로그램이시작하기전에결정 int i, j; int buffer[80]; char name[] = data structure"; 처음에결정된크기보다더큰입력이들어온다면처리하지못함

More information

Microsoft Word - Tmax Getting Started Guide.doc

Microsoft Word - Tmax Getting Started Guide.doc Tmax Getting Started Guide Copyright 2000 TmaxSoft Co., Ltd. All Rights Reserved Copyright Notice Copyright 2000 TmaxSoft Co., Ltd. All Rights Reserved. TmaxSoft Co., Ltd. 대한민국서울시강남구대치동 946-1 글라스타워 18

More information

The Pocket Guide to TCP/IP Sockets: C Version

The Pocket Guide to  TCP/IP Sockets: C Version 인터넷프로토콜 5 장 데이터송수신 (3) 1 파일전송메시지구성예제 ( 고정크기메시지 ) 전송방식 : 고정크기 ( 바이너리전송 ) 필요한전송정보 파일이름 ( 최대 255 자 => 255byte 의메모리공간필요 ) 파일크기 (4byte 의경우최대 4GB 크기의파일처리가능 ) 파일내용 ( 가변길이, 0~4GB 크기 ) 메시지구성 FileName (255bytes)

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 Network Programming Jo, Heeseung Network 실습 네트워크프로그래밍 멀리떨어져있는호스트들이서로데이터를주고받을수있도록프로그램을구현하는것 파일과는달리데이터를주고받을대상이멀리떨어져있기때문에소프트웨어차원에서호스트들간에연결을해주는장치가필요 이러한기능을해주는장치로소켓이라는인터페이스를많이사용 소켓프로그래밍이란용어와네트워크프로그래밍이랑용어가같은의미로사용

More information

vi 사용법

vi 사용법 네트워크프로그래밍 6 장과제샘플코드 - 1:1 채팅 (udp 버전 ) 과제 서버에서먼저 bind 하고그포트를다른사람에게알려줄것 클라이언트에서알려준포트로접속 서로간에키보드입력을받아상대방에게메시지전송 2 Makefile 1 SRC_DIR =../../common 2 COM_OBJS = $(SRC_DIR)/addressUtility.o $(SRC_DIR)/dieWithMessage.o

More information

[ 마이크로프로세서 1] 2 주차 3 차시. 포인터와구조체 2 주차 3 차시포인터와구조체 학습목표 1. C 언어에서가장어려운포인터와구조체를설명할수있다. 2. Call By Value 와 Call By Reference 를구분할수있다. 학습내용 1 : 함수 (Functi

[ 마이크로프로세서 1] 2 주차 3 차시. 포인터와구조체 2 주차 3 차시포인터와구조체 학습목표 1. C 언어에서가장어려운포인터와구조체를설명할수있다. 2. Call By Value 와 Call By Reference 를구분할수있다. 학습내용 1 : 함수 (Functi 2 주차 3 차시포인터와구조체 학습목표 1. C 언어에서가장어려운포인터와구조체를설명할수있다. 2. Call By Value 와 Call By Reference 를구분할수있다. 학습내용 1 : 함수 (Function) 1. 함수의개념 입력에대해적절한출력을발생시켜주는것 내가 ( 프로그래머 ) 작성한명령문을연산, 처리, 실행해주는부분 ( 모듈 ) 자체적으로실행되지않으며,

More information

임베디드시스템설계강의자료 6 system call 2/2 (2014 년도 1 학기 ) 김영진 아주대학교전자공학과

임베디드시스템설계강의자료 6 system call 2/2 (2014 년도 1 학기 ) 김영진 아주대학교전자공학과 임베디드시스템설계강의자료 6 system call 2/2 (2014 년도 1 학기 ) 김영진 아주대학교전자공학과 System call table and linkage v Ref. http://www.ibm.com/developerworks/linux/library/l-system-calls/ - 2 - Young-Jin Kim SYSCALL_DEFINE 함수

More information

2009년 상반기 사업계획

2009년 상반기 사업계획 소켓프로그래밍활용 IT CookBook, 유닉스시스템프로그래밍 학습목표 소켓인터페이스를활용한다양한프로그램을작성할수있다. 2/23 목차 TCP 기반프로그래밍 반복서버 동시동작서버 동시동작서버-exec함수사용하기 동시동작서버-명령행인자로소켓기술자전달하기 UDP 프로그래밍 3/23 TCP 기반프로그래밍 반복서버 데몬프로세스가직접모든클라이언트의요청을차례로처리 동시동작서버

More information

Microsoft Word - ntasFrameBuilderInstallGuide2.5.doc

Microsoft Word - ntasFrameBuilderInstallGuide2.5.doc NTAS and FRAME BUILDER Install Guide NTAS and FRAME BUILDER Version 2.5 Copyright 2003 Ari System, Inc. All Rights reserved. NTAS and FRAME BUILDER are trademarks or registered trademarks of Ari System,

More information

Microsoft PowerPoint - Lecture_Note_5.ppt [Compatibility Mode]

Microsoft PowerPoint - Lecture_Note_5.ppt [Compatibility Mode] TCP Server/Client Department of Computer Engineering Kyung Hee University. Choong Seon Hong 1 TCP Server Program Procedure TCP Server socket() bind() 소켓생성 소켓번호와소켓주소의결합 listen() accept() read() 서비스처리, write()

More information

Microsoft Word - AnyLink Introduction v3.2.3.doc

Microsoft Word - AnyLink Introduction v3.2.3.doc Copyright 2007 Tmax Soft Co., Ltd. All Rights Reserved. AnyLInk Copyright Notice Copyright 2007 Tmax Soft Co., Ltd. All Rights Reserved. Tmax Soft Co., Ltd. 대한민국서울시강남구대치동 946-1 글라스타워 18 층우 )135-708 Restricted

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 KeyPad Device Control - Device driver Jo, Heeseung HBE-SM5-S4210 에는 16 개의 Tack Switch 를사용하여 4 행 4 열의 Keypad 가장착 4x4 Keypad 2 KeyPad 를제어하기위하여 FPGA 내부에 KeyPad controller 가구현 KeyPad controller 16bit 로구성된

More information

API 매뉴얼

API 매뉴얼 PCI-DIO12 API Programming (Rev 1.0) Windows, Windows2000, Windows NT and Windows XP are trademarks of Microsoft. We acknowledge that the trademarks or service names of all other organizations mentioned

More information

이번장에서학습할내용 동적메모리란? malloc() 와 calloc() 연결리스트 파일을이용하면보다많은데이터를유용하고지속적으로사용및관리할수있습니다. 2

이번장에서학습할내용 동적메모리란? malloc() 와 calloc() 연결리스트 파일을이용하면보다많은데이터를유용하고지속적으로사용및관리할수있습니다. 2 제 17 장동적메모리와연결리스트 유준범 (JUNBEOM YOO) Ver. 2.0 jbyoo@konkuk.ac.kr http://dslab.konkuk.ac.kr 본강의자료는생능출판사의 PPT 강의자료 를기반으로제작되었습니다. 이번장에서학습할내용 동적메모리란? malloc() 와 calloc() 연결리스트 파일을이용하면보다많은데이터를유용하고지속적으로사용및관리할수있습니다.

More information

The Pocket Guide to TCP/IP Sockets: C Version

The Pocket Guide to  TCP/IP Sockets: C Version 1 목포해양대해양컴퓨터공학과 UDP 소켓 네트워크프로그램설계 4 장 2 목포해양대해양컴퓨터공학과 목차 제 4장 UDP 소켓 4.1 UDP 클라이언트 4.2 UDP 서버 4.3 UDP 소켓을이용한데이터송신및수신 4.4 UDP 소켓의연결 3 목포해양대해양컴퓨터공학과 UDP 소켓의특징 UDP 소켓의특성 신뢰할수없는데이터전송방식 목적지에정확하게전송된다는보장이없음.

More information

슬라이드 1

슬라이드 1 마이크로컨트롤러 2 (MicroController2) 2 강 ATmega128 의 external interrupt 이귀형교수님 학습목표 interrupt 란무엇인가? 기본개념을알아본다. interrupt 중에서가장사용하기쉬운 external interrupt 의사용방법을학습한다. 1. Interrupt 는왜필요할까? 함수동작을추가하여실행시키려면? //***

More information

<4D F736F F F696E74202D20B8AEB4AABDBA20BFC0B7F920C3B3B8AEC7CFB1E22E BC8A3C8AF20B8F0B5E55D>

<4D F736F F F696E74202D20B8AEB4AABDBA20BFC0B7F920C3B3B8AEC7CFB1E22E BC8A3C8AF20B8F0B5E55D> 리눅스 오류처리하기 2007. 11. 28 안효창 라이브러리함수의오류번호얻기 errno 변수기능오류번호를저장한다. 기본형 extern int errno; 헤더파일 라이브러리함수호출에실패했을때함수예 정수값을반환하는함수 -1 반환 open 함수 포인터를반환하는함수 NULL 반환 fopen 함수 2 유닉스 / 리눅스 라이브러리함수의오류번호얻기 19-1

More information

API 매뉴얼

API 매뉴얼 PCI-TC03 API Programming (Rev 1.0) Windows, Windows2000, Windows NT, Windows XP and Windows 7 are trademarks of Microsoft. We acknowledge that the trademarks or service names of all other organizations

More information

<4D F736F F F696E74202D E20B3D7C6AEBFF6C5A920C7C1B7CEB1D7B7A1B9D62E >

<4D F736F F F696E74202D E20B3D7C6AEBFF6C5A920C7C1B7CEB1D7B7A1B9D62E > 웹프로그래밍및실습 ( g & Practice) 문양세강원대학교 IT 대학컴퓨터과학전공 소켓 (Socket) (1/2) Socket 이란? 서버와클라이언트가서로특정한규약을사용하여데이터를전송하기위한방식 서버와클라이언트는소켓연결을기다렸다가소켓이연결되면서로데이터를전송 현재네트워크상에서의모든통신의근간은 Socket 이라할수있음 Page 2 1 소켓 (Socket) (2/2)

More information

C# Programming Guide - Types

C# Programming Guide - Types C# Programming Guide - Types 최도경 lifeisforu@wemade.com 이문서는 MSDN 의 Types 를요약하고보충한것입니다. http://msdn.microsoft.com/enus/library/ms173104(v=vs.100).aspx Types, Variables, and Values C# 은 type 에민감한언어이다. 모든

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 System Software Experiment 1 Lecture 5 - Array Spring 2019 Hwansoo Han (hhan@skku.edu) Advanced Research on Compilers and Systems, ARCS LAB Sungkyunkwan University http://arcs.skku.edu/ 1 배열 (Array) 동일한타입의데이터가여러개저장되어있는저장장소

More information

제1장 Unix란 무엇인가?

제1장  Unix란 무엇인가? 1 소켓 2 1 소켓 클라이언트 - 서버모델 네트워크응용프로그램 클리이언트 - 서버모델을기반으로동작한다. 클라이언트 - 서버모델 하나의서버프로세스와여러개의클라이언트로구성된다. 서버는어떤자원을관리하고클라이언트를위해자원관련서비스를제공한다. 3 소켓의종류 소켓 네트워크에대한사용자수준의인터페이스를제공 소켓은양방향통신방법으로클라이언트 - 서버모델을기반으로프로세스사이의통신에매우적합하다.

More information

Microsoft PowerPoint - chap01-C언어개요.pptx

Microsoft PowerPoint - chap01-C언어개요.pptx #include int main(void) { int num; printf( Please enter an integer: "); scanf("%d", &num); if ( num < 0 ) printf("is negative.\n"); printf("num = %d\n", num); return 0; } 1 학습목표 프로그래밍의 기본 개념을

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 Web server porting 2 Jo, Heeseung Web 을이용한 LED 제어 Web 을이용한 LED 제어프로그램 web 에서데이터를전송받아타겟보드의 LED 를조작하는프로그램을작성하기위해다음과같은소스파일을생성 2 Web 을이용한 LED 제어 LED 제어프로그램작성 8bitled.html 파일을작성 root@ubuntu:/working/web# vi

More information

<322EBCF8C8AF28BFACBDC0B9AEC1A6292E687770>

<322EBCF8C8AF28BFACBDC0B9AEC1A6292E687770> 연습문제해답 5 4 3 2 1 0 함수의반환값 =15 5 4 3 2 1 0 함수의반환값 =95 10 7 4 1-2 함수의반환값 =3 1 2 3 4 5 연습문제해답 1. C 언어에서의배열에대하여다음중맞는것은? (1) 3차원이상의배열은불가능하다. (2) 배열의이름은포인터와같은역할을한다. (3) 배열의인덱스는 1에서부터시작한다. (4) 선언한다음, 실행도중에배열의크기를변경하는것이가능하다.

More information

Tmax

Tmax 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 프라자

More information

Chapter #01 Subject

Chapter #01  Subject Device Driver March 24, 2004 Kim, ki-hyeon 목차 1. 인터럽트처리복습 1. 인터럽트복습 입력검출방법 인터럽트방식, 폴링 (polling) 방식 인터럽트서비스등록함수 ( 커널에등록 ) int request_irq(unsigned int irq, void(*handler)(int,void*,struct pt_regs*), unsigned

More information

Tmax

Tmax Tmax FDL Reference Manual Copyright 2000 TmaxSoft Co., Ltd. All Rights Reserved Copyright Notice Copyright 2000 TmaxSoft Co., Ltd. All Rights Reserved. TmaxSoft Co., Ltd. 대한민국서울시강남구대치동 946-1 글라스타워 18 층우

More information

A Hierarchical Approach to Interactive Motion Editing for Human-like Figures

A Hierarchical Approach to Interactive Motion Editing for Human-like Figures 단일연결리스트 (Singly Linked List) 신찬수 연결리스트 (linked list)? tail 서울부산수원용인 null item next 구조체복습 struct name_card { char name[20]; int date; } struct name_card a; // 구조체변수 a 선언 a.name 또는 a.date // 구조체 a의멤버접근 struct

More information

PowerPoint Presentation

PowerPoint Presentation Class - Property Jo, Heeseung 목차 section 1 클래스의일반구조 section 2 클래스선언 section 3 객체의생성 section 4 멤버변수 4-1 객체변수 4-2 클래스변수 4-3 종단 (final) 변수 4-4 멤버변수접근방법 section 5 멤버변수접근한정자 5-1 public 5-2 private 5-3 한정자없음

More information

목차 1. 환경변수 OS별환경변수설정 ESQL 시작 ESQL 프로그램생성젃차 오라클 Pro*C 젂환 Precompiler 변경 확장자 *.pc를 *.tbc로변경

목차 1. 환경변수 OS별환경변수설정 ESQL 시작 ESQL 프로그램생성젃차 오라클 Pro*C 젂환 Precompiler 변경 확장자 *.pc를 *.tbc로변경 개발및운영 Tibero ProC 전환및 Tmax 설정 2014. 05. 16. 목차 1. 환경변수... 3 1.1. OS별환경변수설정... 3 2. ESQL 시작... 4 2.1. ESQL 프로그램생성젃차... 4 3. 오라클 Pro*C 젂환... 5 3.1 Precompiler 변경... 5 3.2 확장자 *.pc를 *.tbc로변경... 5 3.3 티베로젂환시주의사항...

More information

Microsoft PowerPoint - ch09 - 연결형리스트, Stack, Queue와 응용 pm0100

Microsoft PowerPoint - ch09 - 연결형리스트, Stack, Queue와 응용 pm0100 2015-1 프로그래밍언어 9. 연결형리스트, Stack, Queue 2015 년 5 월 4 일 교수김영탁 영남대학교공과대학정보통신공학과 (Tel : +82-53-810-2497; Fax : +82-53-810-4742 http://antl.yu.ac.kr/; E-mail : ytkim@yu.ac.kr) 연결리스트 (Linked List) 연결리스트연산 Stack

More information

Microsoft PowerPoint - ch07 - 포인터 pm0415

Microsoft PowerPoint - ch07 - 포인터 pm0415 2015-1 프로그래밍언어 7. 포인터 (Pointer), 동적메모리할당 2015 년 4 월 4 일 교수김영탁 영남대학교공과대학정보통신공학과 (Tel : +82-53-810-2497; Fax : +82-53-810-4742 http://antl.yu.ac.kr/; E-mail : ytkim@yu.ac.kr) Outline 포인터 (pointer) 란? 간접참조연산자

More information

게시판 스팸 실시간 차단 시스템

게시판 스팸 실시간 차단 시스템 오픈 API 2014. 11-1 - 목 차 1. 스팸지수측정요청프로토콜 3 1.1 스팸지수측정요청프로토콜개요 3 1.2 스팸지수측정요청방법 3 2. 게시판스팸차단도구오픈 API 활용 5 2.1 PHP 5 2.1.1 차단도구오픈 API 적용방법 5 2.1.2 차단도구오픈 API 스팸지수측정요청 5 2.1.3 차단도구오픈 API 스팸지수측정결과값 5 2.2 JSP

More information

Microsoft PowerPoint - 04-UDP Programming.ppt

Microsoft PowerPoint - 04-UDP Programming.ppt Chapter 4. UDP Dongwon Jeong djeong@kunsan.ac.kr http://ist.kunsan.ac.kr/ Dept. of Informatics & Statistics 목차 UDP 1 1 UDP 개념 자바 UDP 프로그램작성 클라이언트와서버모두 DatagramSocket 클래스로생성 상호간통신은 DatagramPacket 클래스를이용하여

More information

chap 5: Trees

chap 5: Trees 5. Threaded Binary Tree 기본개념 n 개의노드를갖는이진트리에는 2n 개의링크가존재 2n 개의링크중에 n + 1 개의링크값은 null Null 링크를다른노드에대한포인터로대체 Threads Thread 의이용 ptr left_child = NULL 일경우, ptr left_child 를 ptr 의 inorder predecessor 를가리키도록변경

More information

<4D F736F F F696E74202D20BBB7BBB7C7D15F FBEDFB0A3B1B3C0B05FC1A638C0CFC2F72E BC8A3C8AF20B8F0B5E55D>

<4D F736F F F696E74202D20BBB7BBB7C7D15F FBEDFB0A3B1B3C0B05FC1A638C0CFC2F72E BC8A3C8AF20B8F0B5E55D> 뻔뻔한 AVR 프로그래밍 The Last(8 th ) Lecture 유명환 ( yoo@netplug.co.kr) INDEX 1 I 2 C 통신이야기 2 ATmega128 TWI(I 2 C) 구조분석 4 ATmega128 TWI(I 2 C) 실습 : AT24C16 1 I 2 C 통신이야기 I 2 C Inter IC Bus 어떤 IC들간에도공통적으로통할수있는 ex)

More information

11장 포인터

11장 포인터 누구나즐기는 C 언어콘서트 제 9 장포인터 이번장에서학습할내용 포인터이란? 변수의주소 포인터의선언 간접참조연산자 포인터연산 포인터와배열 포인터와함수 이번장에서는포인터의기초적인지식을학습한다. 포인터란? 포인터 (pointer): 주소를가지고있는변수 메모리의구조 변수는메모리에저장된다. 메모리는바이트단위로액세스된다. 첫번째바이트의주소는 0, 두번째바이트는 1, 변수와메모리

More information

Microsoft PowerPoint - additional01.ppt [호환 모드]

Microsoft PowerPoint - additional01.ppt [호환 모드] 1.C 기반의 C++ part 1 함수 오버로딩 (overloading) 디폴트매개변수 (default parameter) 인-라인함수 (in-line function) 이름공간 (namespace) Jong Hyuk Park 함수 Jong Hyuk Park 함수오버로딩 (overloading) 함수오버로딩 (function overloading) C++ 언어에서는같은이름을가진여러개의함수를정의가능

More information

Microsoft PowerPoint - chap13-입출력라이브러리.pptx

Microsoft PowerPoint - chap13-입출력라이브러리.pptx #include int main(void) int num; printf( Please enter an integer: "); scanf("%d", &num); if ( num < 0 ) printf("is negative.\n"); printf("num = %d\n", num); return 0; 1 학습목표 스트림의 기본 개념을 알아보고,

More information

Microsoft PowerPoint - chap06-5 [호환 모드]

Microsoft PowerPoint - chap06-5 [호환 모드] 2011-1 학기프로그래밍입문 (1) chapter 06-5 참고자료 변수의영역과데이터의전달 박종혁 Tel: 970-6702 Email: jhpark1@seoultech.ac.kr h k 한빛미디어 출처 : 뇌를자극하는 C프로그래밍, 한빛미디어 -1- ehanbit.net 자동변수 지금까지하나의함수안에서선언한변수는자동변수이다. 사용범위는하나의함수내부이다. 생존기간은함수가호출되어실행되는동안이다.

More information

13주-14주proc.PDF

13주-14주proc.PDF 12 : Pro*C/C++ 1 2 Embeded SQL 3 PRO *C 31 C/C++ PRO *C NOT! NOT AND && AND OR OR EQUAL == = SQL,,, Embeded SQL SQL 32 Pro*C C SQL Pro*C C, C Pro*C, C C 321, C char : char[n] : n int, short, long : float

More information

JEUS WebT Copyright 2004 Tmax Soft Co., Ltd. All Rights Reserved.

JEUS WebT Copyright 2004 Tmax Soft Co., Ltd. All Rights Reserved. JEUS WebT Copyright 2004 Tmax Soft Co, Ltd All Rights Reserved Copyright Notice Copyright 2004 Tmax Soft Co, Ltd All Rights Reserved Tmax Soft Co, Ltd 946-1 18 )135-708 Restricted Rights Legend This software

More information

Microsoft PowerPoint - chap10-함수의활용.pptx

Microsoft PowerPoint - chap10-함수의활용.pptx #include int main(void) { int num; printf( Please enter an integer: "); scanf("%d", &num); if ( num < 0 ) printf("is negative.\n"); printf("num = %d\n", num); return 0; } 1 학습목표 중 값에 의한 전달 방법과

More information

C++ Programming

C++ Programming C++ Programming 연산자다중정의 Seo, Doo-okok clickseo@gmail.com http://www.clickseo.com 목 차 연산자다중정의 C++ 스타일의문자열 2 연산자다중정의 연산자다중정의 단항연산자다중정의 이항연산자다중정의 cin, cout 그리고 endl C++ 스타일의문자열 3 연산자다중정의 연산자다중정의 (Operator

More information

1. What is AX1 AX1 Program은 WIZnet 사의 Hardwired TCP/IP Chip인 iinchip 들의성능평가및 Test를위해제작된 Windows 기반의 PC Program이다. AX1은 Internet을통해 iinchip Evaluation

1. What is AX1 AX1 Program은 WIZnet 사의 Hardwired TCP/IP Chip인 iinchip 들의성능평가및 Test를위해제작된 Windows 기반의 PC Program이다. AX1은 Internet을통해 iinchip Evaluation 1. What is AX1 AX1 Program은 WIZnet 사의 Hardwired TCP/IP Chip인 iinchip 들의성능평가및 Test를위해제작된 Windows 기반의 PC Program이다. AX1은 Internet을통해 iinchip Evaluation Board(EVB B/D) 들과 TCP/IP Protocol로연결되며, 연결된 TCP/IP

More information

PowerPoint Presentation

PowerPoint Presentation #include int main(void) { int num; printf( Please enter an integer: "); scanf("%d", &num); if ( num < 0 ) printf("is negative.\n"); printf("num = %d\n", num); return 0; } 1 학습목표 을작성하면서 C 프로그램의구성요소에대하여알아본다.

More information

Cloud Friendly System Architecture

Cloud Friendly System Architecture -Service Clients Administrator 1. -Service 구성도 : ( 좌측참고 ) LB(LoadBlancer) 2. -Service 개요 ucloud Virtual Router F/W Monitoring 개념 특징 적용가능분야 Server, WAS, DB 로구성되어 web service 를클라우드환경에서제공하기위한 service architecture

More information

ISP and CodeVisionAVR C Compiler.hwp

ISP and CodeVisionAVR C Compiler.hwp USBISP V3.0 & P-AVRISP V1.0 with CodeVisionAVR C Compiler http://www.avrmall.com/ November 12, 2007 Copyright (c) 2003-2008 All Rights Reserved. USBISP V3.0 & P-AVRISP V1.0 with CodeVisionAVR C Compiler

More information

Microsoft PowerPoint - 13 ¼ÒÄÏÀ» ÀÌ¿ëÇÑ Åë½Å 2.ppt

Microsoft PowerPoint - 13 ¼ÒÄÏÀ» ÀÌ¿ëÇÑ Åë½Å 2.ppt 13 장소켓을이용한통신 (2) 소켓을이용한통신 (2) 함수 - recvfrom - sendto - uname - gethostname - gethostbyname - gethostbyaddr 1 1. 서론 소켓을사용하여비연결형모델로통신을하기위한함수와그외의함수 함수 의미 recvfrom 비연결형모델에서소켓을통해메시지를수신한다. sendto 비연결형모델에서소켓을통해메시지를송신한다.

More information

OCW_C언어 기초

OCW_C언어 기초 초보프로그래머를위한 C 언어기초 2 장 : C 프로그램시작하기 2012 년 이은주 학습목표 을작성하면서 C 프로그램의구성요소 주석 (comment) 이란무엇인지알아보고, 주석을만드는방법 함수란무엇인지알아보고, C 프로그램에반드시필요한 main 함수 C 프로그램에서출력에사용되는 printf 함수 변수의개념과변수의값을입력받는데사용되는 scanf 함수 2 목차 프로그램코드

More information

DBMS & SQL Server Installation Database Laboratory

DBMS & SQL Server Installation Database Laboratory DBMS & 조교 _ 최윤영 } 데이터베이스연구실 (1314 호 ) } 문의사항은 cyy@hallym.ac.kr } 과제제출은 dbcyy1@gmail.com } 수업공지사항및자료는모두홈페이지에서확인 } dblab.hallym.ac.kr } 홈페이지 ID: 학번 } 홈페이지 PW:s123 2 차례 } } 설치전점검사항 } 설치단계별설명 3 Hallym Univ.

More information

Microsoft PowerPoint - [2009] 02.pptx

Microsoft PowerPoint - [2009] 02.pptx 원시데이터유형과연산 원시데이터유형과연산 원시데이터유형과연산 숫자데이터유형 - 숫자데이터유형 원시데이터유형과연산 표준입출력함수 - printf 문 가장기본적인출력함수. (stdio.h) 문법 ) printf( Test printf. a = %d \n, a); printf( %d, %f, %c \n, a, b, c); #include #include

More information

금오공대 컴퓨터공학전공 강의자료

금오공대 컴퓨터공학전공 강의자료 C 프로그래밍프로젝트 Chap 13. 포인터와배열! 함께이해하기 2013.10.02. 오병우 컴퓨터공학과 13-1 포인터와배열의관계 Programming in C, 정재은저, 사이텍미디어. 9 장참조 ( 교재의 13-1 은읽지말것 ) 배열이름의정체 배열이름은 Compile 시의 Symbol 로서첫번째요소의주소값을나타낸다. Symbol 로서컴파일시에만유효함 실행시에는메모리에잡히지않음

More information

제1장 Unix란 무엇인가?

제1장  Unix란 무엇인가? 1 12 장파이프 2 12.1 파이프 파이프원리 $ who sort 파이프 3 물을보내는수도파이프와비슷 한프로세스는쓰기용파일디스크립터를이용하여파이프에데이터를보내고 ( 쓰고 ) 다른프로세스는읽기용파일디스크립터를이용하여그파이프에서데이터를받는다 ( 읽는다 ). 한방향 (one way) 통신 파이프생성 파이프는두개의파일디스크립터를갖는다. 하나는쓰기용이고다른하나는읽기용이다.

More information

BMP 파일 처리

BMP 파일 처리 BMP 파일처리 김성영교수 금오공과대학교 컴퓨터공학과 학습내용 영상반전프로그램제작 2 Inverting images out = 255 - in 3 /* 이프로그램은 8bit gray-scale 영상을입력으로사용하여반전한후동일포맷의영상으로저장한다. */ #include #include #define WIDTHBYTES(bytes)

More information

설계란 무엇인가?

설계란 무엇인가? 금오공과대학교 C++ 프로그래밍 jhhwang@kumoh.ac.kr 컴퓨터공학과 황준하 9 강. 클래스의활용목차 멤버함수의외부정의 this 포인터 friend 선언 static 멤버 임시객체 1 /17 9 강. 클래스의활용멤버함수의외부정의 멤버함수정의구현방법 내부정의 : 클래스선언내에함수정의구현 외부정의 클래스선언 : 함수프로토타입 멤버함수정의 : 클래스선언외부에구현

More information

bn2019_2

bn2019_2 arp -a Packet Logging/Editing Decode Buffer Capture Driver Logging: permanent storage of packets for offline analysis Decode: packets must be decoded to human readable form. Buffer: packets must temporarily

More information

윤성우의 열혈 TCP/IP 소켓 프로그래밍

윤성우의 열혈 TCP/IP 소켓 프로그래밍 C 프로그래밍프로젝트 Chap 22. 구조체와사용자정의자료형 1 2013.10.10. 오병우 컴퓨터공학과 구조체의정의 (Structure) 구조체 하나이상의기본자료형을기반으로사용자정의자료형 (User Defined Data Type) 을만들수있는문법요소 배열 vs. 구조체 배열 : 한가지자료형의집합 구조체 : 여러가지자료형의집합 사용자정의자료형 struct

More information

1. auto_ptr 다음프로그램의문제점은무엇인가? void func(void) int *p = new int; cout << " 양수입력 : "; cin >> *p; if (*p <= 0) cout << " 양수를입력해야합니다 " << endl; return; 동적할

1. auto_ptr 다음프로그램의문제점은무엇인가? void func(void) int *p = new int; cout <<  양수입력 : ; cin >> *p; if (*p <= 0) cout <<  양수를입력해야합니다  << endl; return; 동적할 15 장기타주제들 auto_ptr 변환함수 cast 연산자에의한명시적형변환실행시간타입정보알아내기 (RTTI) C++ 프로그래밍입문 1. auto_ptr 다음프로그램의문제점은무엇인가? void func(void) int *p = new int; cout > *p; if (*p

More information

Poison null byte Excuse the ads! We need some help to keep our site up. List 1 Conditions 2 Exploit plan 2.1 chunksize(p)!= prev_size (next_chunk(p) 3

Poison null byte Excuse the ads! We need some help to keep our site up. List 1 Conditions 2 Exploit plan 2.1 chunksize(p)!= prev_size (next_chunk(p) 3 Poison null byte Excuse the ads! We need some help to keep our site up. List 1 Conditions 2 Exploit plan 2.1 chunksize(p)!= prev_size (next_chunk(p) 3 Example 3.1 Files 3.2 Source code 3.3 Exploit flow

More information

Microsoft PowerPoint - Chapter 6.ppt

Microsoft PowerPoint - Chapter 6.ppt 6.Static 멤버와 const 멤버 클래스와 const 클래스와 static 연결리스트프로그램예 Jong Hyuk Park 클래스와 const Jong Hyuk Park C 의 const (1) const double PI=3.14; PI=3.1415; // 컴파일오류 const int val; val=20; // 컴파일오류 3 C 의 const (1)

More information

슬라이드 1

슬라이드 1 / 유닉스시스템개요 / 파일 / 프로세스 01 File Descriptor file file descriptor file type unix 에서의파일은단지바이트들의나열임 operating system 은파일에어떤포맷도부과하지않음 파일의내용은바이트단위로주소를줄수있음 file descriptor 는 0 이나양수임 file 은 open 이나 creat 로 file

More information

[Brochure] KOR_TunA

[Brochure] KOR_TunA LG CNS LG CNS APM (TunA) LG CNS APM (TunA) 어플리케이션의 성능 개선을 위한 직관적이고 심플한 APM 솔루션 APM 이란? Application Performance Management 란? 사용자 관점 그리고 비즈니스 관점에서 실제 서비스되고 있는 어플리케이션의 성능 관리 체계입니다. 이를 위해서는 신속한 장애 지점 파악 /

More information

<4D F736F F F696E74202D20C1A63137C0E520B5BFC0FBB8DEB8F0B8AEBFCD20BFACB0E1B8AEBDBAC6AE>

<4D F736F F F696E74202D20C1A63137C0E520B5BFC0FBB8DEB8F0B8AEBFCD20BFACB0E1B8AEBDBAC6AE> 쉽게풀어쓴 C 언어 Express 제 17 장동적메모리와연결리스트 이번장에서학습할내용 동적메모리할당의이해 동적메모리할당관련함수 연결리스트 동적메모리할당에대한개념을이해하고응용으로연결리스트를학습합니다. 동적할당메모리의개념 프로그램이메모리를할당받는방법 정적 (static) 동적 (dynamic) 정적메모리할당 정적메모리할당 프로그램이시작되기전에미리정해진크기의메모리를할당받는것

More information

chap7.key

chap7.key 1 7 C 2 7.1 C (System Calls) Unix UNIX man Section 2 C. C (Library Functions) C 1975 Dennis Ritchie ANSI C Standard Library 3 (system call). 4 C?... 5 C (text file), C. (binary file). 6 C 1. : fopen( )

More information

Chapter 4. LISTS

Chapter 4. LISTS C 언어에서리스트구현 리스트의생성 struct node { int data; struct node *link; ; struct node *ptr = NULL; ptr = (struct node *) malloc(sizeof(struct node)); Self-referential structure NULL: defined in stdio.h(k&r C) or

More information

목차 BUG offline replicator 에서유효하지않은로그를읽을경우비정상종료할수있다... 3 BUG 각 partition 이서로다른 tablespace 를가지고, column type 이 CLOB 이며, 해당 table 을 truncate

목차 BUG offline replicator 에서유효하지않은로그를읽을경우비정상종료할수있다... 3 BUG 각 partition 이서로다른 tablespace 를가지고, column type 이 CLOB 이며, 해당 table 을 truncate ALTIBASE HDB 6.1.1.5.6 Patch Notes 목차 BUG-39240 offline replicator 에서유효하지않은로그를읽을경우비정상종료할수있다... 3 BUG-41443 각 partition 이서로다른 tablespace 를가지고, column type 이 CLOB 이며, 해당 table 을 truncate 한뒤, hash partition

More information

A Dynamic Grid Services Deployment Mechanism for On-Demand Resource Provisioning

A Dynamic Grid Services Deployment Mechanism for On-Demand Resource Provisioning C Programming Practice (II) Contents 배열 문자와문자열 구조체 포인터와메모리관리 구조체 2/17 배열 (Array) (1/2) 배열 동일한자료형을가지고있으며같은이름으로참조되는변수들의집합 배열의크기는반드시상수이어야한다. type var_name[size]; 예 ) int myarray[5] 배열의원소는원소의번호를 0 부터시작하는색인을사용

More information

Windows 8에서 BioStar 1 설치하기

Windows 8에서 BioStar 1 설치하기 / 콘텐츠 테이블... PC에 BioStar 1 설치 방법... Microsoft SQL Server 2012 Express 설치하기... Running SQL 2012 Express Studio... DBSetup.exe 설정하기... BioStar 서버와 클라이언트 시작하기... 1 1 2 2 6 7 1/11 BioStar 1, Windows 8 BioStar

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 Text-LCD Device Control - Device driver Jo, Heeseung M3 모듈에장착되어있는 Tedxt LCD 장치를제어하는 App 을개발 TextLCD 는영문자와숫자일본어, 특수문자를표현하는데사용되는디바이스 HBE-SM5-S4210 의 TextLCD 는 16 문자 *2 라인을 Display 할수있으며, 이 TextLCD 를제어하기위하여

More information

The Pocket Guide to TCP/IP Sockets: C Version

The Pocket Guide to  TCP/IP Sockets: C Version 인터넷프로토콜 03 장 도메인네임시스템과주소 패밀리 (IPv4-IPv6 서비스 ) 1 목차 제 3 장도메인네임시스템과주소패밀리 3.1 도메인네임주소를숫자주소로매핑하기 3.2 IP 버전에무관한주소-범용코드의작성 3.3 숫자주소에서도메인네임주소획득하기 2 getaddrinfo() 를활용한주소 범용 (Generic) 코드 주소범용 (Generic) 코드란? 주소버전

More information

6주차.key

6주차.key 6, Process concept A program in execution Program code PCB (process control block) Program counter, registers, etc. Stack Heap Data section => global variable Process in memory Process state New Running

More information

UI TASK & KEY EVENT

UI TASK & KEY EVENT T9 & AUTOMATA 2007. 3. 23 PLATFORM TEAM 정용학 차례 T9 개요 새로운언어 (LDB) 추가 T9 주요구조체 / 주요함수 Automata 개요 Automata 주요함수 추후세미나계획 질의응답및토의 T9 ( 2 / 30 ) T9 개요 일반적으로 cat 이라는단어를쓸려면... 기존모드 (multitap) 2,2,2, 2,8 ( 총 6번의입력

More information

구조체정의 자료형 (data types) 기본자료형 (primitive data types) : char, int, float 등과같이 C 언어에서제공하는자료형. 사용자정의자료형 (user-defined data types) : 다양한자료형을묶어서목적에따라새로운자료형을

구조체정의 자료형 (data types) 기본자료형 (primitive data types) : char, int, float 등과같이 C 언어에서제공하는자료형. 사용자정의자료형 (user-defined data types) : 다양한자료형을묶어서목적에따라새로운자료형을 (structures) 구조체정의 구조체선언및초기화 구조체배열 구조체포인터 구조체배열과포인터 구조체와함수 중첩된구조체 구조체동적할당 공용체 (union) 1 구조체정의 자료형 (data types) 기본자료형 (primitive data types) : char, int, float 등과같이 C 언어에서제공하는자료형. 사용자정의자료형 (user-defined

More information

Frama-C/JESSIS 사용법 소개

Frama-C/JESSIS 사용법 소개 Frama-C 프로그램검증시스템소개 박종현 @ POSTECH PL Frama-C? C 프로그램대상정적분석도구 플러그인구조 JESSIE Wp Aorai Frama-C 커널 2 ROSAEC 2011 동계워크샵 @ 통영 JESSIE? Frama-C 연역검증플러그인 프로그램분석 검증조건추출 증명 Hoare 논리에기초한프로그램검증도구 사용법 $ frama-c jessie

More information

Microsoft PowerPoint - 3ÀÏ°_º¯¼ö¿Í »ó¼ö.ppt

Microsoft PowerPoint - 3ÀÏ°_º¯¼ö¿Í »ó¼ö.ppt 변수와상수 1 변수란무엇인가? 변수 : 정보 (data) 를저장하는컴퓨터내의특정위치 ( 임시저장공간 ) 메모리, register 메모리주소 101 번지 102 번지 변수의크기에따라 주로 byte 단위 메모리 2 기본적인변수형및변수의크기 변수의크기 해당컴퓨터에서는항상일정 컴퓨터마다다를수있음 short

More information

Microsoft Word - src.doc

Microsoft Word - src.doc IPTV 서비스탐색및콘텐츠가이드 RI 시스템운용매뉴얼 목차 1. 서버설정방법... 5 1.1. 서비스탐색서버설정... 5 1.2. 컨텐츠가이드서버설정... 6 2. 서버운용방법... 7 2.1. 서비스탐색서버운용... 7 2.1.1. 서비스가이드서버실행... 7 2.1.2. 서비스가이드정보확인... 8 2.1.3. 서비스가이드정보추가... 9 2.1.4. 서비스가이드정보삭제...

More information

<4D F736F F F696E74202D B3E22032C7D0B1E220C0A9B5B5BFECB0D4C0D3C7C1B7CEB1D7B7A1B9D620C1A638B0AD202D20C7C1B7B9C0D320BCD3B5B5C0C720C1B6C0FD>

<4D F736F F F696E74202D B3E22032C7D0B1E220C0A9B5B5BFECB0D4C0D3C7C1B7CEB1D7B7A1B9D620C1A638B0AD202D20C7C1B7B9C0D320BCD3B5B5C0C720C1B6C0FD> 2006 년 2 학기윈도우게임프로그래밍 제 8 강프레임속도의조절 이대현 한국산업기술대학교 오늘의학습내용 프레임속도의조절 30fps 맞추기 스프라이트프레임속도의조절 프레임속도 (Frame Rate) 프레임속도란? 얼마나빨리프레임 ( 일반적으로하나의완성된화면 ) 을만들어낼수있는지를나타내는척도 일반적으로초당프레임출력횟수를많이사용한다. FPS(Frame Per Sec)

More information

슬라이드 1

슬라이드 1 정적메모리할당 (Static memory allocation) 일반적으로프로그램의실행에필요한메모리 ( 변수, 배열, 객체등 ) 는컴파일과정에서결정되고, 실행파일이메모리에로드될때할당되며, 종료후에반환됨 동적메모리할당 (Dynamic memory allocation) 프로그램의실행중에필요한메모리를할당받아사용하고, 사용이끝나면반환함 - 메모리를프로그램이직접관리해야함

More information

버퍼오버플로우-왕기초편 10. 메모리를 Hex dump 뜨기 앞서우리는버퍼오버플로우로인해리턴어드레스 (return address) 가변조될수있음을알았습니다. 이제곧리턴어드레스를원하는값으로변경하는실습을해볼것인데요, 그전에앞서, 메모리에저장된값들을살펴보는방법에대해배워보겠습

버퍼오버플로우-왕기초편 10. 메모리를 Hex dump 뜨기 앞서우리는버퍼오버플로우로인해리턴어드레스 (return address) 가변조될수있음을알았습니다. 이제곧리턴어드레스를원하는값으로변경하는실습을해볼것인데요, 그전에앞서, 메모리에저장된값들을살펴보는방법에대해배워보겠습 앞서우리는버퍼오버플로우로인해리턴어드레스 (return address) 가변조될수있음을알았습니다. 이제곧리턴어드레스를원하는값으로변경하는실습을해볼것인데요, 그전에앞서, 메모리에저장된값들을살펴보는방법에대해배워보겠습니다. 여러분모두 Windows 에서 hex editor(hex dump, hex viewer) 라는것을사용해보셨을겁니다. 바로바이너리파일을 16 진수

More information

JAVA 프로그래밍실습 실습 1) 실습목표 - 메소드개념이해하기 - 매개변수이해하기 - 새메소드만들기 - Math 클래스의기존메소드이용하기 ( ) 문제 - 직사각형모양의땅이있다. 이땅의둘레, 면적과대각

JAVA 프로그래밍실습 실습 1) 실습목표 - 메소드개념이해하기 - 매개변수이해하기 - 새메소드만들기 - Math 클래스의기존메소드이용하기 (   ) 문제 - 직사각형모양의땅이있다. 이땅의둘레, 면적과대각 JAVA 프로그래밍실습 실습 1) 실습목표 - 메소드개념이해하기 - 매개변수이해하기 - 새메소드만들기 - Math 클래스의기존메소드이용하기 ( http://java.sun.com/javase/6/docs/api ) 문제 - 직사각형모양의땅이있다. 이땅의둘레, 면적과대각선의길이를계산하는메소드들을작성하라. 직사각형의가로와세로의길이는주어진다. 대각선의길이는 Math클래스의적절한메소드를이용하여구하라.

More information

PowerPoint Presentation

PowerPoint Presentation 객체지향프로그래밍 클래스, 객체, 메소드 ( 실습 ) 손시운 ssw5176@kangwon.ac.kr 예제 1. 필드만있는클래스 텔레비젼 2 예제 1. 필드만있는클래스 3 예제 2. 여러개의객체생성하기 4 5 예제 3. 메소드가추가된클래스 public class Television { int channel; // 채널번호 int volume; // 볼륨 boolean

More information

C++ Programming

C++ Programming C++ Programming 예외처리 Seo, Doo-okok clickseo@gmail.com http://www.clickseo.com 목 차 예외처리 2 예외처리 예외처리 C++ 의예외처리 예외클래스와객체 3 예외처리 예외를처리하지않는프로그램 int main() int a, b; cout > a >> b; cout

More information

이도경, 최덕재 Dokyeong Lee, Deokjai Choi 1. 서론

이도경, 최덕재 Dokyeong Lee, Deokjai Choi 1. 서론 이도경, 최덕재 Dokyeong Lee, Deokjai Choi 1. 서론 2. 관련연구 2.1 MQTT 프로토콜 Fig. 1. Topic-based Publish/Subscribe Communication Model. Table 1. Delivery and Guarantee by MQTT QoS Level 2.1 MQTT-SN 프로토콜 Fig. 2. MQTT-SN

More information

Microsoft Word - Tmax Programming Guide _ UCS _.doc

Microsoft Word - Tmax Programming Guide _ UCS _.doc Tmax Programming Guide ( UCS ) Copyright 2000 TmaxSoft Co., Ltd. All Rights Reserved Copyright Notice Copyright 2000 TmaxSoft Co., Ltd. All Rights Reserved. TmaxSoft Co., Ltd. 대한민국서울시강남구대치동 946-1 글라스타워

More information

<4D F736F F F696E74202D20B8B6C0CCC5A9B7CEC7C1B7CEBCBCBCAD202839C1D6C2F7207E203135C1D6C2F >

<4D F736F F F696E74202D20B8B6C0CCC5A9B7CEC7C1B7CEBCBCBCAD202839C1D6C2F7207E203135C1D6C2F > 10주차 문자 LCD 의인터페이스회로및구동함수 Next-Generation Networks Lab. 5. 16x2 CLCD 모듈 (HY-1602H-803) 그림 11-18 19 핀설명표 11-11 번호 분류 핀이름 레벨 (V) 기능 1 V SS or GND 0 GND 전원 2 V Power DD or V CC +5 CLCD 구동전원 3 V 0 - CLCD 명암조절

More information

iii. Design Tab 을 Click 하여 WindowBuilder 가자동으로생성한 GUI 프로그래밍환경을확인한다.

iii. Design Tab 을 Click 하여 WindowBuilder 가자동으로생성한 GUI 프로그래밍환경을확인한다. Eclipse 개발환경에서 WindowBuilder 를이용한 Java 프로그램개발 이예는 Java 프로그램의기초를이해하고있는사람을대상으로 Embedded Microcomputer 를이용한제어시스템을 PC 에서 Serial 통신으로제어 (Graphical User Interface (GUI) 환경에서 ) 하는프로그램개발예를설명한다. WindowBuilder:

More information

JAVA PROGRAMMING 실습 08.다형성

JAVA PROGRAMMING 실습 08.다형성 2015 학년도 2 학기 1. 추상메소드 선언은되어있으나코드구현되어있지않은메소드 abstract 키워드사용 메소드타입, 이름, 매개변수리스트만선언 public abstract String getname(); public abstract void setname(string s); 2. 추상클래스 abstract 키워드로선언한클래스 종류 추상메소드를포함하는클래스

More information

Sena Technologies, Inc. HelloDevice Super 1.1.0

Sena Technologies, Inc. HelloDevice Super 1.1.0 HelloDevice Super 110 Copyright 1998-2005, All rights reserved HelloDevice 210 ()137-130 Tel: (02) 573-5422 Fax: (02) 573-7710 E-Mail: support@senacom Website: http://wwwsenacom Revision history Revision

More information

KNK_C_05_Pointers_Arrays_structures_summary_v02

KNK_C_05_Pointers_Arrays_structures_summary_v02 Pointers and Arrays Structures adopted from KNK C Programming : A Modern Approach 요약 2 Pointers and Arrays 3 배열의주소 #include int main(){ int c[] = {1, 2, 3, 4}; printf("c\t%p\n", c); printf("&c\t%p\n",

More information

<443A5C4C C4B48555C B3E25C32C7D0B1E25CBCB3B0E8C7C1B7CEC1A7C6AE425CBED0C3E0C7C1B7CEB1D7B7A55C D616E2E637070>

<443A5C4C C4B48555C B3E25C32C7D0B1E25CBCB3B0E8C7C1B7CEC1A7C6AE425CBED0C3E0C7C1B7CEB1D7B7A55C D616E2E637070> #include "stdafx.h" #include "Huffman.h" 1 /* 비트의부분을뽑아내는함수 */ unsigned HF::bits(unsigned x, int k, int j) return (x >> k) & ~(~0

More information