Microsoft Word - Tmax Programming Guide _ UCS _.doc

Size: px
Start display at page:

Download "Microsoft Word - Tmax Programming Guide _ UCS _.doc"

Transcription

1 Tmax Programming Guide ( UCS ) 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 TMUCS Jan 7, 2006 Tmax 4.0 Tmax 제품은아래표와같이 Tmax Base, Tmax Standard, Options 으로나누어집니다. 본서는 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, TCP/IP Service Gateway 1

3 이책에관하여 Tmax UCS Manual 은클라이언트의요청에따라서비스를수행하고다음수행을기다리는현재의일반적인서버 / 클라이언트모델의업무프로세스와달리서버측의능동적인서비스제공을가능하게하는 UCS(User Control Server) 및이를특수한용도에맞게개선한 RDP(Realtime Data Procesor) 라는새로운프로그래밍기법과 API 에대한설명을제공한다. UCS/RDP 는두개의채널을이용하여일반적인요청 / 응답형의서비스뿐만 (TCS 프로세스 ) 아니라이와독립적으로진행되는루틴을설정하여지금까지힘들었던계속적인서비스제공이나외부서비스와의연계를쉽게구현할수있다. 사용자는 UCS/RDP 와 TCS 프로세스를적절히사용함으로써개발의용이함과더불어 Tmax system 이제공하는많은장점들을여러가지용도로활용할수있게될것이다. 누구를위한책인가? 이책은다수의클라이언트가동시에같은 Server 에접속하고같은서비스를요청하는업무에서, 해당서비스에대한 Database 나기타다른 System 의리소스들을과다하게이용하여발생할수있는문제점을해결할수있는대안을제시한지침서임과동시에클라이언트와서비스프로그램개발을위한정보와 Sample 을제공한다. 어떻게사용하는가? 1. 소개 : Tmax 의강력한기능중에하나인 UCS/RDP 프로세스에대한특징과필요성, 구성그리고사용방법, 사례와사용예제에대해소개한다. 2. 사용방법 : UCS/RDP 프로세스를사용하기위한환경설정과컴파일하는방법, 사용되는함수들에대해설명한다. 3. 사례 : UCS 프로세스를사용하고있는실제사례를들어업무의향상에 UCS 프로세스가어떻게기여하고있고사용되는지설명한다. 4. Sample: UCS 프로세스로구현된 Client 프로그램과 Server 프로그램의 Sample 을제시하여실제사용자의이해를돕고자한다. 관련서 Tmax Getting Started Guide Tmax Programming Guide ( C ) 2

4 Tmax Reference Manual 3

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

6 차례 1 UCS 및 RDP 개요 Process Control TCS (Tmax Control Server) POD(Process On Demand) UCS (User Control Server) UCS 의필요성 RDP(Real Data Processor) 개요 UCS 의특징 UCS 구성 UCS Server Program 구성 UCS Client Program 구성 RDP Server Program 구성 UCS 의환경 UCS 환경파일설정 RDP 환경파일설정 UCS 컴파일방법 RDP 컴파일방법 UCS 사용 비정상종료프로그램 (core) 발생시관리하는프로그램 socket을이용한비동기통신 RQ를사용한프로그램 부록 UCS 사례 UCS 예제프로그램 간단한 UCS 예제프로그램 서버대서버 UCS 프로그램 RDP 예제프로그램 간단한 RDP 예제프로그램 UCS 함수모음 tpclrfd

7 5.4.2 tpissetfd tpgetunsol tppost tpregcb tprelay tpsavectx tpschedule tpsendtocli tpsetfd tpsetunsol tpsetunsol_flag tpsubscribe tpsvctimeout tpsvrdown tpunregcb tpunsubscribe tpuschedule

8 1 UCS (User Control Server) 및 RDP(Real Data Processor) 개요 UCS (User Control Server) 란, 프로그램의처리흐름을미들웨어가제어하지않고, User 가직접제어할수있는 Tmax 고유의프로그램형태이다. 이를이용한프로그램과프로세스를 UCS 프로그램, UCS 프로세스라고한다. 이런형태의프로그램방식을제공함으로써클라이언트의요청 ( 이벤트 ) 에의해서만작업을수행하는기존의방식뿐아니라, 서버프로세스 (UCS 프로세스 ) 가능동적으로이벤트를발생시켜작업을수행할수있게된다. 현재이를이용해, 클라이언트요청이없어도정보전달을요구하는업무 ( 증권시세정보, notify 등 ), 작업스케쥴링업무, 대외기관과의연동업무등에사용되어지고있다. 1.1 Process Control Tmax 는 TCS(Tmax Control Server) Type 과 UCS(User Control Server) Type 이렇게두가지의 Process Control 을제공한다. Tmax 는 TCS(Tmax Contorl Server), POD(Process On Demand) 및 UCS(User Control Server) 등세가지 Type 의 Process Control 을제공한다. TCS 는다른 Middleware(Tuxedo, Entera, TopEnd 등 ) 에서사용되는것과같이클라이언트의 request 가있을경우에만서비스를제공하는전형적인 Process Control 방법이고, POD 는서버프로세스가기동되어있지않다가클라이언트의 request 가있을때기동되어서비스를수행하는 Process Control 방법이다. UCS 는 TCS, POD 의수동적인 Process Control 방법과비교되는능동적인 Process Control 방법이다. 클라이언트의요구가있을경우에만서비스를제공하는 TCS, POD Process 와는다르게 UCS Process 는클라이언트로부터의 request 가없더라도, 클라이언트에게데이터를전송할수있다. 이 UCS 는 TP Monitor 중 Tmax 에만존재하는고유의기능이다. 7

9 1.1.1 TCS (Tmax Control Server) TCS Process 는일반적인 3-Tier 개념을가지고있는 Server Process 이다. Tmax System 은클라이언트의 request 를적절한 Server Process 의 Service 에게전달하게되고, Server Process 의 Service 는비즈니스로직에맞는연산작업후결과값을생성해서클라이언트에게리턴한다. TCS Type 의 Server Program 의흐름은다음과같다 POD(Process On Demand) 그림 1 TCS Type Server Program POD Process 는 TCS 와비슷한형태의 Process 이다. 다른점은 Tmax 부트시에프로세스가기동되어있는상태가아니다가클라이언트에서요청이오면 Tmax 에서해당프로세스를기동시켜요청을처리한후에다시프로세스를종료시키는형태의프로세스라는점이다 UCS (User Control Server) 일반적으로 TCS Process 는, 클라이언트의 request 에대해서만작업을수행하는수동적인 Process 이다. 그에비해서 UCS Process 는클라이언트의 request 가없더라도, 자신이별도의작업을수행할수있으며, 또한클라이언트의 request 발생시에도이를처리할수있다. 8

10 UCS Type 의 Server Program 의흐름은다음과같다. 그림 2 UCS Type Server Program 1.2 UCS 의필요성 UCS 는말그대로 User 가 Control 할수있는 Server 이다. 이를이용해, 기존데몬형태로기동되어, 수행했던많은작업들 ( 특정시간시작업수행, 다른대외기관과의연동작업, 클라이언트에게로의정보전달등 ) 을 UCS 형태로작성할수있다. 이렇게작성된프로그램의프로세스들은모두 Tmax 관할이되어별도의프로세스관리 ( 비정상종료시재기동등 ) 가필요없게된다. 다음은 UCS 가사용되는경우이다. 9

11 정보변경시, 이를접속된클라이언트 ( 특정클라이언트나모든클라이언트 ) 에게알려주는형태의업무. 1. 업무사례 1) 증권업무의경우시시각각변하는시세정보를클라이언트의요청이없이도, 이를전달하게함으로써, 클라이언트는보다빠르고, 정확한데이터를받아볼수있게된다. 2. 업무사례 2) software 장애나작업일정에대한통보, 기타공지사항등을관리자나개발자또는 end user 에게통지하는형태의업무 3. 업무사례 3) 은행업무의경우환거래발생시직접해당 클라이언트에게 통보해주거나, 자동화기기 상태를 특정 클라이언트 ( 자동화기기 관리자 ) 에게 알려주고자 하는 경우 사용할수있다. 작업스케줄링형태의업무 1. 업무사례 1) 특정시간에 batch 작업수행하고자하는경우나, 기타스케줄링을요구하는업무에사용할수있다. 대외연동업무 1. 업무사례 1) 대외기관과의연동업무구현시보다효율적이고, 간단한프로그램구조를제공 ( 비동기형태의거래흐름, 데이터의도착유무를 check 하기위한 looping 을없게함으로써 CPU 의자원을절약, 프로그램작성이간편하다. 기타많은형태의업무를 UCS Type 으로구현할수있다. 개발자들은 UCS 프로그램의처리흐름을정확히이해하고사용한다면, 업무구현시유용할것이다. 1.3 RDP(Real Data Processor) 개요 RDP 는 UCS 와같은형식의서버로서동작한다. RDP 는지속적으로변하는데이터를클라이언트에게효율적이고빠르게전달하기위해 10

12 UCS 타입의프로세스를커널수준에서개량한프로세스이다. 이 RDP 는 CLH 를거치지않고클라이언트로데이터를전달하기때문에소량의데이터를다수의클라이언트에게짧은시간간격으로보낼필요가있을때프로세스점유율이나처리속도의측면에서 UCS 보다월등한성능을보인다. 그림 3 RDP 의작동방식 RDP 서버는한노드에유일해야하며해당노드에존재하는모든서비스는 RDP 서버로서비스의결과데이터를전송후 RDP 서버에서데이터를클라이언트로보내게된다. 이를위해서다른서버프로세스가처리한결과를얻어오기위한채널의수 (RSCPC) 를설정해주어야하며 CLH 와 RDP 서버프로세스의수는일정하게유지되어야한다 ( 즉 MIN 값과 MAX 값이같아야한다 ). 단 RDP 서버프로세스의 MIN, MAX 는 CLH 보다항상많아야하며통상 2 배수로설정한다. 또한 CLH 는 MINCLH, MAXCLH 의수를같게설정해주어야한다. 프로그램구성및 API 는 UCS 와완전히동일하며환경파일과 compile 방법에서약간차이가있다. 11

13 2 UCS 의특징 UCS Program 은 usermain 에대한구현부가있어야하고, 컴파일시 UCS Library (libsvrucs.a / libsvrucs.so) 와링크되어야한다. 기본적으로 usermain() 은무한 loop 형태로구현된다. 즉, usermain() 함수가종료 ( 함수리턴 ) 되면, 해당프로세스는 tpsvrdone() 을수행하고종료해버리기때문이다. 즉, usermain() 이란함수를 main() 함수처럼생각하면된다.(main() 이종료되면해당프로세스가종료되는것과같다 ) UCS Program 작성시주의해야할사항은 usermain() 의무한 loop 내에 tpschedule() 이란함수가항상존재해야한다는것이다. 그이유는 tpschedule() 함수를통해클라이언트로부터전송된데이터나 tmax kernel 로부터전송된종료명령을받기때문이다. 다음은 usermain() 함수의간단한예이다. +1 #include <stdio.h> +2 #include <usrinc/atmi.h> +3 #include <usrinc/ucs.h> #define MAX_CLI int num_cli; +7 int client_id[max_cli]; +8 int count; int +11 tpsvrinit(int argc, char *argv[]) num_cli = 0; +14 count = 0;

14 +16 int +17 usermain(int argc, char *argv[]) /* tmax 의 ucs 모드에서 main 과 같은부분 */ int jobs; +20 int i; +21 int ret; +22 char *sndbuf; +23 static int count = 0; printf("usermain start\n"); sndbuf = (char *)tpalloc("carray", NULL, 1024); while(1) +30 for (i = 0; i < num_cli; i++) +31 sprintf(sndbuf, "Success tpsendtocli [%d] \n", count); +32 tpsendtocli (client_id[i], sndbuf, 1024, 0); count++; +35 sleep(1); +36 jobs = tpschedule(-1); LOGIN(TPSVCINFO *msg) /* tmax 의 SERVICE 부분 */ char *sndbuf; +43 int clid; +44 int ret; +45 int i; printf("msg->data = [%.*s]\n", msg->len, msg->data); +48 fflush(stdout); sndbuf = (char *)tpalloc("carray", NULL, 1024); 13

15 printf("success transaction"); +53 sprintf(sndbuf, "Success transaction"); if (num_cli < MAX_CLI) +56 client_id[num_cli] = tpgetclid(); +57 printf("client id(clid) = %d\n", client_id[num_cli]); +58 num_cli++; tpreturn(tpsuccess, 0, (char *)sndbuf, 1024, 0); +62 해당프로그램은특정정보를접속된클라이언트에게비요청메시지형태로전송하는예제이다. 간략하게프로그램을설명하면다음과같다. 1. 최초기동시 tpsvrinit() 을수행하고 usermain() 함수로들어온다. 2. 라인 30, num_cli 값이 0 이므로, for 문을빠져나온다. 3. 라인 36, tpschedule() 을통해클라이언트로부터서비스요청이있는지, tmdown 명령이왔는지를 check 한다. 4. 만약, 클라이언트로부터 LOGIN SERVICE 요청이온경우라인 40 을수행한다. 그렇지않는경우 tpschedule() 함수를빠져나온다. 5. 라인 56, tpgetclid() 를통해접속된 client 정보를 global 변수인 client_id 에저장한후 num_cli 값을증가시킨다. 6. 라인 61, LOGIN SERVICE 를요청한클라이언트에게응답데이터를전송한다. 7. 라인 36, tpschedule() 함수를빠져나온다. 8. 라인 30, num_cli 값이양의정수값이므로 for 문내를수행한다. 9. 라인 32, tpsendtocli() 를통해 client_id 에저장된클라이언트에게해당정보를전송한다.( 이부분이비요청메시지를전달하는부분이다.) 14

16 10. 3 ~ 9 을반복수행한다. 11. 만약 tpschedule() 에서 tmdown 명령을받았다면, tpsvrdone() 을수행한후프로세스가종료된다. 2.1 UCS 구성 UCS Server Program 구성 UCS Server Program 은다음과같은모듈과라이브러리로구성된다. $(TMAXDIR)/lib/libsvrucs.a 또는 $(TMAXDIR)/lib/shared/libsvrucs.so 1. Program 의 main() 과각종 ucs 관련 api 등을가지고있는라이브러리 2. UCS Program make 시항상 link 를해야한다. int tpsvrinit(int argc, char *argv[]) 1. 프로그램기동시한번수행된다. 대부분 Global 변수초기화나, non-xa 경우데이터베이스연결등이이곳에서구현된다. int tpsvrdone() 1. 프로그램종료시한번수행된다. 대부분사용 resource 반환이나 non-xa 경우데이터베이스연결해제등이이곳에서구현된다. int usermain(int argc, char *argv[]) 1. 실제 application 의 logic 이구현되는부분 2. 대부분무한 loop 형태로구현된다. (usermain() 모듈에서 return 되면, tpsvrdone() 을수행하고프로세스가종료되는형태이기때문이다.) 15

17 3. 클라이언트의요청데이터나 tmdown 명령을받기위해 tpschedule() 이항상필요하다. 만약 tpschedule() 이 call 되지않으면, tmdown 이되지않으며, 종료를원하는경우는 tmdown i 형태로종료해야한다. 그림 4 UCS Server Program 위와같이, UCS 프로그램은 1 개의모듈과 1 개의라이브러리로구성되며, usermain() 모듈내에는꼭 tpschedule() 함수를 call 해야한다. UCS Program 은위의프로그램구성을통해, User 의능동적제어가가능하며, 이를이용해다양한업무를수행할수있도록많은 API 를제공한다. ( 이 API 들의 prototype 은 $(TMAXDIR)/usrinc/ucs.h 에정의되어있다.) 주요 API 의 prototype 은다음과같다. 모든 UCS Program 에서사용되는 API 1. int tpschedule(int sec) 2. int tpuschedule(int usec) 16

18 비요청메시지전송에이용되는 API 1. int tpsendtocli(int clid, char *data, long len, long flags) 2. int tpgetclid(void) Non Tmax 와의비동기통신위한 API 1. int tpsetfd(void) 2. int tpissetfd(void) 3. int tpclrfd(void) 4. int tpgetctx(ctx_t *ctxp) 5. int tpcancelctx(ctx_t *ctxp) 6. CTX_T *tpsavectx() 7. int tprelay(char *svc, char *data, long len, long flags, CTX_T *ctxp); UCS 내에서 tpacall( 비동기통신 ) 함수사용시이용되는 callback API 1. int tpregcb(void) 2. int tpunregcb(void) 그러면위의각 API 들에대한사용방법및용도에대해설명은다음과같다 int tpschedule(int timeout) 클라이언트 request 와 tmdown 명령등의이벤트를받아들이는함수로써, 최대 timeout 시간동안이벤트를기다린다. 만약 timout 시간까지어떤 이벤트도발생하지않으면, 함수리턴을한다. 이때리턴값은 -1 이다. 이때주의해야할사항은에러인경우도 1 이므로 tperrno 값이 판단기준이된다. 전자의경우 (timeout 인경우 ) 는 tperrno 의값이 13(TPETIME) 으로리턴된다. 입력값 : int sec 17

19 1. 양의정수 : 해당시간동안이벤트를기다린다 : 이벤트가발생할때까지무한정기다린다 : 도착한이벤트가있는지만을 check 하여, 있으면이벤트를발생시키고, 없으면함수리턴한다 출력값 : 없음 리턴값 : 예제 1. 양의정수 : 이벤트가도착했을경우를의미한다 : 이벤트가도착하지않았거나, 에러가발생한경우를의미한다. 이때, 주의할사항은이벤트가도착하지않는경우, 즉 timeout 인경우 tperrno 값에 13 이세팅되므로이값을 check 하여처리해야한다. #include <stdio.h> #include <usrinc/atmi.h> #include <usrinc/ucs.h> int tpsvrinit(int argc, char *argv[]) return 1; int tpsvrdone() return 1; int usermain(int argc, char *argv[]) int rcode, i; 18

20 printf("usermain start\n"); while(1) rcode = tpschedule(1); printf( rcode = %d, i = %d, tperrno = %d\n, rcode, i, tperrno); i++; UCSTEST(TPSVCINFO *msg) /* tmax 의 SERVICE 부분 */ printf( UCSTEST start!!\n ); tpreturn(tpsuccess, 0, msg->data, msg->len, 0); 출력 : - 클라이언트 request 가없는경우 : rcode = -1, i = 0, tperrno = 13 rcode = -1, i = 1, tperrno = 13 rcode = -1, i = 2, tperrno = 13 - 클라이언트 request 가있는경우 rcode = -1, i = 0, tperrno = 13 rcode = -1, i = 1, tperrno = 13 rcode = -1, i = 2, tperrno = 13 UCSTEST start!! /* 클라이언트 request 도착 */ rcode =1, i=3, tperrno = 0 /* 1 을 return 받음 */ rcode = -1, i = 4, tperrno = int tpuschedule(int usec) tpschedule() 과같은기능을수행하며, 틀린점은 microsecond 값이입력값으로사용된다. 19

21 int tpsendtocli(int clid, char *data, long len, long flags) clid 에해당하는클라이언트에게비요청메시지를전달하는함수이다. 여기서 clid 는 tpgetclid() 를통해얻어진다. 즉, tpsendtocli() 는 tpgetclid() 함수와함께사용되어야함을의미한다. 이함수를이용하여, 증권시세등과같이, 서버정보변화를클라이언트에게일방적으로전달하는형태의업무에사용된다. 입력값 1. int clid : tpgetclid() 로얻어지는클라이언트의유일한번호이다. 2. char *data : 전달할데이터이다. 반드시사용하기이전에 tpalloc 을통해할당된버퍼여야한다. 3. long len : 클라이언트에게전송할데이터의길이이다 4. long flags : 전송방법에대한구분자이다. 다음은 flags 에해당하는값에대한설명이다. a. 0 (Zero) 전송될데이터가반드시해당클라이언트에전송되어야할경우사용된다. 즉서버가매우바쁜경우해당데이터는저장되었다가순차적으로보내지게된다. 되는데이때, network 의 bandwidth 와처리량에따라계속적으로클라이언트에게보낼데이터가쌓여, 메모리 fault 문제가발생할수있다. b. TPUDP 위의 0 값의문제점이메모리증가에따른문제를 해결하기위한 flag 값으로써, 만약어는정도데이터가 쌓이면데이터를버려지게된다. 즉통신상의 UDP 와같이 클라이언트에게 전송될 데이터가 도중에 분실될 수도 있음을의미한다. c. TPFLOWCONTROL 클라이언트상태를점검하고데이터를전달할수있는지를확인한다음보내진다. 만약, 보낼수없는상태인경우 1 로함수리턴한다. 출력값 : 없음 리턴값 : 20

22 예제 1. 1 : 정상 2. 1 : 에러, tperrno 로어떤 error 인지를 check 해야한다. #include <stdio.h> #include <usrinc/atmi.h> #include <usrinc/ucs.h> int client_id[5]; int usermain(int argc, char *argv[]) int jobs; int i; char *sndbuf; static int count = 0; printf("usermain start\n"); sndbuf = (char *)tpalloc("carray", NULL, 1024); while(1) for (i = 0; i < 5; i++) if (client_id[i] < 0) continue; sprintf(sndbuf, "Success tpsendtocli [%d] \n", count); tpsendtocli (client_id[i], sndbuf, 1024, 0); count++; jobs = tpschedule(1); CONN_CLI(TPSVCINFO *msg) 21

23 char int i; *sndbuf; sndbuf = (char *)tpalloc("carray", NULL, 1024); if (sndbuf == NULL) printf( tpalloc fail!!!\n, tperrno); tpreturn(tpfail, -1, NULL, 0, 0); for (i=0; i<5; i++) if (client_id[i] < 0) client_id[i] = tpgetclid(); break; strcpy(sndbuf, connect success!! ); tpreturn(tpsuccess, 0, (char *)sndbuf, strlen(sndbuf), 0); int tpsvrinit(int argc, char *argv[]) for (i=0; i<5; i++) client_id[i] = -1; return 1; int tpsvrdone() int tpgetclid(void) reqeust 를요청한클라이언트의고유번호이다. 이번호는내부적으로 tmax 가부여한다. 이함수는비요청메시지를클라이언트에게전달하기위해 tpsendtocli() 와함께사용된다. tpsendtocli() 의첫번째 argument 인 clid 값은이함수를통해얻어지게된다. 22

24 입력값 : 없음 출력값 : 없음 리턴값 : request 를요청한클라이언트고유번호 int tpsetfd(int fd) 일반적으로 tpschedule() 에서는 Tmax 용클라이언트의 request 와 tmdown 의명령이도착했는지를 check 하게되는데, 이함수를이용하면이 fd 로온데이터도 check 하게된다. 이함수는네트워크프로그램에서많이사용되는 FD_SET() 과같은기능을가졌다고생각하면된다. 이함수는 tpclrfd(), tpissetfd() 등과함께사용된다. 입력값 : 1. int fd : socket fd 값 출력값 : 없음 리턴값 1. 1 : 정상 int tpissetfd(int fd) 2. 1 : 에러, tperrno 로에러를 check 한다. 해당 fd 로데이터가도착했는지를 check 한다. 이함수는네트워크프로그램에서많이사용되는 FD_ISSET() 과같은기능을가졌다고생각하면된다. 이함수는 tpsetfd(), tpclrfd() 등과함께사용된다. 입력값 1. int fd : socket fd 값 출력값 : 없음 리턴값 : 1. 1 : 정상 2. 1 : 에러, tperrno 로에러를 check 한다. 23

25 int tpclrfd(int fd) 해당 socket fd 를 tpschedule() 에서 check 하지않도록해제시키는함수이다. 이함수는네트워크프로그램에서많이사용되는 FD_CLR() 과같은기능을가졌다고생각하면된다. 이함수는 tpsetfd(), tpissetfd() 등과함께사용된다. 입력값 1. int fd : socket fd 값 출력값 : 없음 리턴값 예제 1. 1 : 정상인경우 2. 1 : 에러인경우, tperrno 로에러를 check 한다. #include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include <fcntl.h> #include <errno.h> #include <signal.h> #include <sys/types.h> #include <sys/time.h> #include <sys/socket.h> #include <sys/un.h> #include <netinet/in.h> #include <arpa/inet.h> #include <netdb.h> #include <usrinc/atmi.h> #include <usrinc/ucs.h> #ifndef INADDR_NONE #define INADDR_NONE 0xffffffff 24

26 #endif #define PORT 9345 #define HOST_ADDR " " #define MAX_BUFFER_LEN /* global variable */ int client_fd = -1; +30 /* service initial */ int tpsvrinit(int argc, char *argv[]) client_fd = network_connect(host_addr, PORT); if (client_fd > 0) /* connect 를통해얻어진 socket fd 를 tpschedule() 에등록한다. */ tpsetfd(client_fd); int tpsvrdone() if (client_fd > 0) /* tpschedule 로부터해당 socket fd 를해제한다. */ tpclrfd(client_fd); close(client_fd); /* main */ int usermain(int argc, char *argv[]) int n; /* never return */ while(1) 25

27 if (client_fd < 0) client_fd = network_connect(host_addr, PORT); if (client_fd > 0) tpsetfd(client_fd); else tpschedule(5); continue; if ((n = tpschedule(0)) < 0) sleep(1); continue; /* 해당 socket fd 로 data 가도착했는지를시험한다. */ if (tpissetfd(client_fd)) if ((n = request_from_client(client_fd)) < 0) tpclrfd(client_fd); close(client_fd); client_fd = -1; /* end of while */ /* client request */ int request_from_client(int fd) int n, len; 26

28 char *ptr, buffer[max_buffer_len]; /* read header */ memset(buffer, 0x00, sizeof(buffer)); n = socket_read(fd, buffer, 4); if (n <= 0) return -1; len = atoi(buffer); /* read data */ n = socket_read(fd, &buffer[4], len); if (n <= 0) return -1; sleep(3); len += 4; n = socket_write(fd, buffer, len); return n; /* client connect for TCP/IP */ int network_connect(char *host, int port) struct sockaddr_in serv_addr; unsigned long inaddr; struct hostent *hp; int i, fd; memset((char *) &serv_addr, 0, sizeof(serv_addr)); serv_addr.sin_family = AF_INET; serv_addr.sin_port = htons(port); if ((inaddr = inet_addr(host))!= INADDR_NONE) memcpy((char *) &serv_addr.sin_addr, (char *) &inaddr, sizeof(inaddr)); 27

29 else if ((hp = gethostbyname(host)) == NULL) return -1; memcpy((char *) &serv_addr.sin_addr, hp->h_addr, hp->h_length); if ((fd = socket(af_inet, SOCK_STREAM, 0)) < 0) return -1; if (connect(fd, (struct sockaddr *) &serv_addr, sizeof(serv_addr)) >= 0) return fd; close(fd); return -1; /* data read */ int socket_read(int fd, char *ptr, int nbytes) int nleft, nread; char *ptr2; ptr2 = (char *)ptr; nleft = nbytes; while (nleft > 0) nread = recv(fd, ptr, nleft, 0); if (nread < 0) if (errno == EINTR) continue; else if (errno == EWOULDBLOCK) return (nbytes - nleft); return(nread); /* error, return < 0 */ else if (nread == 0) break; /* EOF */ nleft -= nread; ptr += nread; return (nbytes - nleft); /* return >= 0 */ 28

30 /* data write */ int socket_write(int fd, char *ptr, int nbytes) int nleft, nwritten; nleft = nbytes; while (nleft > 0) nwritten = send(fd, ptr, nleft, 0); if (nwritten <= 0) return(nwritten); /* error */ nleft -= nwritten; ptr += nwritten; return(nbytes - nleft); int tpgetctx(ctx_t *ctxp) 비동기통신을위해, client 정보와 transaction 정보등을가져오는함수이다. 해당정보는 CTX_T structure 구조에담겨져온다. 이와비슷한동일한함수로는 tpsavectx() 가있으며이두함수의기능은정확히똑같다. 다만, ctxp 의 reference 를 user 가가지게되느냐, 아니면서버 library 내부에서가지느냐의차이만있을뿐이다. tpgetctx() 는 user 가 reference 를가지게된다. 대부분단일프로세스에서 ctxp 값을참조하고하는경우는 tpsavectx() 를사용하고, 둘이상의프로세스가이값을참조하고자하는경우는 tpgetctx() 를사용한다. tpgetctx() 를통하여 CTX_T * 를가져온경우 입력값 : 없음 출력값 29

31 1. CTX_T *ctxp : client 정보와 transaction 정보등으로이루어진 structure 구조 리턴값 1. 1 : 정상인경우 2. 1 : 에러인경우, tperrno 로에러를 check 한다 int tpcancelctx(ctx_t *ctxp) 서버 library 내에가지고있는해당호출자의정보를지운다. 입력값 : 없음 출력값 1. CTX_T *ctxp : client 정보와 transaction 정보등으로이루어진 structure 구조 리턴값 1. 1 : 정상인경우 2. 1 : 에러인경우, tperrno 로에러를 check 한다 CTX_T *tpsavectx() 비동기통신을위해, client 정보와 transaction 정보등을가져오는함수이다. 해당정보는 CTX_T structure 구조에담겨져온다. 이와동일한함수로는 tpgetctx() 가있으며이두함수의기능은정확히똑같다. 다만, ctxp 의 reference 를 user 가가지게되느냐, 아니면서버 library 내부에서가지느냐의차이만있을뿐이다. tpsavectx() 는서버 library 내부에서 reference 를가진다. 대부분단일프로세스에서 ctxp 값을참조하고하는경우는 tpsavectx() 를사용하고, 둘이상의프로세스가이값을참조하고자하는경우는 tpgetctx() 를사용한다. 입력값 : 없음 출력값 : 없음 리턴값 30

32 1. CTX_T *ctxp : client 정보와 transaction 정보등으로이루어진 structure 구조 2. NULL : 에러인경우 int tprelay(char *svc, char *data, long len, long flags, CTX_T *ctxp) 대외연동을위한비동기통신함수이다. 이함수는 tpforward() 를통해 UCS 의서비스요청이오게되면해당서비스에서는 tpsavectx() 를통해 client 정보와 transaction 정보를저장한후, 데이터를대외서버에보내게되고, 응답이오면 tpsavectx() 를통해저장된 client 정보와 transaction 정보를실어서또다른서비스를호출하게된다. 이를통해 UCS 프로그램이전혀 block 되는부분이없게된다. 일반적으로통신의효율을높이기위해송신서비스와수신서비스를분리하게되는데, 이때송신서비스는 tpforward() 를통해보내지고, 수신서비스는 tprelay() 를통해받게된다. 입력값 : 1. char *svc : 호출할 service 명 2. char *data : 보낼데이터 3. long len : 보낼데이터의길이 4. long flags 5. CTX_T *ctxp : client 정보와 transaction 정보등으로이루어진 structure 구조 출력값 : 없음 리턴값 예제 1. 1 : 정상 2. 1 : 에러 #include <stdio.h> 31

33 #include <stdlib.h> #include <string.h> #include <unistd.h> #include <fcntl.h> #include <errno.h> #include <signal.h> #include <sys/types.h> #include <sys/time.h> #include <sys/socket.h> #include <sys/un.h> #include <netinet/in.h> #include <arpa/inet.h> #include <netdb.h> #include <usrinc/atmi.h> #include <usrinc/ucs.h> #ifndef INADDR_NONE #define INADDR_NONE #endif 0xffffffff #define MAX_CLIENT 10 #define PORT 9345 #define MAX_BUFFER_LEN 4096 struct myinfo_t int fd; char unique_id[10]; CTX_T *ctx; ; typedef struct myinfo_t MYINFO; /* global variable */ 32

34 int listen_fd = -1; int client_fd = -1; int portno; MYINFO *myinfo; /* service initial */ int tpsvrinit(int argc, char *argv[]) listen_fd = network_listen(portno); if (listen_fd > 0) tpsetfd(listen_fd); client_init(); int tpsvrdone() if (listen_fd > 0) tpclrfd(listen_fd); close(listen_fd); /* client initial */ int client_init() int i, len; len = sizeof(myinfo) * MAX_CLIENT; myinfo = (MYINFO *)malloc(len); for (i = 0; i < MAX_CLIENT; i++) myinfo[i].fd = -1; 33

35 myinfo[i].ctx = NULL; /* main */ int usermain(int argc, char *argv[]) int n; /* never return */ while(1) if (listen_fd < 0) listen_fd = network_listen(port); if (listen_fd > 0) tpsetfd(listen_fd); else tpschedule(5); continue; if ((n = tpschedule(0)) < 0) sleep(1); continue; /* check listen port */ if (tpissetfd(listen_fd)) if ((client_fd = network_accept(listen_fd)) < 0) tpclrfd(listen_fd); close(listen_fd); listen_fd = -1; else tpsetfd(client_fd); 34

36 continue; /* check client port */ if (tpissetfd(client_fd)) if (client_response(client_fd) < 0) tpclrfd(client_fd); close(client_fd); client_fd = -1; /* end of while */ /* service */ UCS_TEST(TPSVCINFO *msg) int i, n; CTX_T *ctx; printf("ucs_test : 12345\n"); ctx = (CTX_T *)tpsavectx(); for (i = 0; i < MAX_CLIENT; i++) if (myinfo[i].fd < 0) myinfo[i].fd = client_fd; memcpy(myinfo[i].unique_id, msg->data, 6); myinfo[i].ctx = ctx; break; n = message_write(client_fd, msg->data, msg->len); if (n < 0) tpclrfd(client_fd); close(client_fd); 35

37 client_fd = -1; tpreturn(tpfail, 999, (char *)NULL, 0, 0); tpreturn(tpsuccess, 0, (char *)NULL, 0, 0); /* message write */ int message_write(int fd, char *data, long datalen) int n, len; char buffer[max_buffer_len]; char temp[10]; memcpy(&buffer[4], data, datalen); sprintf(temp, "%04d", datalen); memcpy(buffer, temp, 4); len = datalen + 4; n = socket_write(fd, buffer, len); printf("ucs_listen:socket-write = %d\n", n); return n; /* client response */ int client_response(int fd) int i, n, len; CTX_T *ctx; char *ptr, buffer[max_buffer_len]; 36

38 /* read header */ memset(buffer, 0x00, sizeof(buffer)); n = socket_read(fd, buffer, 4); if (n <= 0) return -1; len = atoi(buffer); printf("ucs_listen:length : %d\n", len); /* client memory alloc */ ptr = (char *)tpalloc("carray", "", len+10); if (ptr == NULL) return -1; /* read data */ n = socket_read(fd, ptr, len); if (n <= 0) tpfree(ptr); return -1; for (i = 0; i < MAX_CLIENT; i++) if (myinfo[i].fd < 0) continue; if (memcmp(myinfo[i].unique_id, ptr, 6) == 0) ctx = myinfo[i].ctx; myinfo[i].fd = -1; myinfo[i].ctx = NULL; break; if (i >= MAX_CLIENT) return 0; printf("ucs_listen:tprelay before: length = %d\n", n); n = tprelay("xa_tolower", ptr, (long)n, 0, ctx); if (n < 0) 37

39 printf("ucs_listen:tprelay failed: tperrno=%d\n", tperrno); printf("ucs_listen:tprelay ok\n"); tpfree(ptr); return 0; /* server : listen */ int network_listen(int portno) int fd; int on; struct sockaddr_in serv_addr; if ((fd = socket(af_inet, SOCK_STREAM, 0)) < 0) return(-1); on = 1; if (setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, (char *) &on, sizeof(on)) < 0) printf("setsockopt error for SO_REUSEADDR"); memset((char *) &serv_addr, 0, sizeof(serv_addr)); serv_addr.sin_family = AF_INET; serv_addr.sin_addr.s_addr = htonl(inaddr_any); serv_addr.sin_port = htons(portno); if (bind(fd, (struct sockaddr *) &serv_addr, sizeof(serv_addr)) < 0) close(fd); return(-2); 38

40 if (listen(fd, 250) < 0) close(fd); return(-3); return(fd); /* server : client accept */ int network_accept(int listenfd) int fd, len; struct sockaddr_in cli_addr; len = sizeof(cli_addr); fd = accept(listenfd, (struct sockaddr *)&cli_addr, &len); if (fd < 0) return(-1); /* often errno=eintr, if signal caught */ return(fd); /* data write */ int socket_write(int fd, char *ptr, int nbytes) int nleft, nwritten; nleft = nbytes; while (nleft > 0) nwritten = send(fd, ptr, nleft, 0); if (nwritten <= 0) return(nwritten); /* error */ 39

41 nleft -= nwritten; ptr += nwritten; return(nbytes - nleft); /* data read */ int socket_read(int fd, char *ptr, int nbytes) int nleft, nread; char *ptr2; ptr2 = (char *)ptr; nleft = nbytes; while (nleft > 0) nread = recv(fd, ptr, nleft, 0); if (nread < 0) if (errno == EINTR) continue; else if (errno == EWOULDBLOCK) return (nbytes - nleft); return(nread); /* error, return < 0 */ else if (nread == 0) break; /* EOF */ nleft -= nread; ptr += nread; return (nbytes - nleft); /* return >= 0 */ 40

42 int tpregcb(void) UCS 상에서비동기형요청에대한응답을받는루틴을서정하는함수이다. UCS 방식서버프로세스에서 tpgetreply() 대신사용될수있다. 된다. 즉, tpacall() 을통해보낸요청에대한응답을 tpgetreply() 를통해받는것이아니라 tpregcb() 에등록된 callback 함수를통해받게된다. 입력값 : 없음 출력값 : 없음 리턴값 1. 1 : 정상인경우 2. 1 : 에러인경우 UCS Client Program 구성 UCS Program 으로부터 Service 를제공받는 Client Program 의경우일반적인프로그램과거의유사한형식을가지게되는데, UCS Program 으로부터전송되는 Data 를수신할수있도록설정하는부분과, UCS Program 으로부터전송되는 Data 를처리하는부분이포함되어야한다. Client Program 에서사용하는함수로 UCS Program 으로부터전송되는 Data 를수신할수있도록설정하는것으로는 tpsetunsol_flag(), tpsetunsol(), tpgetunsol() 이있다. tpsetunsol_flag() 는 tpstart() 함수를이용하여 Tmax System 과연결시사용한 flag 값을재설정하는함수이다. 이함수는보통비요청메시지를받을것인지받지않을것인지의 flag 를설정한다. 그러면위의각 API 들에대한사용방법및용도에대해설명하자면다음과같다 int tpsetunsol_flag(int flag) 비요청메시지수신 flag 를설정하는함수이다. tpsetunsol_flag() 는 tpstart() 함수를이용하여 Tmax 시스템과연결시사용한 flag 값을재설정하는함수이다. 이함수는보통비요청메시지의수신과관련된 41

43 flag 를설정한다. flag 는 sms TPUNSOL_IGN, TPUNSOL_HND, TPUNSOL_POLL 3 개중하나를입력한다. TPUNSOL_IGN flag 는비요청메시지를받지않겠다는의미이고, TPUNSOL_HND 과 TPUNSOL_POLL 은비요청메시지를받겠다는의미이다. 입력값 : int flag 1. TPUNSOL_IGN : 비요청메시지를받지않겠다는의미 2. TPUNSOL_HND : 비요청메시지를받는다는의미 3. TPUNSOL_POLL : 비요청메시지를받는다는의미 출력값 : 없음 리턴값 1. 1 : 정상인경우 2. 1 : 에러인경우 Unsolfunc tpsetunsol(void (*disp)(char *data, long len, long flags)) 비요청메시지수신시처리방법을설정하는함수이다. tpsetunsol() 은요청되지않은메시지가 Tmax 라이브러리에의해수신되었을때실행되어야할루틴을설정한다. tpsetunsol() 이처음으로호출되기전에, Tmax 라이브러리에의해수신된비요청메시지는무시된다. NULL 함수포인터의 tpsetunsol() 호출도마찬가지로무시된다. 시스템이비요청메시지를통지받는데사용되는방법은응용프로그램에임의로결정되며, 이는각클라이언트별로변경가능하다. tpsetunsol() 호출로전달된함수포인터는주어진인수정의에적합하여야한다. data 는수신된유형버퍼를지시하고, len 은데이터의길이를나타낸다. flags 는현재사용되지않는다. 만약아무데이터도수반되지않았다면, data 는 NULL 이될수있다. data 가클라이언트가알지못하는버퍼유형및하위유형인경우, 데이터는이해되지못한다. 응용프로그램 data 를제거할수없으며, 대신시스템이이를제거하고데이터영역을무효화하여 return 한다. 입력값 : 없음 42

44 출력값 : 없음 리턴값 1. 설정된비요청메시지처리루틴의포인터 : 정상적인경우 2. TPUNSOLERR : 에러인경우 int tpgetunsol(int type, char **data, long *len, long flags) 비요청메시지수신함수이다. tpgetunsol() 은클라이언트요청이없이일방적으로전달되어지는메시지를받아서처리하는함수이다. 이는메시지를보내는쪽에서 tpbroadcast() 또는 tpsendtocli(), tppost() 를통해전달한다. tpgetunsol() 호출전에전달된일방적인메시지들은무시된다. tpgetunsol() 을통하여비요청메시지를받으려면, tpstart() 를통해 Tmax 시스템에연결할때에 flags 를 TPUNSOL_POLL 이나 TPUNSOL_HND 로지정하여야한다. tpgetunsol() 이프로그램에호출되면 tpstart() 의플래그가 TPUNSOL_IGN 로설정되었다하더라도내부적으로 TPUNSOL_POLL 로전환되어서버로부터비요청메시지를받게된다. 입력값 : 1. int type a. UNSOL_TPPOST : tppost() 로비요청메시지가보내지는경우 b. UNSOL_TPBROADCAST : tpbroadcast() 로비요청메시지가보내지는경우 c. UNSOL_TPSENDTOCLI : tpsendtocli() 로비요청메시지가보내지는경우 2. int flags 출력값 a. TPBLOCK : 메시지가올때가지기다린다. b. TPNOTIME : 메시지가없으면바로리턴한다. 1. char **data : 수신받은데이터 43

45 2. long *len : 수신받은데이터의길이 리턴값 1. 1 : 정상인경우 2. 1 : 에러인경우 예제 #include <stdio.h> #include <usrinc/atmi.h> #include <usrinc/ucs.h> main(int argc, char *argv[]) char *sndbuf; char *rcvbuf; long rcvlen; int RecvCnt = 0; if(tpstart((tpstart_t *)NULL) == -1) printf("tpstart failed[%s]\n",tpstrerror(tperrno)); exit(-1); tpsetunsol_flag(tpunsol_poll); if((sndbuf = (char *)tpalloc("carray", NULL, 1024)) == NULL) printf("sndbuf failed\n"); tpend(); exit(-1); if((rcvbuf = (char *)tpalloc("carray", NULL, 1024)) == NULL) printf("rcvbuf failed\n"); 44

46 tpfree((char *)sndbuf); tpend(); exit(-1); if(tpcall("login", sndbuf, 1024, &rcvbuf, &rcvlen, 0) == -1) printf("can't send request to service LOGIN\n"); tpfree((char *)sndbuf); tpfree((char *)rcvbuf); tpend(); exit(1); rcvbuf); printf("after tpcall() received Message from server:%s\n", while(1) tpgetunsol(unsol_tpsendtocli, &rcvbuf, &rcvlen, TPBLOCK); printf("loop Count : %d\n", RecvCnt); if(rcvlen > 0) printf("counter : %d #[Received Data from Server : %s]\n ", RecvCnt, rcvbuf); RecvCnt ++; RDP Server Program 구성 RDP Server Program 은기본적으로 UCS Program 에서와같이 usermain() 을통하여 application logic 을구현한다. RDP Server Program 은다음과같은모듈과라이브러리로구성된다. 45

47 $(TMAXDIR)/lib/libsvrrs. so 1. Program 의 main() 과각종 RDP 관련 api 등을가지고있는라이브러리 2. RDP Program compile 시항상 link 를해야한다. int tpsvrinit(int argc, char *argv[]) 1. 프로그램기동시한번수행된다. 대부분 Global 변수초기화나, non-xa 경우데이터베이스연결등이이곳에서구현된다. int tpsvrdone() 1. 프로그램종료시한번수행된다. 대부분사용 resource 반환이나 non-xa 경우데이터베이스연결해제등이이곳에서구현된다. int usermain(int argc, char *argv[]) 1. 실제 application 의 logic 이구현되는부분 2. 대부분무한 loop 형태로구현된다. (usermain() 모듈에서 return 되면, tpsvrdone() 을수행하고프로세스가종료되는형태이기때문이다.) 3. UCS Server Program 과는달리 RDP Server Program 에서는 tpschedule() 이필요하지않다 RDP Client Program 은 UCS Client Program 과같다. tpsetunsol_flag(), tpsetunsol(), tpgetunsol() 등의 API 를사용하여비요청메시지를받을수있도록프로그램을구현한다. 더자세한사항은 UCS Client Program 구성을참조하기바란다. 46

48 3 UCS 의환경 3.1 UCS 환경파일설정 환경파일의 SERVER 절에 SVGNAME 설정후 SVRTYPE 으로 UCS 를지정해주면된다. 다음은 UCS 환경파일을예로든것이다. *DOMAIN tmax1 SHMKEY =79970, MINCLH=1, MAXCLH=3, TPORTNO=8844, BLOCKTIME=120, RACPORT=3443 *NODE tmaxs1 MAXDIR = "/user1/jaya/tmax3511", APDIR = "/user1/jaya/tmax3511/appbin", PATHDIR = "/user1/jaya/tmax3511/path", TLOGDIR = "/user1/jaya/tmax3511/log/tlog", ULOGDIR = "/user1/jaya/tmax3511/log/ulog", SLOGDIR = "/user1/jaya/tmax3511/log/slog" tmaxs2 TMAXDIR = "/user/jaya/tmax3511", APPDIR = "/user/jaya/tmax3511/appbin", PATHDIR = "/user/jaya/tmax3511/path", TLOGDIR = "/user/jaya/tmax3511/log/tlog", ULOGDIR = "/user/jaya/tmax3511/log/ulog", SLOGDIR = "/user/jaya/tmax3511/log/slog" *SVRGROUP svg1 NODENAME = "tmaxs1" svg2 NODENAME = "tmaxs2" *SERVER ucssvr1 SVGNAME = svg1, SVRTYPE = UCS, CPC = 5 # UCS 와 CLH 간의채널수 ucssvr2 SVGNAME = svg2, 47

49 *SERVICE SVC1 SVRTYPE = UCS SVRNAME = ucssvr1 3.2 RDP 환경파일설정 RDP 를위한환경파일을만들기위해서는우선 DOMAIN 절의 MINCLH 의개수와 MAXCLH 개수를같게맞춰야한다. 그리고 NODE 절에 REALSVR 항목에 Real Server 명을써주어야한다. 그리고 rscpc 항목을설정해주어야한다. Real Server 는한노드에유일하며노드내의다른서버프로세스들도 Real Server 로데이터를전송후 Real Server 에서데이터를클라이언트로보내게된다. 각서버프로세스로부터서비스결과값은 Real Server 로보내지게되는데여기서쓰이는 Channel 수를 rscpc 에서설정해주어야한다. SERVER 절에서는 MIN 과 MAX 의개수를 DOMAIN 절의 MINCLH 와 MAXCLH 의개수보다많게설정해준다 ( 보통 2 배로설정한다 ). 그리고 SVRTYPE=REALSVR 라설정한다. *DOMAIN tmax1 *NODE tmaxi1 *SVRGROUP svg1 svg2 *SERVER deal real *SERVICE IN SHMKEY =70990, MINCLH=2, MAXCLH=2 TMAXDIR = "/home/navis/tmax", APPDIR = "/home/navis/tmax/appbin", PATHDIR = "/home/navis/tmax/path", TLOGDIR = "/home/navis/tmax/log/tlog", ULOGDIR = "/home/navis/tmax/log/ulog", SLOGDIR = "/home/navis/tmax/log/slog", REALSVR = real", rscpc = 16 NODENAME = "tmaxi1" NODENAME = "tmaxi1" SVGNAME = svg2, MIN=1 SVGNAME = svg1, MIN=1, MAX=1, SVRTYPE = REALSVR SVRNAME = deal 48

50 OUT SVRNAME = deal 3.3 UCS 컴파일방법 UCS Server Program 은컴파일시 UCS Library(libsvrucs.a 혹은 libsvrucs.so) 와링크되어야한다. 프로그램안에서도 $TMAXDIR/usrinc/ucs.h 가 include 되어야하고, Makefile 안에 TMAXLIBS 에반드시 -lsvrucs 를포함이용하여야한다. 다음은 UCS Server Program 을컴파일하기위한 Makefile 의예이다.( 예문의 OS 는 32bit Solaris 이며, OS 에따라 Makefile 내용은다를수있음 ) # Server makefile TARGET = $(COMP_TARGET) APOBJS = $(TARGET).o SDLFILE = demo.s #Solaris 의경우 LIBS = -lsvrucs -lsocket lnsl -nodb # 다른 OS 일경우 #LIBS = -lsvrucs -nodb OBJS = $(APOBJS) $(SDLOBJ) $(SVCTOBJ) SDLOBJ = $SDLFILE:.s=_sdl.o SDLC = $SDLFILE:.s=_sdl.c SVCTOBJ = $(TARGET)_svctab.o CFLAGS = -O -I$(TMAXDIR) APPDIR = $(TMAXDIR)/appbin SVCTDIR = $(TMAXDIR)/svct LIBDIR = $(TMAXDIR)/lib #.SUFFIXES :.c.c.o: $(CC) $(CFLAGS) -c $< # # server compile # 49

51 $(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 $(SDLOBJ): $(TMAXDIR)/bin/sdlc -i../sdl/$(sdlfile) $(CC) $(CFLAGS) -c../sdl/$(sdlc) # clean: -rm -f *.o core $(TARGET) 3.4 RDP 컴파일방법 RDP Server Program 은컴파일시 RDP Library(libsvrrs.so) 와링크되어야한다. 프로그램안에도 $TMAXDIR/usrinc/ucs.h 가 include 되어야하고, Makefile 안에 TMAXLIBS 에반드시 lsvrrs 와 lpthread 를포함이용하여야한다. 다음은 RDP Server ProgramUCS 을컴파일하기위한 Makefile 의예이다.( 예문의 OS 는 32bit Solaris 이며, OS 에따라 Makefile 내용은다를수있음 ) # Server makefile TARGET = $(COMP_TARGET) APOBJS = $(TARGET).o SDLFILE = demo.s #Solaris 의경우 LIBS = -lsvrrs -lpthread -lnodb -lsocket -lnsl OBJS = $(APOBJS) $(SDLOBJ) $(SVCTOBJ) SDLOBJ = $SDLFILE:.s=_sdl.o SDLC = $SDLFILE:.s=_sdl.c 50

52 SVCTOBJ = $(TARGET)_svctab.o CFLAGS = -O -I$(TMAXDIR) APPDIR = $(TMAXDIR)/appbin SVCTDIR = $(TMAXDIR)/svct LIBDIR = $(TMAXDIR)/lib #.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 $(SDLOBJ): $(TMAXDIR)/bin/sdlc -i../sdl/$(sdlfile) $(CC) $(CFLAGS) -c../sdl/$(sdlc) # clean: -rm -f *.o core $(TARGET) 51

53 4 UCS 사용 UCS 는업무특성에따라다양하게프로그램화하여사용한다. 다음예들은실제사이트에서 UCS 가사용될때다양한방법으로프로그램화될수있다는것을보여준다. 4.1 비정상종료프로그램 (core) 발생시관리하는프로그램 ucs_svr1.c 프로그램은비정상종료프로그램 (core) 발생시해당 core file 를특정 directory 에 move 시키고이를연결된클라이언트에게비정상종료프로그램의정보를전달하는예제이다. #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <time.h> #include <sys/time.h> #include <sys/types.h> #include <dirent.h> #include <fcntl.h> #include <usrinc/atmi.h> char _file_path[100]; int _cliid[10]; int tpsvrint(int argc, char *argv[]) return 0; int tpsvrdone() 52

54 return 0; int usermain(int argc, char *argv[]) int iret, i; char core_file[50]; char server_name[50]; char cur_time[20]; char *str; /* init cliid */ for (i=0; i<10; i++) _cliid[i] = -1; strcpy(_file_path, argv[1]); sprintf(core_file, "%s/core", _file_path); while(1) tpschedule(5); iret = checkcorefile(); if (iret == 1) iret = getcorename(core_file, server_name); iret = getcurrenttime(cur_time); iret = movecorefile(core_file, server_name, cur_time); str = (char *)tpalloc("string", NULL, 0); sprintf(str, "%s program core!!", server_name); for (i=0; i<10; i++) if (_cliid[i] < 0) continue; iret = tpsendtocli(_cliid[i], str, strlen(str), 0); if (iret == -1) printf("client close connect!!\n"); _cliid[i] = -1; for (i=0; i<10; i++) printf("cliid = %d - %d\n", i, _cliid[i]); tpfree(str); 53

55 int checkcorefile() char server_name[50]; char core_file[100]; struct dirent *dirent; DIR *dp; dp = opendir(_file_path); if (dp == NULL) printf("%s directory is not found!\n", _file_path); return -1; for (dirent = readdir(dp); dirent!= NULL; dirent = readdir(dp)) if ( (strlen(dirent->d_name) == 4) && (strncmp(dirent->d_name, "core", 4) == 0)) closedir(dp); return 1; closedir(dp); return -1; int getcorename(char *filename, char *server) int fd, cnt, i; char buf[6000]; fd = open(filename, O_RDONLY); #ifdef _HP cnt = read(fd, buf, 144); #endif #ifdef _SUN cnt = read(fd, buf, 132); #endif 54

56 #ifdef _IBM cnt = read(fd, buf, 1759); #endif cnt = read(fd, buf, 1760); while(1) cnt = read(fd, buf, 1); if (cnt!= 1) return -1; *server++ = buf[0]; if (buf[0] == 0) break; close(fd); int getcurrenttime(char *cur_time) struct tm *tm; time_t tnow; time(&tnow); tm = localtime(&tnow); sprintf(cur_time, "%04d%02d%02d%02d%02d%02d", tm->tm_year+1900, tm->tm_mon+1, tm->tm_mday, tm->tm_hour, tm->tm_min, tm->tm_sec); return 0; int movecorefile(char *core, char *server, char *time) char cmd[100]; char file_name[50]; printf("server = [%s]\n", server); sprintf(file_name, "core_%s_%s", server, time); sprintf(cmd, "mv %s %s/%s", core, _file_path, file_name); system(cmd); return 0; CONN_TERM(TPSVCINFO *msg) 55

57 int i; char *stdata; stdata = (char *)msg->data; for (i=0; i<10; i++) if (_cliid[i] >= 0) continue; _cliid[i] = tpgetclid(); printf("connect client %d = %d\n", i, _cliid[i]); break; tpreturn(tpsuccess, 0, (char *)stdata, 0, 0); 4.2 socket 을이용한비동기통신 ucs_svr2.c 프로그램은 client 에서들어오는 socket 을 accept 하고, accept 한 socket 에서들어오는요청을 tpacall 한후에그결과를다시 client 에전송하는예제이다. 다음은 ucs_svr2.c 의 usermain() 부분이다. #include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include <fcntl.h> #include <errno.h> #include <signal.h> #include <sys/types.h> #include <sys/time.h> #include <sys/socket.h> #include <sys/un.h> #include <netinet/in.h> #include <arpa/inet.h> #include <netdb.h> #include <usrinc/atmi.h> #include <usrinc/ucs.h> 56

58 #ifndef INADDR_NONE #define INADDR_NONE #endif 0xffffffff #define CLIENT_PORT 9345 #define HOST_ADDR " " #define MAX_BUFFER_LEN 4096 /* global variable */ int client_fd = -1; char ip_addr[30]; int portno; extern int _cur_clhfd; /* service initial */ tpsvrinit(int argc, char *argv[]) sleep(5); parse_args(argc, argv); client_fd = network_connect(ip_addr, portno); if (client_fd > 0) tpsetfd(client_fd); printf("ucs_sample:client_fd = %d\n", client_fd); printf("ucs_sample: _cur_clhfd(1) = %d\n", _cur_clhfd); tpsvrdone() if (client_fd > 0) tpclrfd(client_fd); 57

59 close(client_fd); /* main */ int usermain(int argc, char *argv[]) int n; /* never return */ while(1) if (client_fd < 0) client_fd = network_connect(ip_addr, portno); if (client_fd > 0) tpsetfd(client_fd); else tpschedule(5); continue; printf("ucs_sample:client_fd = %d\n", client_fd); printf("ucs_sample: _cur_clhfd(1) = %d\n", _cur_clhfd); if ((n = tpschedule(0)) < 0) sleep(1); continue; printf("ucs_sample: _cur_clhfd(2) = %d\n", _cur_clhfd); if (tpissetfd(client_fd)) if ((n = request_from_client(client_fd)) < 0) tpclrfd(client_fd); close(client_fd); client_fd = -1; 58

60 /* command argument */ int parse_args(int argc, char *argv[]) int c; portno = -1; memset(ip_addr, 0x00, sizeof(ip_addr)); opterr = 0; /* don't want getopt() writing to stderr */ while ((c = getopt(argc, argv, "i:p:"))!= EOF) switch (c) case 'p': /* port */ portno = atoi(optarg); break; case 'i': /* ip-addr */ strcpy(ip_addr, optarg); break; case '?': printf("unrecognized option: -%c", optopt); /* default value: portno, shared memory key */ if (portno <= 0) portno = CLIENT_PORT; printf("no PORT is set: assumed %d\n", portno); if (ip_addr[0] == 0x00) strcpy(ip_addr, HOST_ADDR); 59

61 printf("no IP-ADDR is set: assumed %s\n", ip_addr); return 1; /* client request */ int request_from_client(int fd) int n, len; char *ptr, buffer[max_buffer_len]; /* read header */ memset(buffer, 0x00, sizeof(buffer)); n = socket_read(fd, buffer, 4); if (n <= 0) return -1; len = atoi(buffer); printf("ucs_sample:length : %d\n", len); /* read data */ n = socket_read(fd, &buffer[4], len); if (n <= 0) return -1; sleep(3); len += 4; n = socket_write(fd, buffer, len); printf("ucs_sample:socket write : n=%d\n", n); return n; 60

62 /* client connect for TCP/IP */ int network_connect(char *host, int port) struct sockaddr_in serv_addr; unsigned long inaddr; struct hostent *hp; int i, fd; memset((char *) &serv_addr, 0, sizeof(serv_addr)); serv_addr.sin_family = AF_INET; serv_addr.sin_port = htons(port); /* First try to convert the host name as a dotted-decimal number. * Only if that fails do we call gethostbyname(). */ if ((inaddr = inet_addr(host))!= INADDR_NONE) /* it's dotted-decimal */ memcpy((char *) &serv_addr.sin_addr, (char *) &inaddr, sizeof(inaddr)); else if ((hp = gethostbyname(host)) == NULL) printf("host name error: %s\n", host); return(-1); memcpy((char *) &serv_addr.sin_addr, hp->h_addr, hp->h_length); if ((fd = socket(af_inet, SOCK_STREAM, 0)) < 0) printf("can't open stream socket\n"); return -1; if (connect(fd, (struct sockaddr *) &serv_addr, sizeof(serv_addr)) >= 0) return fd; 61

63 close(fd); return -1; /* data read */ int socket_read(int fd, char *ptr, int nbytes) int nleft, nread; char *ptr2; ptr2 = (char *)ptr; nleft = nbytes; while (nleft > 0) nread = recv(fd, ptr, nleft, 0); if (nread < 0) if (errno == EINTR) continue; else if (errno == EWOULDBLOCK) return (nbytes - nleft); return(nread); /* error, return < 0 */ else if (nread == 0) break; /* EOF */ nleft -= nread; ptr += nread; return (nbytes - nleft); /* return >= 0 */ /* data write */ 62

64 int socket_write(int fd, char *ptr, int nbytes) int nleft, nwritten; nleft = nbytes; while (nleft > 0) nwritten = send(fd, ptr, nleft, 0); if (nwritten <= 0) return(nwritten); /* error */ nleft -= nwritten; ptr += nwritten; return(nbytes - nleft); 4.3 RQ 를사용한프로그램 ucs_svr3.c 프로그램은 fail queue 에쌓인 data 를 dequeue 하여다시 call 하는프로그램예제이다. #include <sys/types.h> /* required for some of our prototypes */ #include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include <fcntl.h> #include #include #include #include #include <sys/socket.h> <sys/stat.h> <sys/un.h> <netinet/in.h> <arpa/inet.h> 63

65 #include #include <usrinc/atmi.h> <usrinc/tmaxapi.h> #define MAX_BUF_SZ #define SZ 100 #define QUEFILE "rq1" #define QUESERVICE "+fail" int usermain(int argc, char*argv[]) char svc[xatmi_service_name_length]; long len, n; int try, ifailcnt; char *ptr; char QueFile[SZ]; char QueService[SZ]; strcpy(quefile, QUEFILE); strcpy(queservice, QUESERVICE); ptr = (char *)tpalloc("carray", NULL, MAX_BUF_SZ); while (1) /* Endless Loop */ tpschedule(10); /* Sleep 10 seconds */ n = 0; try = 0; ifailcnt = tpqstat(quefile, TMAX_FAIL_QUEUE); #ifdef _DEBUG printf("\ntpqstat FailCount value = [%d]\n", ifailcnt); #endif #ifdef _DEBUG while( (n >= 0) && (try++ < ifailcnt ) ) n = tpdeq(quefile, QueService, &ptr, &len, TPRQS ); 64

66 printf("tpdeq n value = [%s] \n", tpstrerror(n)); #endif if (n < 0 ) if (tperrno == TPEMATCH) /* Fail Q empty */ ; else printf("tpdeq fail[%s]\n", tpstrerror(tperrno)); continue; n = tpextsvcname((char*)ptr, svc); #ifdef _DEBUG printf("tpextsvcname value = [%s]\n", svc); #endif if (n < 0) printf("tpextsvcname fail![%s]\n", tpstrerror(tperrno)); continue; n = tpenq(quefile, svc, (char*)ptr, len, TPRQS); #ifdef _DEBUG printf("tpenq n value = [%d]\n", n); #endif if (n < 0) printf("tpenq fail![%s]\n", tpstrerror(tperrno)); continue; return 1; 65

67 5 부록 5.1 UCS 사례 UCS 가실제사이트에서사용되고있는사례이다. 다음은어떤업무에어떤목적으로 UCS 가사용되고있는지실사례를들어놓은것이다. 온라인티켓업무 1. RQ 에들어온요청을네트웍장애시메인 Tmax 서버로재전송을하기위한목적 POS 업무 1. RQ 에들어온요청을 DB 서버로재전송을하기위한목적 식음료서비스업무 1. 그룹차원에적용된 FireWall 에서일정시간이지난후클라이언트를 Disconnect 하기때문에, Applet 으로접속한클라이언트의 Connect 를유지시키기위해 Tmax 서버에서일정시간단위로 LOGIN 된클라이언트에게 Heart Bit 데이터를보내어 Session 을유지하기위한목적. HTS ( 사이버트레이딩업무 ) 1. 데이터베이스의정보를클라이언트들에게실시간으로전송하기위한목적. ARS 장비에서요구하는 request 를 socket 으로받아서 Tmax call 로변환하는업무 66

68 1. ARS 장비와 TCP/IP 로통신, ARS 에서전송한 Message 를 Tmax Server 에전달하고그결과를다시 ARS 에전송하기위한목적 2. 외부 Server 와 TCP/IP 통신, RQ 관련서버프로그램에 UCS 적용. 5.2 UCS 예제프로그램 간단한 UCS 예제프로그램 다음예는간단한 UCS 예제프로그램이다. 서버프로그램에서는 Loop 를수행하다가클라이언트에서 LOGIN 서비스를요청하면 UCS 가응답을보내준다. <<Config File>> *DOMAIN tmax1 *NODE tmaxs2 *SVRGROUP tmaxs2_nx *SERVER ucs_server *SERVICE LOGIN SHMKEY =79970, MINCLH=1, MAXCLH=3, TPORTNO=8844, BLOCKTIME=120 TMAXDIR = "/user/jaya/tmax3511", APPDIR = "/user/jaya/tmax3511/appbin", PATHDIR = "/user/jaya/tmax3511/path", TLOGDIR = "/user/jaya/tmax3511/log/tlog", ULOGDIR = "/user/jaya/tmax3511/log/ulog", SLOGDIR = "/user/jaya/tmax3511/log/slog" NODENAME = "tmaxs2" SVGNAME = tmaxs2_nx, SVRTYPE = UCS SVRNAME = ucs_server 67

69 Client Program Client Program 은실행을시키면 tpstart() 를하고 LOGIN 이라는서비스를 tpcall() 하여, UCS 프로세스에서비스를요청하게된다. Client Program 에설정된 tpsetunsol_flag(tpunsol_poll); 은서버프로세스에서보내는메시지를받겠다는뜻이다. Client Program 은서버프로세스에서 sndbuf 에담아보낸 "Client Registration Success" 라는메시지를 rcvbuf 에서받아출력한다. printf("after tpcall() received Message from server:%s\n", rcvbuf); Client 에서의요청이있으면서버프로세스의 loop count 가증가하고, count 가증가하면서서버프로세스의 for loop 에서 sndbuf 에담아보낸 Success tpsendtocli [0] 메시지가마찬가지로 Client 에서도 while loop 에서 Loop count 가증가하면서출력이된다. while(1) tpgetunsol(unsol_tpsendtocli, &rcvbuf, &rcvlen, TPBLOCK); printf("loop Count : %d\n", RecvCnt); if(rcvlen > 0) printf("counter : %d #[Received Data from Server : %s]\n ", RecvCnt, rcvbuf); RecvCnt ++; 다음은클라이언트프로그램의예문이다. <<Client Program>> #include <stdio.h> #include <usrinc/atmi.h> #include <usrinc/ucs.h> main(int argc, char *argv[]) 68

70 char *sndbuf; char *rcvbuf; long rcvlen; int RecvCnt = 0; if(tpstart((tpstart_t *)NULL) == -1) error processing tpsetunsol_flag(tpunsol_poll); if((sndbuf = (char *)tpalloc("carray", NULL, 1024)) == NULL) error processing if((rcvbuf = (char *)tpalloc("carray", NULL, 1024)) == NULL) error processing if(tpcall("login", sndbuf, 1024, &rcvbuf, &rcvlen, 0) == -1) error processing rcvbuf); printf("after tpcall() received Message from server:%s\n", while(1) tpgetunsol(unsol_tpsendtocli, &rcvbuf, &rcvlen, TPBLOCK); printf("loop Count : %d\n", RecvCnt); if(rcvlen > 0) 69

71 printf("counter : %d #[Received Data from Server : %s]\n ", RecvCnt, rcvbuf); RecvCnt ++; if (RecvCnt == 10) break; tpfree((char *)sndbuf); tpfree((char *)rcvbuf); tpend(); 클라이언트프로그램예문의결과는다음과같다. tmaxs2:/user/jaya/tmax3511/sample/client> ucs_client After tpcall() received Message from server:client Registration Success Loop Count : 0 Counter : 0 #[Received Data from Server : Success tpsendtocli [0]] Loop Count : 1 Counter : 1 #[Received Data from Server : Success tpsendtocli [1]] Loop Count : 2 Counter : 2 #[Received Data from Server : Success tpsendtocli [2]] Loop Count : 3 Counter : 3 #[Received Data from Server : Success tpsendtocli [3]] Loop Count : 4 Counter : 4 #[Received Data from Server : Success tpsendtocli [4]] Server Program Server Program 은 Tmax 가기동되고나서부터 5 초를 sleep 하고클라이언트에서요청이있을때까지 loop execute 0 을출력하며계속무한 loop 를하게된다. sleep(5); printf ("loop execute... %d\n", count); 70

72 무한 loop 를하다가 while loop 의마지막줄에있는 jobs = tpschedule(-1); 부분에서클라이언트에서보낸요청이있는지확인하고, 요청이없으면다시 loop 하지만요청이있을시에는그요청을받아들이게된다. 이때, client_id[num_cli] = tpgetclid(); printf("client id(clid) = %d\n", client_id[num_cli]); num_cli++; 저장된클라이언트의 id 값을가지고 while loop 의 for loop 에서는 count 수가증가하고그증가되는값을 sndbuf 에담아 tpsendtocli() 함수를사용하여클라이언트에게서비스를수행해준다. for (i = 0; i < num_cli; i++) sprintf(sndbuf, "Success tpsendtocli [%d]", count++); /* Client id 를참조하여고객에게데이타를보내는부분 */ tpsendtocli (client_id[i], sndbuf, 1024, 0); 그리고 sndbuf 에클라이언트가등록되었다는메시지를담아 tpreturn() 해준다. sprintf(sndbuf, "Client Registration Success"); tpreturn(tpsuccess, 0, (char *)sndbuf, 1000, 0); 다음은서버프로그램예문이다. <<Server Program>> #include <stdio.h> #include <usrinc/atmi.h> #include <usrinc/ucs.h> #define MAX_CLI 100 int num_cli; int client_id[max_cli]; int count; 71

73 tpsvrinit(int argc, char *argv[]) num_cli = 0; count = 0; printf("ucs Type Server tpsvrinit() is call\n"); /* tmax 의 ucs 모드에서 main 과같은부분 */ int usermain(int argc, char *argv[]) int jobs; int i; int ret; char *sndbuf; static int count = 0; printf("usermain start\n"); sndbuf = (char *)tpalloc("carray", NULL, 1024); while(1) sleep(5); printf ("loop execute... %d\n", count); for (i = 0; i < num_cli; i++) sprintf(sndbuf, "Success tpsendtocli [%d]", count++); /* Client id 를참조하여고객에게데이타를보내는부분 */ tpsendtocli (client_id[i], sndbuf, 1024, 0); jobs = tpschedule(-1); /* while 마지막에반드시있어야함 */ 72

74 LOGIN(TPSVCINFO *msg) char *sndbuf; int clid; int ret; int i; sndbuf = (char *)tpalloc("carray", NULL, 1024); if (num_cli < MAX_CLI) /* Client 의 id 값을보관하는부분 */ client_id[num_cli] = tpgetclid(); printf("client id(clid) = %d\n", client_id[num_cli]); num_cli++; sprintf(sndbuf, "Client Registration Success"); tpreturn(tpsuccess, 0, (char *)sndbuf, 1000, 0); tpsvrdone() 서버프로그램예문의결과는다음과같다. usermain start UCS Type Server tpsvrinit() is call usermain start loop execute... 0 loop execute... 0 loop execute... 0 client id(clid) = loop execute... 0 loop execute... 1 loop execute... 2 loop execute... 3 loop execute

75 loop execute... 5 loop execute... 6 loop execute... 7 loop execute... 8 loop execute... 9 loop execute loop execute loop execute loop execute loop execute client id(clid) = loop execute loop execute loop execute 서버대서버 UCS 프로그램 다음예문은 3 개의서버프로세스를이용하여하나의프로세스는 UCS 로서계속 Loop 하고, 다른하나는데이터베이스에서데이터를 select 하여또다른프로세스를 call 하여다른테이블에 insert 하는예제프로그램이다. 먼저 ucssvr.c 는 UCS 프로세스로서 mainsvr.pc 에있는 MAIN 이라는서비스를계속 tpcall 하는프로그램이다. UCS 프로세스로부터 tpcall 을받은 mainsvr.pc 는데이터베이스에있는 test_sel 이라는테이블에서첫번째데이터부터 select 하여 inssvr.pc 에있는 INS 라는서비스를 tpcall 한다. tpcall 을받은 inssvr.pc 는 test_ins 라는테이블에 test_sel 테이블에서 select 해온데이터를 insert 한다. 이과정이이루어지면 mainsvr.pc 는 tx_commit() 을하고 test_sel 테이블에서 inssvr.pc 에게넘겨준데이터를 delete 한다. test_sel 테이블에 6 개의데이터가있기때문에이런과정을 6 번 반복한다. 그리고나서는 delete 할데이터가없기때문에 1403 에러가난다. 74

76 <<Config File>> *DOMAIN tmax1 SHMKEY =79970, MINCLH=1, MAXCLH=3, TPORTNO=8844, BLOCKTIME=120 *NODE tmaxs2 TMAXDIR = "/user/jaya/tmax3511", APPDIR = "/user/jaya/tmax3511/appbin", PATHDIR = "/user/jaya/tmax3511/path", TLOGDIR = "/user/jaya/tmax3511/log/tlog", ULOGDIR = "/user/jaya/tmax3511/log/ulog", SLOGDIR = "/user/jaya/tmax3511/log/slog" *SVRGROUP tmaxs2_nx NODENAME = "tmaxs2" ### tms for Oracle ### tmaxs2_xa NODENAME = "tmaxs2", DBNAME = ORACLE, OPENINFO = "Oracle_XA+Acc=P/scott/tiger+SesTm=60", TMSNAME = tms_ora *SERVER ucssvr SVGNAME = tmaxs2_nx, SVRTYPE = UCS, MIN = 1 mainsvr SVGNAME = tmaxs2_xa, MIN = 1 inssvr SVGNAME = tmaxs2_xa, MIN = 1 *SERVICE MAIN SVRNAME = mainsvr INS SVRNAME = ins 75

Tmax Programming Guide ( UCS ) Tmax 38 Tmax Programming Guide (UCS)

Tmax Programming Guide ( UCS ) Tmax 38 Tmax Programming Guide (UCS) Tmax Programming Guide ( UCS ) : TMUCS-0219-03-380 : Tmax 38 : FEB 19, 2003 : SEP 20, 2003 Tmax Programming Guide ( UCS ) Tmax 38 Tmax Programming Guide (UCS) Copyright (c) 2001 Tmax Soft Co, Ltd All Rights

More information

PowerPoint 프레젠테이션

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

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

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장 Unix란 무엇인가?

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

More information

2009년 상반기 사업계획

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

More information

À©µµ³×Æ®¿÷ÇÁ·Î±×·¡¹Ö4Àå_ÃÖÁ¾

À©µµ³×Æ®¿÷ÇÁ·Î±×·¡¹Ö4Àå_ÃÖÁ¾ P a 02 r t Chapter 4 TCP Chapter 5 Chapter 6 UDP Chapter 7 Chapter 8 GUI C h a p t e r 04 TCP 1 3 1 2 3 TCP TCP TCP [ 4 2] listen connect send accept recv send recv [ 4 1] PC Internet Explorer HTTP HTTP

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

untitled

untitled Step Motor Device Driver Embedded System Lab. II Step Motor Step Motor Step Motor source Embedded System Lab. II 2 open loop, : : Pulse, 1 Pulse,, -, 1 +5%, step Step Motor (2),, Embedded System Lab. II

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

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

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

임베디드시스템설계강의자료 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

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

More information

제1장 Unix란 무엇인가?

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

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

제1장 Unix란 무엇인가?

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

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

목차 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

<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

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 7-Segment Device Control - Device driver Jo, Heeseung HBE-SM5-S4210 의 M3 Module 에는 6 자리를가지는 7-Segment 모듈이아래그림처럼실장 6 Digit 7-Segment 2 6-Digit 7-Segment LED Controller 16비트로구성된 2개의레지스터에의해제어 SEG_Sel_Reg(Segment

More information

K&R2 Reference Manual 번역본

K&R2 Reference Manual 번역본 typewriter structunion struct union if-else if if else if if else if if if if else else ; auto register static extern typedef void char short int long float double signed unsigned const volatile { } struct

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

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 7-Segment Device Control - Device driver Jo, Heeseung HBE-SM5-S4210 의 M3 Module 에는 6 자리를가지는 7-Segment 모듈이아래그림처럼실장 6 Digit 7-Segment 2 6-Digit 7-Segment LED controller 16비트로구성된 2개의레지스터에의해제어 SEG_Sel_Reg(Segment

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

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

More information

SYN flooding

SYN flooding Hacking & Security Frontier SecurityFirst SYN flooding - SYN flooding 공격의원리와코드그리고대응 by amur, myusgun, leemeca 2008. 09. myusgun Agenda 개요...3 원리...3 위협...4 잠깐! - 문서에관하여...4 이문서는...4 Code...4 대응방안...4 소스코드...5

More information

1장. 유닉스 시스템 프로그래밍 개요

1장.  유닉스 시스템 프로그래밍 개요 9 장. 파이프 Unix 프로그래밍및실습 1 강의내용 1 절개요 2 절이름없는파이프 3 절이름있는파이프 http://lily.mmu.ac.kr/lecture/13u2/ch09.pdf 책에나온내용반드시 man 으로확인할것! UNIX, LINUX 등시스템마다차이가있을수있음을반드시인식 2 기본실습 #1 [ 예제 9-1] ~ [ 예제 9-7] ( 각 10점 ) 과제개요

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 7-SEGMENT DEVICE CONTROL - DEVICE DRIVER Jo, Heeseung 디바이스드라이버구현 : 7-SEGMENT HBE-SM5-S4210 의 M3 Module 에는 6 자리를가지는 7-Segment 모듈이아래그림처럼실장 6 Digit 7-Segment 2 디바이스드라이버구현 : 7-SEGMENT 6-Digit 7-Segment LED

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

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

<C0CCBCBCBFB52DC1A4B4EBBFF82DBCAEBBE7B3EDB9AE2D313939392D382E687770>

<C0CCBCBCBFB52DC1A4B4EBBFF82DBCAEBBE7B3EDB9AE2D313939392D382E687770> i ii iii iv v vi 1 2 3 4 가상대학 시스템의 국내외 현황 조사 가상대학 플랫폼 개발 이상적인 가상대학시스템의 미래상 제안 5 웹-기반 가상대학 시스템 전통적인 교수 방법 시간/공간 제약을 극복한 학습동기 부여 교수의 일방적인 내용전달 교수와 학생간의 상호작용 동료 학생들 간의 상호작용 가상대학 운영 공지사항,강의록 자료실, 메모 질의응답,

More information

<43B7CE20BECBBEC6BAB8B4C220BCD2C4CFC7C1B7CEB1D7B7A1B9D62E687770>

<43B7CE20BECBBEC6BAB8B4C220BCD2C4CFC7C1B7CEB1D7B7A1B9D62E687770> C 로알아보는 소켓프로그래밍 이현환 (NOON) haonun@gmail.com http://noon.tistory.com Hacking Study Grup E.Y.E -------------------------------------------------------------------- 목차 --------------------------------------------------------------------

More information

11장 포인터

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

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 Sensor Device Jo, Heeseung Sensor 실습 HBE-SM5-S4210 에는근접 / 가속도 / 컴파스센서가장착 각센서들을사용하기위한디바이스드라이버와어플리케이션을작성 2 근접 (Proximity) 센서 HBE-SM5-S4210 Camera Module 근접센서디바이스 근접센서는사물이다른사물에접촉되기이전에가까이접근하였는지를검출할목적으로사용 일반적으로생활에서자동문이나엘리베이터,

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

Microsoft PowerPoint - 09-Pipe

Microsoft PowerPoint - 09-Pipe 9. 파이프 상명대학교소프트웨어학부 파이프 시그널은이상한사건이나오류를처리하는데는이용하지만, 한프로세스로부터다른프로세스로대량의정보를전송하는데는부적합하다. 파이프 한프로세스를다른관련된프로세스에연결시켜주는단방향의통신채널 2 pipe() Usage #include int pipe(int filedes[2]); 3 < ex_1.c > #include

More information

Microsoft Word - KPMC-400,401 SW 사용 설명서

Microsoft Word - KPMC-400,401 SW 사용 설명서 LKP Ethernet Card SW 사용설명서 Version Information Tornado 2.0, 2.2 알 림 여기에실린내용은제품의성능향상과신뢰도의증대를위하여예고없이변경될수도있습니다. 여기에실린내용의일부라도엘케이일레븐의사전허락없이어떠한유형의매체에복사되거나저장될수없으며전기적, 기계적, 광학적, 화학적인어떤방법으로도전송될수없습니다. 엘케이일레븐경기도성남시중원구상대원동

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 (Host) set up : Linux Backend RS-232, Ethernet, parallel(jtag) Host terminal Target terminal : monitor (Minicom) JTAG Cross compiler Boot loader Pentium Redhat 9.0 Serial port Serial cross cable Ethernet

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

Microsoft PowerPoint - lab14.pptx

Microsoft PowerPoint - lab14.pptx Mobile & Embedded System Lab. Dept. of Computer Engineering Kyung Hee Univ. Keypad Device Control in Embedded Linux HBE-SM5-S4210 에는 16 개의 Tack Switch 를사용하여 4 행 4 열의 Keypad 가장착되어있다. 2 Keypad Device Driver

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

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

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

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

[ 목차 ] 1. 취약점개요 2. 배경지식 3. 취약점발생결과 (exploit 테스트 ) 4. 취약점발생원인분석 4.1 취약점 Q&A 5. exploit 분석 6. 보안대책 7. 결론 8. 레퍼런스 2

[ 목차 ] 1. 취약점개요 2. 배경지식 3. 취약점발생결과 (exploit 테스트 ) 4. 취약점발생원인분석 4.1 취약점 Q&A 5. exploit 분석 6. 보안대책 7. 결론 8. 레퍼런스 2 CVE-2016-3857 취약점분석보고서 ( 안드로이드커널임의쓰기취약점 ) ㅁ작성자 : x90c (x90chacker@gmail.com) ㅁ작성일 : 2018 년 7 월 18 일 ( 수 ) ㅁ대외비등급 : A (Top Secret) 1 [ 목차 ] 1. 취약점개요 2. 배경지식 3. 취약점발생결과 (exploit 테스트 ) 4. 취약점발생원인분석 4.1 취약점

More information

본 강의에 들어가기 전

본 강의에 들어가기 전 C 기초특강 종합과제 과제내용 구조체를이용하여교과목이름과코드를파일로부터입력받아관리 구조체를이용하여학생들의이름, 학번과이수한교과목의코드와점수를파일로부터입력 학생개인별총점, 평균계산 교과목별이수학생수, 총점및평균을계산 결과를파일에저장하는프로그램을작성 2 Makefile OBJS = score_main.o score_input.o score_calc.o score_print.o

More information

비트와바이트 비트와바이트 비트 (Bit) : 2진수값하나 (0 또는 1) 를저장할수있는최소메모리공간 1비트 2비트 3비트... n비트 2^1 = 2개 2^2 = 4개 2^3 = 8개... 2^n 개 1 바이트는 8 비트 2 2

비트와바이트 비트와바이트 비트 (Bit) : 2진수값하나 (0 또는 1) 를저장할수있는최소메모리공간 1비트 2비트 3비트... n비트 2^1 = 2개 2^2 = 4개 2^3 = 8개... 2^n 개 1 바이트는 8 비트 2 2 비트연산자 1 1 비트와바이트 비트와바이트 비트 (Bit) : 2진수값하나 (0 또는 1) 를저장할수있는최소메모리공간 1비트 2비트 3비트... n비트 2^1 = 2개 2^2 = 4개 2^3 = 8개... 2^n 개 1 바이트는 8 비트 2 2 진수법! 2, 10, 16, 8! 2 : 0~1 ( )! 10 : 0~9 ( )! 16 : 0~9, 9 a, b,

More information

Microsoft Word - Network Programming_NewVersion_01_.docx

Microsoft Word - Network Programming_NewVersion_01_.docx 10. Unix Domain Socket 105/113 10. Unix Domain Socket 본절에서는 Unix Domain Socket(UDS) 에대한개념과이에대한실습을수행하고, 이와동시에비신뢰적인통신시스템의문제점에대해서분석하도록한다. 이번실습의목표는다음과같다. 1. Unix Domain Socket의사용법을익히고, IPC에대해서실습 2. TCP/IP의응용계층과전달계층의동작을구현및실습

More information

10.

10. 10. 10.1 10.2 Library Routine: void perror (char* str) perror( ) str Error 0 10.3 10.3 int fd; /* */ fd = open (filename, ) /*, */ if (fd = = -1) { /* */ } fcnt1 (fd, ); /* */ read (fd, ); /* */ write

More information

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

Microsoft PowerPoint - 12 ¼ÒÄÏÀ» ÀÌ¿ëÇÑ Åë½Å 1.ppt 12 장 소켓을이용한통신 (1) 함수 - inet_addr - inet_ntoa - socket - bind - listen - accept - connect - recv -send 1 서론 파이프를사용하여통신을하기위한시스템호출 / 표준라이브러리함수 함수 의미 inet_addr 문자열형태의인터넷주소를바이너리형태로변환한다. inet_ntoa 바이너리형태의인터넷주소를문자열형태로변환한다.

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

교육지원 IT시스템 선진화

교육지원 IT시스템 선진화 Module 16: ioctl 을활용한 LED 제어디바이스드라이버 ESP30076 임베디드시스템프로그래밍 (Embedded System Programming) 조윤석 전산전자공학부 주차별목표 ioctl() 을활용법배우기 커널타이머와 ioctl 을활용하여 LED 제어용디바이스드라이브작성하기 2 IOCTL 을이용한드라이버제어 ioctl() 함수활용 어떤경우에는읽는용도로만쓰고,

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

ORANGE FOR ORACLE V4.0 INSTALLATION GUIDE (Online Upgrade) ORANGE CONFIGURATION ADMIN O

ORANGE FOR ORACLE V4.0 INSTALLATION GUIDE (Online Upgrade) ORANGE CONFIGURATION ADMIN O Orange for ORACLE V4.0 Installation Guide ORANGE FOR ORACLE V4.0 INSTALLATION GUIDE...1 1....2 1.1...2 1.2...2 1.2.1...2 1.2.2 (Online Upgrade)...11 1.3 ORANGE CONFIGURATION ADMIN...12 1.3.1 Orange Configuration

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

목차 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

61 62 63 64 234 235 p r i n t f ( % 5 d :, i+1); g e t s ( s t u d e n t _ n a m e [ i ] ) ; if (student_name[i][0] == \ 0 ) i = MAX; p r i n t f (\ n :\ n ); 6 1 for (i = 0; student_name[i][0]!= \ 0&&

More information

강의10

강의10 Computer Programming gdb and awk 12 th Lecture 김현철컴퓨터공학부서울대학교 순서 C Compiler and Linker 보충 Static vs Shared Libraries ( 계속 ) gdb awk Q&A Shared vs Static Libraries ( 계속 ) Advantage of Using Libraries Reduced

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

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

untitled

untitled Push... 2 Push... 4 Push... 5 Push... 13 Push... 15 1 FORCS Co., LTD A Leader of Enterprise e-business Solution Push (Daemon ), Push Push Observer. Push., Observer. Session. Thread Thread. Observer ID.

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

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

C++-¿Ïº®Çؼ³10Àå

C++-¿Ïº®Çؼ³10Àå C C++. (preprocessor directives), C C++ C/C++... C++, C. C++ C. C C++. C,, C++, C++., C++.,.. #define #elif #else #error #if #itdef #ifndef #include #line #pragma #undef #.,.,. #include #include

More information

1217 WebTrafMon II

1217 WebTrafMon II (1/28) (2/28) (10 Mbps ) Video, Audio. (3/28) 10 ~ 15 ( : telnet, ftp ),, (4/28) UDP/TCP (5/28) centralized environment packet header information analysis network traffic data, capture presentation network

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 인터넷프로토콜 03 장 도메인네임시스템과주소 패밀리 (IPv4-IPv6 서비스 ) 1 목차 제 3 장도메인네임시스템과주소패밀리 3.1 도메인네임주소를숫자주소로매핑하기 3.2 IP 버전에무관한주소-범용코드의작성 3.3 숫자주소에서도메인네임주소획득하기 2 getaddrinfo() 를활용한주소 범용 (Generic) 코드 주소범용 (Generic) 코드란? 주소버전

More information

歯9장.PDF

歯9장.PDF 9 Hello!! C printf() scanf() getchar() putchar() gets() puts() fopen() fclose() fprintf() fscant() fgetc() fputs() fgets() gputs() fread() fwrite() fseek() ftell() I/O 2 (stream) C (text stream) : `/n'

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

이번장에서학습할내용 동적메모리란? 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

/chroot/lib/ /chroot/etc/

/chroot/lib/ /chroot/etc/ 구축 환경 VirtualBox - Fedora 15 (kernel : 2.6.40.4-5.fc15.i686.PAE) 작동 원리 chroot유저 ssh 접속 -> 접속유저의 홈디렉토리 밑.ssh의 rc 파일 실행 -> daemonstart실행 -> daemon 작동 -> 접속 유저만의 Jail 디렉토리 생성 -> 접속 유저의.bashrc 의 chroot 명령어

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

Microsoft PowerPoint - ch09_파이프 [호환 모드]

Microsoft PowerPoint - ch09_파이프 [호환 모드] 학습목표 파이프를이용한 IPC 기법을이해한다. 이름없는파이프를이용해통신프로그램을작성할수있다. 이름있는파이프를이용해통신프로그램을작성할수있다. 파이프 IT CookBook, 유닉스시스템프로그래밍 2/20 목차 파이프의개념 이름없는파이프만들기 복잡한파이프생성 양방향파이프활용 이름있는파이프만들기 파이프의개념 파이프 두프로세스간에통신할수있도록해주는특수파일 그냥파이프라고하면일반적으로이름없는파이프를의미

More information

2009년 상반기 사업계획

2009년 상반기 사업계획 파이프 IT CookBook, 유닉스시스템프로그래밍 학습목표 파이프를이용한 IPC 기법을이해한다. 이름없는파이프를이용해통신프로그램을작성할수있다. 이름있는파이프를이용해통신프로그램을작성할수있다. 2/20 목차 파이프의개념 이름없는파이프만들기 복잡한파이프생성 양방향파이프활용 이름있는파이프만들기 3/20 파이프의개념 파이프 두프로세스간에통신할수있도록해주는특수파일 그냥파이프라고하면일반적으로이름없는파이프를의미

More information

SRC PLUS 제어기 MANUAL

SRC PLUS 제어기 MANUAL ,,,, DE FIN E I N T R E A L L O C E N D SU B E N D S U B M O TIO

More information

Microsoft PowerPoint - Lecture_Note_7.ppt [Compatibility Mode]

Microsoft PowerPoint - Lecture_Note_7.ppt [Compatibility Mode] Unix Process Department of Computer Engineering Kyung Hee University. Choong Seon Hong 1 유닉스기반다중서버구현방법 클라이언트들이동시에접속할수있는서버 서비스를동시에처리할수있는서버프로세스생성을통한멀티태스킹 (Multitasking) 서버의구현 select 함수에의한멀티플렉싱 (Multiplexing)

More information

3. 다음장에나오는 sigprocmask 함수의설명을참고하여다음프로그램의출력물과그출력물이화면이표시되는시점을예측하세요. ( 힌트 : 각줄이표시되는시점은다음 6 가지중하나. (1) 프로그램수행직후, (2) 5 초후 (3) 10 초후 (4) 15 #include <signa

3. 다음장에나오는 sigprocmask 함수의설명을참고하여다음프로그램의출력물과그출력물이화면이표시되는시점을예측하세요. ( 힌트 : 각줄이표시되는시점은다음 6 가지중하나. (1) 프로그램수행직후, (2) 5 초후 (3) 10 초후 (4) 15 #include <signa 학번 : 이름 : 1. 다음가정하에서아래프로그램의출력물을예측하세요. 가정 : 부모프로세스의 process id=10100, 자식프로세스의 process id=10101. char buf[] = "a write to stdout\n"; int var; /* automatic variable on the stack */ pid_t pid; int glob = 31;

More information

ABC 11장

ABC 11장 12 장고급응용 0 수행중인프로그램 프로세스 모든프로세스는유일한프로세스식별번호 (PID) 를가짐 유닉스에서는 ps 명령을사용하여프로세스목록을볼수있음 12-1 프로세스 $ ps -aux USER PID %CPU %MEM SZ RSS TT STAT START TIME COMMAND blufox 17725 34.0 1.6 146 105 i2 R 15:13 0:00

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

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

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

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

게시판 스팸 실시간 차단 시스템 오픈 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

슬라이드 1

슬라이드 1 Computer Networks Practice Socket 1 DK Han Junghwan Song dkhan@mmlab.snu.ac.kr jhsong@mmlab.snu.ac.kr 2012-3-26 Multimedia and Mobile communications Laboratory Introduction Client / Server model Server

More information

untitled

untitled Embedded System Lab. II Embedded System Lab. II 2 RTOS Hard Real-Time vs Soft Real-Time RTOS Real-Time, Real-Time RTOS General purpose system OS H/W RTOS H/W task Hard Real-Time Real-Time System, Hard

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

제1장 Unix란 무엇인가?

제1장  Unix란 무엇인가? 4 장파일 컴퓨터과학과박환수 1 2 4.1 시스템호출 컴퓨터시스템구조 유닉스커널 (kernel) 하드웨어를운영관리하여다음과같은서비스를제공 파일관리 (File management) 프로세스관리 (Process management) 메모리관리 (Memory management) 통신관리 (Communication management) 주변장치관리 (Device

More information

프로그램을 학교 등지에서 조금이라도 배운 사람들을 위한 프로그래밍 노트 입니다. 저 역시 그 사람들 중 하나 입니다. 중고등학교 시절 학교 도서관, 새로 생긴 시립 도서관 등을 다니며 책을 보 고 정리하며 어느정도 독학으르 공부하긴 했지만, 자주 안하다 보면 금방 잊어

프로그램을 학교 등지에서 조금이라도 배운 사람들을 위한 프로그래밍 노트 입니다. 저 역시 그 사람들 중 하나 입니다. 중고등학교 시절 학교 도서관, 새로 생긴 시립 도서관 등을 다니며 책을 보 고 정리하며 어느정도 독학으르 공부하긴 했지만, 자주 안하다 보면 금방 잊어 개나리 연구소 C 언어 노트 (tyback.egloos.com) 프로그램을 학교 등지에서 조금이라도 배운 사람들을 위한 프로그래밍 노트 입니다. 저 역시 그 사람들 중 하나 입니다. 중고등학교 시절 학교 도서관, 새로 생긴 시립 도서관 등을 다니며 책을 보 고 정리하며 어느정도 독학으르 공부하긴 했지만, 자주 안하다 보면 금방 잊어먹고 하더라구요. 그래서,

More information

0x00 Contents 0x About Nickster 0x Analaysis 0x Exploit

0x00 Contents 0x About Nickster 0x Analaysis 0x Exploit Defcon CTF 17 th Nickster Report StolenByte(Son Choong-Ho) http://stolenbyte.egloos.com thscndgh_4@hotmail.com WOWHACKER 2009. 08. 09 0x00 Contents 0x01 ------------- About Nickster 0x02 -------------

More information

Lab 3. 실습문제 (Single linked list)_해답.hwp

Lab 3. 실습문제 (Single linked list)_해답.hwp Lab 3. Singly-linked list 의구현 실험실습일시 : 2009. 3. 30. 담당교수 : 정진우 담당조교 : 곽문상 보고서제출기한 : 2009. 4. 5. 학과 : 학번 : 성명 : 실습과제목적 : 이론시간에배운 Singly-linked list를실제로구현할수있다. 실습과제내용 : 주어진소스를이용해 Singly-linked list의각함수를구현한다.

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

3. 다음장에나오는 sigprocmask 함수의설명을참고하여다음프로그램의출력물과그출력물이화면이표시되는시점을예측하세요. ( 힌트 : 각줄이표시되는시점은다음 4 가지중하나. (1) 프로그램수행직후, (2) kill 명령실행직후, (3) 15 #include <signal.

3. 다음장에나오는 sigprocmask 함수의설명을참고하여다음프로그램의출력물과그출력물이화면이표시되는시점을예측하세요. ( 힌트 : 각줄이표시되는시점은다음 4 가지중하나. (1) 프로그램수행직후, (2) kill 명령실행직후, (3) 15 #include <signal. 학번 : 이름 : 1. 다음가정하에서아래프로그램의출력물을예측하세요. 가정 : 부모프로세스의 process id=20100, 자식프로세스의 process id=20101. int glob = 31; /* external variable in initialized data */ char buf[] = "a write to stdout\n"; int main(void)

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

Microsoft PowerPoint - Supplement-03-TCP Programming.ppt [호환 모드]

Microsoft PowerPoint - Supplement-03-TCP Programming.ppt [호환 모드] - Socket Programming in Java - 목차 소켓소개 자바에서의 TCP 프로그램작성방법 주요클래스와메소드 HTTP 프로토콜을이용한예제 에코프로그램 Q/A 에코프로그램 - EchoServer 에코프로그램 - EchoClient TCP Programming 1 소켓소개 IP, Port, and Socket 포트 (Port): 전송계층에서통신을수행하는응용프로그램을찾기위한주소

More information

Microsoft PowerPoint - Supplement-02-Socket Overview.ppt [호환 모드]

Microsoft PowerPoint - Supplement-02-Socket Overview.ppt [호환 모드] 소켓개요 참고문헌 : 컴퓨터네트워크프로그래밍, 김화종, 홍릉과학출판사 Socket 정의 Socket 은 Transport 계층 (TCP 나 UDP) 을이용하는 API 1982 년 BSD 유닉스 41 에서처음소개 윈도우즈의경우 Winsock 제공 JAVA 또한 Socket 프로그래밍을위한클래스제공 Socket Interface 의위치 5-7 (Ses, Pre,

More information

Tmax

Tmax Tmax JTmaxServer User 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

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

Microsoft Word - Tmax Application Development Guide.doc

Microsoft Word - Tmax Application Development Guide.doc Tmax Application Development Guide 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